Stick to boring architecture for as long as possible.
Don't get lost in the tech; keep your sight fixed on the value created.
"Stick to boring architecture for as long as possible, and spend the majority of your time, and resources, building something your customers are willing to pay for." - Kelsey Hightower
When we're starting new projects, there's an undeniable allure to the latest languages, frameworks, and libraries. As engineers, we are, by nature, attracted to novel solutions. However, it’s critical to discern between what’s exciting and what’s right for your use case.
Often, “boring” technology – those stable, well-understood, and perhaps previous-generation tools – have a lot to offer. They are usually tried and tested, have proven scalability, and come with extensive documentation and community support.
The Folly of FOMO (Fear of Missing Out)
In the tech world, FOMO can be a driving force behind our choices (we've often been there). However, it is not necessarily productive. While being aware of emerging technologies is important, chasing them without a clear value proposition can lead to needless complexity, technical debt, and resource drain.
Before adopting a new technology, ask yourself: "Does it solve a specific problem or significantly enhance my product? Is it worth the learning curve and potential instability? Is this going to help us further down the line?"
The Innovation Point Principle
One helpful concept that can guide tech choice is the "Innovation Point Principle."
Imagine that for each project, you have one “innovation point” that you can spend on adopting an “exciting” technology or architecture. This single point forces you to make a deliberate and judicious choice. Spend it wisely; use it when a new technology clearly adds substantial value to your project.
Otherwise, rely on what you know works.
Reframing Your Mindset: From Creativity to Value
As engineers, we often seek creative expression through our work. However, it is essential to recognize that in a professional setting, our primary goal is to deliver value to the customers.
This does not mean that creativity has no place; rather, it should be channeled into building innovative solutions that customers love and are willing to pay for.
Software is a vehicle for delivering value to people.
Good software seamlessly integrates itself into users' lives, enhancing their capabilities and experiences without necessitating significant conscious effort on their part. In that sense, software is indeed a vehicle, its design and functionality facilitating the journey of its users from one point of need or desire to another.
The goal of any software application should primarily be about delivering value.
This concept of "value" might be broad-ranging: it could be the ease of completing a task, the ability to connect with people across the globe, the provision of entertainment, or even the saving of lives in critical applications such as healthcare.
In each case, the software's value is measured by how well it addresses the need it was designed to fulfill, enhancing the lives and experiences of the people who use it.
However, it is all too easy for software engineers to become fixated on the tools at our disposal - the latest frameworks, libraries, programming languages, dev environments, and methodologies. The ever-evolving landscape of software development tools can, without a doubt, offer improved efficiencies, enhanced capabilities, and new possibilities.
It is crucial to remember that tools are just means to an end, not the end in themselves.
Becoming lost in these tools can lead to a kind of tunnel vision, where the focus is placed more on how to leverage the latest technology than on the value that the software is intended to deliver. As a result, software projects can risk becoming technologically impressive but functionally lacking or unnecessarily complex. It is akin to constructing a sleek and state-of-the-art vehicle that, for all its advanced features, does not transport passengers comfortably or safely.
To avoid this pitfall, we must remember to keep our sight fixed on the value created by our software. This perspective realignment starts with understanding the needs of the end-user. A deep and empathetic understanding of the user's needs, expectations, and context should guide every decision in the software development process. The selection of tools, algorithms, architectures, and interfaces should all be driven by the question, "Does this choice enhance the value that the software delivers to its users?"
Taking this user-centric approach ensures that our software stays relevant, usable, and valuable.
By measuring our success not only by the sophistication of our tools but also by the tangible value our software delivers, we can create applications that truly make a difference. Whether it's a banking app that helps people manage their finances better, a healthcare system that saves lives, or a social media platform that connects people, the primary measure of success should be the value delivered to people.
While it's crucial to keep abreast of the latest developments and tools in the software industry, we must not lose sight of our primary purpose: to deliver value to people. This way, we can ensure that we are using our skills and resources to make a real difference in people's lives, rather than just creating technology for its own sake. Therefore, as we navigate the complex and exciting landscape of software development, let us use our tools wisely, always with an eye on the value we seek to create.
The Strategic Progression
Begin your project with a solid foundation based on well-understood technology.
As your project evolves and you thoroughly understand your challenges, evaluate if there’s a compelling reason to incorporate more advanced technologies. It’s an intentional progression: start boring, then strategically innovate.
Prioritize delivering value by initially leaning on stable and well-understood technologies. Innovate selectively and intentionally. Ultimately, the satisfaction of building something that truly makes a difference for your customers is more rewarding than any fleeting excitement that comes from jumping on the latest tech bandwagon.
So, consider embracing the "boring" as the sensible starting point and use "innovation points" wisely to build good products.
For further reading on this subject, do check out https://boringtechnology.club/
KISS used to be my favorite = Keep it simple & stupid. Now, I prefer the boring.
This is such a great reminder, Addy. Our job is indeed to deliver value and not build a fancy tech.
This 💯.
I love using new tech and tools maybe even more than the average dev. ✨
But if it’s not connected to something that gives huge value to our users and requires a steep learning / maintenance / refactoring curve - we should steer clear.
Deliver value. Find the best thing that does that in the simplest way possible, and use that thing as much as possible. 🚀
Sometimes that’s a new thing, and sometimes that just a good oldie.
Thanks for the reminder, Addy!