Creating software is easy. It’s like you are building a plane and they forgot to provide you the building materials and you have to install both wings on one side according to the specification but no one knows how to do it and the plane is already flying and they already sold 10x more tickets that you can put in the plane and suddenly the fire starts….
Ok, I worked too long as the project manager, so forgive me for being too optimistic. Let’s imagine you have a new project. That would be a great journey! Because this time EVERYTHING WOULD BE DIFFERENT. You wanted to be different this time, but ended up as usual…in the hell. So what is causing this permanent hell? I tried to point out the most obvious causes.
Thanks to this article by @bryanedds I managed to organize my thoughts about this topic. Bingo! Short term thinking! “After us, the deluge” – how often do we see that in manager’s actions?
For me it looks like we are using the extreme business driven development. I am not saying that it is bad. The software is created for business, so it should receive input from business. But the decisions which are made by business are often impulsive and vision is rather short-term. Especially when it concerns the technical decisions. I rarely saw business taking into consideration technical concerns or preparing to them in advance. Yes, we all know that thinking in advance can save some money in the future, but looks like these business guys are not sure they are going to have this future. Long term strategies are not welcomed – everything changes so fast that it is better to code smth fast, ship it and… we don’t know what will happen tomorrow. But sometimes we survive till tomorrow and face with smth like this in our repository:
Usually we are faced with this when the business wants to “develop and ship the version 2 of our product ASAP!”. And the development department comes with the response “We need to rewrite it from scratch!”. But the business is not prepared for such a disaster. They are usually really surprised, as no one thinks that all their shortcuts and “let’s do that quickly and fix later” summarize to present us this effect.
I do not think you need to put a lot of time upfront(it is the opposite extreme way to do it), but there should be a balanced approach, because the more time you spent upfront on your software – the easier it would be to implement changes and keep the code healthy. It will increase a chance to have something stable as the result. But business seems no value in spending some time upfront. And you end up fighting the fire each time.
The dark side, which has all the cookies
What does Team Lead usually do? He is the layer between the business/management and the team. So team lead becomes a great politician. Because you can’t survive if you don’t “understand the business needs”. And business needs are always the same – do that as quick as possible (or even quicker). You become a professional in the business eyes if you can “trick” the system somehow – find some way to avoid that long development process and do all the magic quickly. No matter how. If you can do that – you are a good team player and get promoted.
If you are producing cars and are advised by the management to replace all safety air bags with seat parts as “it would be much quicker and cheaper, they are soft and look almost the same. Let’s re-use them!” – you would probably think that they are crazy and refuse. As it will kill your car’s future passengers. But we are doing the same with software every day. We can’t resist the business pressure. If you are lucky and join the new project you start with the nice clean architecture, you want to make your product valuable for the users, solving their issues and fulfilling their needs. And in a while you find yourself saying “yes” to everything and very tired of fighting with the manager
“Real life is different”
We all read good books. About good flexible architecture. About good flexible processes. About great design. About a lot of very interesting stuff. And in the morning we enter the office… and nothing happens. And we all know why – “Because the real life is different”. I have heard this hundreds of times. All of us so tired of been unable to change at least something. We keep hoping that “somewhere there is a magical ideal world, where all this stuff is used. But I have go back to work now fixing this legacy code”.
Agile seemed to be the great escape from the corporate hell. We hoped to be able to improve things, make some influence on the end product. But it became just another management instrument. Now you have Scrum and you still have project managers. May be they are now wearing scrum master hat or name themselves “product owner”. But you still have to hand in you daily reports and timesheets. And still you have no influence on anything. And it is not the worst case scenario. Sometimes they just put the label “agile” on top of it and that is all.
Also we have this new huge industry – “Agile”. Certifications, Scrum Masters, Coaches (don’t look up my Linkedin, I am just a secret agent in that Agile field!!!). You can pay 1k and become a certified Scrum Master.
That is the most frustrating part. Because you start with a great enthusiasm and then you enter the room full of people who care. Here, I have a picture of this room:
And business seems to be ok with that. Which means everyone is ok with that. There are no issues at all! It makes me wondering if that this is really a normal process and a normal result. Because it is just what the life is…
How to survive
If business rules it all, there are several ways out – become a business yourself, go out of business or just stop caring and become a guy who makes the job done. Ok, there is one more – find good business guys and join them) And don’t forget to do your part good 😉
*Disclaimer: All characters appearing in this work are fictitious. Any resemblance to real persons, living or dead, is purely coincidental.