This is my first blog on Architecture Principles. The most important I believe is “Keep it simple”.
This principle seems obvious. But early in my consulting career as a young, feeling really smart and ambitious technologist I totally ignored this principle. When my customer stated a business requirement I would construct the technical solution for it no matter how complex. Often I would “improve” the business requirement and make the solution even more complex. This was further reinforced because my customer was thrilled with the cool functionality I delivered. Then I enthusiastically moved on to my next client and did it all over again.
What I didn’t see was what my customer was stuck with. If something in their business process changed and my ingenious solution malfunctioned it took an enormous effort to figure out how to fix it. Same if the customer wanted to add to or adjust capabilities of my solution. This is why consultants have no issue building this complex stuff for you*. It takes more effort to do (= more billing) and if you get called back or have a maintenance contract it takes more to maintain (= more billing).
My younger self’s behavior and trap I fell into is not untypical. In companies, especially large ones, every department head thinks their function needs the mosts sophisticated capabilities and special sauce to be “world class”. “World class” and “best practices” are two terms that drive me nuts. Why would my low volume business need the logistics capabilities of FedEx? Why does my B2B business’s eCommerce site have to be as good as Amazon’s? They don’t. Keep your non-differentiating capabilities as vanilla as possible. In IT terms this equates to only using out of the box capability of the SaaS product you use for that function or even better just use what your ERP vendor provides. Another option is to outsource your non-differentiating business capabilities.
This does not give the green light to go wild with your differentiating business capabilities. Think hard before you decide that your ERP is not good enough. Think even harder that a Best of Bread SaaS vendor’s product is not good enough as is. If it is differentiating enough or simple enough to enable go let your developers at it. Make sure when they go at it though they add the capability in such a way that it is maintainable and flexible (i.e. easy to modify and adjust).
“The only thing that does not change, is change itself.” - Leo Veness. “The Only Constant in Life Is Change.”- Heraclitus. Complexity makes change harder.
“Growth creates complexity, and complexity is the silent killer of growth” - Some smart guys from Bain & Company**
Do a little Googling and I’m sure you can add to the list. So please, please, please Keep IT Simple.
* This is not an insult to consulting companies. What I see happen is that good consultants warn customers to keep it simple, but the customer overrules them because the business requirement is a “must have”. You can’t blame the consultant for warning you once or twice and then saying “screw it, I’ll take your money”
** The Founder’s Mentality: How to Overcome the Predictable Crises of Growth (Harvard Business Review Press; June 7, 2016) by Bain Partners Chris Zook and James Allen