A professional says no


How many times, as professional software engineers, we received any kind of pressure from our managers in order to deliver software way before the actual date it can be shipped?

I need this in two days. I know you're a star, I know you can do it.

While this sentence looks very flattering (and probably it is), it hides lot more danger than expected. If we know that this needs at least one week of work, what we been asked is just impossible. However, as it has been asked by your manager, we somehow feel obliged to try it. After all, there are some actions that could be thought about...

  • I won't be writing any tests, don't have time for it.
  • I won't be refactoring, as I don't have time to go back on what I've already written.
  • I'll work twice the number of hours per day.
  • ... and some more.

The truth is, if we're thinking about these actions, we're not acting as a professional.

A professional can be defined as somebody that has a strong expertise in his field, and takes responsibility and accountability for his action. Think about a surgeon: would he try to make a surgery in half of the time because the director of the unit asked him to do so? Very unlikely. You may argue that a professional director would never ask a surgeon to do so - and you're right. A professional development manager should never ask his developers to do their job quickly - if he hired them in the first place, he should know that he hired professional people that perform at their best all the time (ok, this may not always be true, but as craftsmen we commit to perform at our best and to steadily give value).

But he asked the same. What a professional engineer then would do?

In my opinion, the first thing is being honest with ourselves, and actually think about what we are doing. Maybe the process can be improved, maybe we can make sure the team goes to lunch at the same time to avoid idle times. But sometimes this is not the case. We know that us and our team are already performing as good as we can. Still, the manager wants that. What shall we do?

We should say no.

It's obviously not easy to say to to your manager. Some manager don't take no easily as an answer, and they'll try to persuade you. After all, they know you and probably with their speech they'll find your weakest spot. Some of them - could be those with a technical background - will try to micro-manage you and not only ask you to go faster, but also how to do that.

But a professional is responsible and accountable for his actions. If a professional develops software without quality, he's not giving value. If a professional gives false hopes about a delivery, he's not talking based on facts, but on assumptions. And how many times we saw project failing due to false hopes?

Of course, we should always give our best. We should strive to improve our process, we should practice regularly to become more proficient in what we do, and we should give our employers the best quality they can ask for. This is always the first point. But - if that's already the case - saying no it's better than trying to be nice and "willing to try", giving false hopes.

Do or do not. There is no try.

P.S. This post is widely inspired by a chapter of Uncle Bob book The Clean Coder: A Code of Conduct for Professional Programmers which I'm reading at the moment. Highly recommended!