Skip to content
Source

Hopelessness

Some things are initially designed in such a way that they're impossible to remake later. At the same time they increasingly negatively affect the product or development over the long haul. And it's impossible to remake it either because it doesn't occur to anyone (there were no processes and still aren't), or because it's technically impossible already.

The most obvious of such things is analytics. There's no such thing that we have tasks to add event sending to new features, but nobody ever thinks about the task of removing unnecessary ones? And our app sends hundreds of requests, usually also to several analytics services just in case, even for those events that could have been deleted long ago.

Remote configs. For example, a dynamic map with strings on the backend or feature toggles from Firebase. Same thing. You add a new item to the config at the moment of business necessity, a hardcoded key appears on the app side. And that's it. You'll now have to keep this key in the config for a very long time after the release, because otherwise something will break for users on these old versions. And these configs with thousands of key-value pairs then go to users.

Or deep links. Someone sets them up sometime, but nobody deletes them. Because hell you know which ones the marketing team will want to apply in the next mailings. It gets ridiculous when the only way to get to some forgotten screens is through forgotten deep links.

And the essence of the problem seems to be that such "dynamic" things almost never have clear owners, just as there's no single source of truth. The logic is owned by product people and analysts, the code is owned by developers. Entities are created on both sides, and used unpredictably on a third. Adding an entity comes from a task and most often it's a cheap enough task in terms of resources. And who should initiate the removal of complexity is unclear, should developers escalate? And then what? Who will untangle this ball of dependencies? Usually nobody, because it's minor. 🖕

However, even if we do this, we'll still have to maintain everything remote for some time until all users update. In the most beautiful scenario this is dropping users with old versions, if there are few enough of them left.

Absolutely sure that several tens of thousands of lines of code, cumulatively gigabytes of traffic, hours of user waiting - all this can be eliminated just by remembering what someone once added, and now nobody needs. None of the current employees may even know that such exists anymore. I'm sure that in every first app it's like this.