About two years ago I trained for and ran a half marathon, and during my training I encountered the minimalist running shoe movement. According to the minimalists, human feet are designed to move us across the ground barefoot, and by wrapping them in thick foam cushions and arch supports, we are doing more harm than good. Minimalist shoes are designed to prevent your feet from being shredded by the pavement and not much more.
I believe it is time for a minimalist movement in software architecture. Here are a few reasons why.
1. You Will Never Reach the End State
Every major project I’ve been on has a page like this in the project charter or strategy document:
Ironically, a past project or set of projects with very similar diagrams resulted in the mess we call today’s “current state.” Why? Business needs change, technology changes, people come and go in our organizations. Docker wasn’t a thing three years ago. It appeared on exactly 0% of future state diagrams. Does that mean you shouldn’t use Docker today if it meets a need? Of course not.
Michael Nygard gives a great talk on this at InfoQ.
2. You Can’t Predict the Future
As architects, our primary goal must be to solve the problem at hand. Reuse should happen organically when it makes sense, but it should not be a primary goal of our projects. When you buy a car, you don’t buy it so you can reuse the carburetor in your next car. So why do we build systems this way?
Software engineers are their own worst enemies at times—we’ve trained our customers to expect future cost savings by reusing what we build. But according to Kevin Wentzel and others at HP, this is easier said than done—and when it is done it costs a lot of money.
3. Simplicity Is Bliss
Also known as “Keep It Simple Stupid” (KISS) or “Do the Simplest Thing that Could Possibly Work” (credit: Ward Cunningham). Since you can’t predict the future, do the cheapest, simplest thing now that achieves the goal.
Just like over-engineered running shoes hurt our feet, over-engineered systems hurt our organizations. On my best days as a developer I delete more code than I write. It is time to start deleting things from our architectures.
Do you really need an enterprise service bus (ESB)? The chief technology officer of MuleSoft says probably not. Most of the time an app, some great APIs, and a load balancer in the middle will do nicely. Do you need a NoSQL database? Maybe, depending on the shape and size of your data and how you want to present it. But maybe not. Relational databases aren’t hip but they are battle tested, easy to use, and scale pretty well unless you’re Google or Netflix. Combine one with a high-performance distributed cache and you’re in business. If you become Google someday, great! You will have near limitless resources to invest in your “future state” architecture.
Netflix took a minimalist approach before they accounted for over one-third of Internet traffic in North America, and their evolution over time is well documented.
Ready to go minimalist? What do you need to delete from your architecture?