I've seen hundreds of software projects, and a significant chunk of these failed. All of the failed projects I have seen have one thing in common; Over engineering.
Typically over engineered projects becomes over engineered because the developer starting out the project truly believes in the importance of some technology. He's fallen for the "Kool Aid" sales argument. A slightly more malicious reason for over engineering is CV based development. However, I suspect both of these reasons plays a role in most over engineered projects.
Over engineered projects are almost like a malicious disease having infected our industry at large, because whenever some software company needs more software developers, they'll ask for some resource having experience with every imaginable "Kool Aid" tech stack that exists, because this is what they currently have, so they need to have people with this skillset to maintain their existing garbage.
Software developers looking for jobs again, will see these job postings, and do their best to learn these tech stacks somehow, while compromising whatever product they are currently working at with their current employer. This results in a malicious circle of over engineering, where the companies needs people with skills, leading to over engineering in the industry at large. My philosophy here is as follows ...
Everything that can be fixed with a hammer is a nail
At Aista we've turned simplicity into almost a declaration of faith. Every time we've got some problem, we ask ourselves; "What is the simplest possible solution that works for this particular problem?" As we answer that question, we always end up throwing the following tech stuff and architectural ideas out of our projects.
- MongoDB
- CouchBase
- DynamoDB
- Scylla
- Cassandra
- CosmosDB
- Logical Apps
- MWF
- Pulsar
- Kafka
- RabbitMQ
- ActiveMQ
- Solace
- NServiceBus
- OOP
- OOD
- OOA
- OOx (substitute the x by any Latin alphabet character)
- Design Patterns
- DDD
- MVC
- CQRS
- Sagas
- Event sinks
- AI
- Deep Learning
- Machine Learning
- Etc, etc, etc ...
If you can't implement it with a bunch of trained monkeys, it's probably over engineered
The above of course is just a tiny example. For a complete list, create an aggregate result of some 1,000+ CVs submitted to your employer by senior developers over the last 5 years, and realise that 98% of everything on that list are things we wouldn't even consider using at Aista.
Don't get me wrong here, all of the above technologies and ideas do have use cases where they are needed, but all of them are also abused to the extreme. If you don't believe me, read the comments on this article please.
For crying out loud man, you do not need a sentient self aware CRM system to track your sales people in your organisation. However, there exists dozens of CRM systems priding themselves in "having AI in their core". The laughing joke is that 90% of a CRM system's purpose is to be "a better Excel". In fact, if you can get away with Excel or Numbers, you don't even need a CRM system at all. And definitely not an "AI based CRM system".
KISS improves your ability to deliver by 5 orders of magnitude
KISS in the above sentence of course, refers to "Keep It Stupid Simple". When you follow simplicity software development to its natural conclusion, you realise that all the buzzwords our industry have created over the last decades are simply that; Buzzwords. Our industry has turned into a superstitious church, where the declaration of faith has become as follows.
"I believe in any latest and newest cutting edge tech that complicates my app by 5 orders of magnitudes"
And of course, if you don't believe in the above, you are not "experienced", and you need to "work on your CV". Words such as presented in the above list serves the same purpose as the declaration of faith does in most (other) religions - Because yes, software development has turned into a religion, where disagreeing with the common consensus is almost like cursing in church.
Well, I'm going all in on this one, and I will debunk every single garbage tech and buzzword, one by one, in this article series, in an attempt at trying to normalise the discussion.
The upside with KISS
As you simplify things, new axioms of software development emerges. For instance, creating our own product would have been literally impossible if we were to apply most of the buzzwords in the above list. Our product of course, allows the machine to create most of the code, in seconds. If you want to see what KISS can truly provide, feel free to register below and see KISS in action ...
Top comments (4)
Completely agree on that! That's the axiom I repeated to my interns everyday. And especially because time is money, and money is not an infinite resource. Also, of course, your code is more maintainable (but, we're back at time = money basically).
What I like the most is to find a way that cuts the development of a feature by half or more: never underestimate analysis step.
Word!
You should continue your series.
Not sure how much more I've got to say, but thank you :)