Read time 2 min
On these rainy summer days I’ve spent a considerable amount of time thinking about the typical life cycles of tailor-made software products. What’s especially interesting to me is ”the light at the end of the tunnel”: what will happen once a piece of bespoke software is deemed outdated or considered for a rewrite.
As horrifying as it may sound, the expiry date for an app is often already set before a single line of code is written. This is mostly because an application concept is always bound to the business vision and technological environment at hand, both of which are in constant flux. Incrementally growing software also tends to hit complexity barriers, where fundamental architecture choices slow down development up to the point where rewrites are needed. Furthermore, interface design trends ramp up renovation pressure, making user-facing components excellent at gathering dust.
However, it turns out that infrastructure below the application layer is actually decent at resisting alteration. The reason is simple: the cost of even seemingly simple changes to the data infrastructure may be unviable because of existing services implemented on top of that data. Take, for example, the seminal music community Last.fm, where it’s still impossible to change your username despite ten years of feature requests. Oops! The schema for those 60 million user profiles totaling billions of songs listened wasn’t quite built with that in mind. I still love them for storing my musical memories from the past decade, though.
Which underlines my point. Last.fm apps have come and gone, but that historical data is aging like fine wine and getting more valuable each day. Even for less data-intensive apps it’s evident that your infrastructure is the core artifact that will likely outlive your applications. This is something we developers must remember in our daily work, doubly so with the current trend towards full-stack roles, where any given dev is likely to be juggling between configuring database clusters and cranking out frontend code.
So hey, fellow full-stack space cowboy, do your future self a favor and invest in coherent and well-structured data from day zero. Get those data models right and build a robust architecture for writing and accessing your precious information. By adopting these idioms of data-driven design, you will provide fertile ground for growing a lean, long-living app ecosystem.