Taming the keyboard
Joining an app with millions of users, and unifying keyboard handling as my first big contribution.
Throughout my career, I've always built things from 0-1. Ever since the beginning. Scaffolding the project architecture, low/high-fidelity prototyping, going through the build process, and eventually getting to prod. That was my specialty (and still is), but at the time it was also a constraint.
So, I've joined c.ai. Millions of users, millions of devices. A community built around an app that was the biggest AI chatting app for years now. No Expo, only bare React Native. A backend I wasn't even daring to run locally. An already established hierarchy when it came down to who owned what in the codebase.
And there was I, facing the difficult conundrum of wanting to be seen for what my skills are worth, which has always worked in the past to highlight the level of software that I was capable of building among my peers, and trying my best to not fuck up everything from the get go.
So, how did I do it?
On my first two weeks, I've stuck to doing small things on the codebase (as one should, in order to understand what's actually going on, typical onboarding process) as I've started to identify the pain points of that enormous codebase.
The first one I caught was related to keyboard handling. We were currently on the process of creating a new chat interface, completely overhauling all of the systems that existed on the legacy one. That meant that the keyboard handling components were a web of components trying to satisfy both chats keyboard handling, alongside custom implementation to have keyboard avoiding views on legacy bottom sheets, new (gorhom's) bottom sheets, modals, forms, scrollviews, you name it.
It was a nightmare.
Then, I started pitching React Native Keyboard Controller to be our source of truth when it came to keyboard handling. People liked the idea, so I started working on it.
Turns out that I didn't have any idea of how many surfaces keyboard handling was touching, and even if I was looking at the code and dropping in the replacement, it was a nightmare to find out how to get to said screen, and how to actually find out which screens were actually reachable or if they were legacy code left behind. There were no GitHub stacks at the time, so I was stuck on rebase hell for quite a while trying to stick to my task while also trying to clean up the legacy screens I found.
Then, after exactly a month of back-and-forth reviews, tests, 45 commits and thousands of LOC's, we managed to launch it. We had a few regressions on small things after launch, but nothing major like breaking prod completely.
It wasn't as noticeable for the community, but as far as DX goes, it was an amazing improvement that continued to generate value even a year after the chat overhaul launch. I've also touched a ton of surfaces regarding this chat overhaul as time went on, and we (the chat team) managed to make such an amazing improvement to the main feature of the app.

