Since 1997 I’m a professional programmer and especially during my 12 years as freelance software development consultant I saw many, many projects, that all had one thing in common: Every technical innovation had to be justified. Usually such method innovations are pushed in an upwards direction from the engineers to the management. And almost never the other way round. Each innovation is a more or less intense struggle, a fight for trust and at last for budget.
We all witnessed this a lot of times, right ? I often wonder how it will be in the future, when software development will be as evolved as … let’s say the craftmanship of a mason. When it is clear that (and which) a unittest-framework with mock-generators and which application-wiring-framework for onion-architectured solid-code is used, for the code that is automatically generated from behavioral UML-charts with lambda-based DDD behavior injection into the microservice based active objects, that are 100%ly auto-tested, immediately deployed to the customers, continuously and immediately refactored up to every slightest change in the customers needs … and all that without any arguing, because it is so natural and everyone does so since hundreds of years. Maybe by using just one tool that covers everything from code-repo over requirements derivation up to the compiler and continuous-integration server with a perfect IDE that types everything by just pressing alt+return …
But today, when all new methods are so young, and I suppose, a lot of the future’s software methods even haven’t been discovered yet, a every slightest advancement needs so much fighting. For every advancement you propose, you reduce your management’s reputation, because if you’re right with your proposal, the question is, why the predecessor of your proposal had been chosen in the past. So the first management reaction is: “That proposal is not necessary. The status quo is an ideal environment. The accusation, our environment might not be appropriate is insulting and wrong.”
Well, I made the experience during my time as a consultant that software departments that use modern technologies are way faster. A project that uses c with printf-debugging on the target can be several times slower than a project that uses c++14 with statemachine-codegeneration and host-based unittests. In the old fashioned way the same feature might cost days and days, that costs only a few hours in a modern environment. If you ever made the experience of working in such different environments, you’d never ever doubt again, that better tools and methods pay off very soon. Unfortunately most good managers are promoted very soon, therefore have actual software developer working experience only in few (sometimes even only one) company, and then they miss this experience. But they decide, because they are responsible for the budget (usually).
And today I asked myself: Why does one has to justify every advancement so much to managers ? Why does every advancement, even the ones that all competitors are utilizing already, has to be discussed ? Why are there the usual amortization calculations, that have faked numbers, but become more than true in the result ? Wouldn’t it make sense, when the top-management simply would say: “Folks, just use latest-greatest, and keep up that level”. A company that would be so brave, would have hell of a lot more productivity/efficiency. And sure as hell, this – as a principle – would amortize. I know that from my experience when I changed between companies with different levels. I saw tasks lasting for months and months that I knew, in other companies would had been finished in weeks. This definitely would work.
This sounds so simple, almost naive, but I truly believe it will work. My vision is that every developer-team can just use latest-greatest technology without fighting for it. Everyone gets the permission to refactor, migrate, buy licenses just by saying: We need this, because it’s latest greatest, and our CTO gave the strategy ‘folks, use latest greatest, because we claim to be the greatest’.
What would be so bad in having the most efficient software development in the world ? What would be wrong in being the leader ? What is wrong about creating more customer value in less time ? At some point one has to be better than the competitors – and embedded software is where the USPs come from today !