It’s developer’s fault
When a project turns into a nightmare, developers often have the reflex to point the finger at irresponsible direction or management. But when can we talk about their responsibilities? Where is the line that separates the real professionals from the rest of the developers?
Regular gasoline
A long time ago, in a galaxy far, far away, I was working on the backend of an application. A huge Symfony 3 API with an sonata admin made up like a stolen car. The code was beautiful. It was clean.
There was no pressure. We were on time for delivery.
I say we, because we worked in pairs. Lambert, on the front end, is a talented developer. He was developing an Android and IOS mobile application with Apache Cordova. He used my backend for the data. And it was also very clean in Lambert’s code.
It’s Friday night. One week before the deadline. We’ve already finished everything.
This is a very rare situation, so I insist. Whether it’s at the back with my backend or at the front with Lambert application, we’re ahead of the game.
We are in the middle of a sunny and warm month of August in the center of Lyon (France). This is the world before. No virus on the horizon. All our web agency is piled up on the terrace of a bar. A light breeze comes to refresh us all evening. That and the big pints that we put on.
Life is beautiful.
Darwin. I Ching.
Monday morning. The clouds prevent the sun from breaking through. I arrive with a little delay at the agency. When Lambert sees me arrive, he gets up and immediately comes towards me.
Lambert : Did you see Greg’s email?
Me : Olala what’s going on?
Lambert: It’s bad. They’ve added 3000 features.
Me : …
Lambert: And it’s the same delivery date!
Me : No way, don’t worry.
Lambert : Look at Greg’s mail !!!!
Me : Greg do this all the time ! He’s shortening the deadlines to make people run.
He was sweating stress. I’d never seen him like that. In a few minutes, everything had changed.
Truth is that I was as stressed as he was. I knew that such brutal changes were a sign of enormous management pressure. Pressure we were soon to inherit.
But most of all I knew we were going to have to face Greg.
Greg is the director of the agency. With Lambert, we normally work with a project manager on our projects. It’s the same for all the developers. If all of a sudden Greg gets involved in the discussions, there’s only one possible reason.
The financial stakes are enormous.
The client is a huge pharmaceutical laboratory. We’re in the top 10. You have to understand that the pharmaceutical sector, in terms of money, is absolutely indecent.
Some people in these laboratories do not hesitate to pay a lot to spend their entire budget for the year. If they don’t, their budget is reduced the following year. That’s the level of money we’re at. And despite the fact that this application is an internal application: we’re talking about a lot of money.
You have to make a good impression. If we make a good impression, the contracts will be even bigger. If not, they will go elsewhere.
It doesn’t fit
With Lambert, we spent the morning estimating the changes. These changes were abominable. We had to add a lot of features. There were a lot of extra screens. But most importantly, we were changing almost all the existing screens.
You know my opinion on estimates. Already at the time, I had this position. Already at the time, I didn’t give an absolute figure.
It is August 10. This week-end is August 15. It has to be delivered in production on Monday August 17.
We estimate that it takes between 2 to 3 weeks to produce what they are asked for. It doesn’t fit. Even if we work overtime all the weekend, it doesn’t fit. Add another dev to help us? In such a short time, it will not work because of the ramp up. Anyway, everyone is under water.
We considered everything, it doesn’t fit.
And then we had an idea.
We can reasonably make some of the new screens – the most important ones – without affecting the existing flow in a week. We’re going to propose that. It’s going to be fine.
Jazz
The meeting with Greg was just after the lunch break. Normally, it’s not easy to have a normal discussion with him. He is known to always force your hand. By twisting your wrist if he has to.
With the financial pressure of this project, his face had become a prison door.
The most important meeting in all this tory was about to begin. Being the more senior of the two, he would be talking to me a lot. That annoyed me. So I was talking to Lambert a lot. It annoyed him.
The discussion lasts more than an hour.
Quite honestly, I don’t remember the whole discussion. And certainly not word for word. However, I do remember the part that interests us.
Me: You can’t just add work without adding work time.
Greg: I know both of you are early.
Lambert: The changes are too big. A week early is not enough.
Greg: *talking to me* It just takes two weeks, right?
Me: *talking to Lambert* Two weeks minimum! We would need between two and three weeks. Maybe more!
Lambert : *talking to Greg* Maybe more!
Greg : You need 10 days. It’s Monday. If we count today, that we include this WE, it’s already 7 days. With your combined talents, you have the ability to do it. We can do things fast, I’m sure you can. You’ve already worked miracles. Why not this time?
I remember not answering anything and blocking completely at that point.
Doesn’t he listen to what he’s told ?
Greg: You know that this client is important. We’re going to keep him. They’re doing their demo on Monday, we’ll be ready on Monday. We’re committed to that delivery date. We’re going to keep it. It’s critical for them, so it’s critical for us.
OK. So the customer is convinced that everything is fine.
Greg: I’m obviously paying you for your two extra days this weekend. You can also count on an extra bonus. I make efforts and I find solutions. We need you.
Me: *talking to Lambert* This meeting is useless. We have no choice.
Lambert : …
Greg: *standing up* I believe in you. You are the best. You’re going to make it.
Me: It doesn’t fit. What do you want me to say? I guess we’re going to try.
Collateral
The first damage was the tsunamis of stress that frequently whipped our mental health. In a situation like ours, every bug, every unexpected event is a pure injection of intravenous anxiety. One bug, felt 60.
The damage on our free time was heavy. Just before the WE, we were not in a good situation. When we accepted the overtime, Lambert and I had plans with friends and family. I remember getting a call from my drunk buddies asking me what the hell I was doing.
I was too busy to explain on the phone.
This is also where the damage to quality began. No more testing, no more frequent builds, no more clean code, no more reviews and no more QA. All our normal process smashed to the ground. It always feels like you’re going faster.
The communication also took a lot of damage. First with management. These irresponsible people were the source of our misfortunes. We made them feel it in our responses.
The damage was also important between us. Between Lambert and me. Panic and precipitation are not compatible with courtesy. Especially in the middle of a burning Sunday afternoon without the air conditioning still working on this damn application.
Especially since we knew what was waiting for us. We knew it was not going to fit. No matter how fast we accelerated, we knew how this crazy race against time would end.
With noise and clatter.
Our fully functional application was replaced by a barely usable application on Monday August 17 in the morning.
While Lambert and I were sleeping, they more or less managed to show things during the demo. But the application was behaving very strangely. They had to relaunch it. Several times.
We were on the absolute opposite of the expected “strong impression”.
Trauma
The pharmaceutical company played dead after this story. They did not solicit us for other contracts. They didn’t even ask us for an update on this application.
And most of the damage was yet to come.
Almost a month later, Lambert comes to sit next to me for no reason. It was his last day. He had just been fired for a benign reason. A small mistake brutally cost him his job.
Absolutely the whole agency, in shock, was talking about unfair dismissal.
And rightly so.
I told him right away that it must be related to this application story. He didn’t give a damn. He just came to say goodbye. He was happy. He was finally going to leave this agency -which he had ended up hating- with a nice paycheck.
He found something the following week.
A few months later, I followed Lambert’s advice. I resigned without any explanation. I was already far away in my head. I was preparing to leave France and move to Canada.
During this transition I was convinced that the one and only culprits in this whole story were the management. This is all but my fault! Least of all Lambert’s. It is entirely the fault of this amateur and irresponsible agency.
I was wrong.
Do or do not
All the consequences of this story are entirely my fault. The most serious mistake was my attitude during the meeting with Greg. I knew it was impossible to get to the result in the time allotted. And yet what did I say?
I said we were going to “try”.
I said that to avoid confrontation. I said that because the stakes were too high. I said that to save face. I also said that to have a chance to be the hero. The one who gets the job done on time.
It was fundamentally dishonest and unprofessional on my part.
A professional is expected to say no, regardless of the person and the issues at stake.
A professional developer imposes reality in the face of power. A professional developer defends these deliverables with the same aggressiveness that a management wants to change them. A professional developer says no when the stakes are high. That’s when it’s most important to do it.
A professional developer does everything to deliver quality work in the time allotted. And sometimes that means saying no to stupid deadlines. You can reduce the scope, postpone a date, deliver by iteration, and generally impose constraints that will allow you to commit to a date.
We commit ourselves to do it, because we know we will do it. We don’t try.
I should have stood up to Greg. I should have made him understand that it was impossible. To close any possibility with these conditions. Clearly and repeatedly annihilate all these hopes. Forcing him to accept our alternative solution. Force him to call the laboratory. Force him to postpone the demo.
Greg should have left the meeting furious at me. Convinced it wasn’t going to fit. Looking for another solution.
Who knows, the customer might have agreed to postpone. The client might have found another alternative. The agency might have found another alternative. Greg might have ended up accepting our alternative.
Maybe that customer would still be a customer today.
But no. He came out confident. I had decided to try. I condemned my company to failure by avoiding this conflict.
And at the same time, I forced Lambert with me in this suicide mission.
Amateur
All my actions that followed then screamed amateurism.
I agreed to work overtime when there was no plan B. It’s a recipe for chaos. A Plan B should be required if your company requires overtime.
I deliberately eliminated the quality processes in order to go faster. In addition to being irresponsible and stupid, it doesn’t allow you to go faster. Even in the short term.
I handled the pressure in a disastrous way. I felt it in my communications and in my work. For the sake of length, I won’t say everything, but several unprofessional exchanges took place between us and the agency.
I delivered an application in production which i was sure it was defective. As a developer, I believe this is the very definition of non-professionalism.
I was an irresponsible amateur who accused others of being responsible for everything. I could not accept my responsibility at that time. It was inconceivable to me, I was the victim, not the responsible one.
It hurts when you finally face reality.
Professional
I didn’t realize all this with a sudden epiphany waking up one morning. I realized all this while reading a classic.
My recommendation of the day : Clean Coder.
In one sentence, this book is the code of conduct for the professional developer.
This book opened my eyes to my attitude and all the problems that came with it. Knowing when and how to say no is indeed something very important that I was missing. But it is far from being all that I have learned from this book.
This book has taught me to take responsibility as a professional. It taught me how to manage my time, it gave me a real framework to estimate my tasks, it taught me how to manage pressure like a professional, but also how to better collaborate.
In a world where developers just code without asking questions, professionals do much more than that.
They are then quickly identified as “the right people” in a team. And that makes all the difference.
It is intended for all developers, regardless of their level. I would even say that the sooner, the better. Another book I would have liked to read at the beginning of my career.
Epilogue
A true professional is a considerable asset for a company. A reliable person you can count on. You can count on his work, but also on the way he does it. He does it honestly and always in the best interest of his company. Even when it means getting into conflict. Especially when it means getting into conflict.