Why developers are so difficult 🤬
Argh! The developers are so difficult. They always ask so many questions. Why can’t they just do what I asked them?
I bet a lot of managers, domain experts, and other project stakeholders have said something along those lines.
Why indeed? Because the job of a software developer is to explain a seemingly clear (but really quite vague) task to a machine which is extremely picky about the details.
An example #
Let me demonstrate this with an example.
A manager in HR requests a feature in the payroll system, saying something like this.
The system should ensure that all employees report time every day.
To actually implement this, the developer needs answers to a lot of questions.
- What do you mean by “ensure”? (The system cannot make anyone do anything.)
- What happens if they don’t? Are there any consequences for the employee?
- Should they be reminded about it? How? When?
- Can you report time retroactively? If so, can an employee do this themselves or do they need to contact a manager or HR employee?
- What happens with this information? Should someone be able to view a report? Who? Should their manager be notified?
- What does “employee” mean? Does this apply to everyone or are there any exceptions? What about interns? What about the CEO?
- What does “day” mean? Does it have to be done during working hours? Does it mean “before midnight”? If so, which “midnight” in what timezone (if the company has employees in different timezones.)
- What does “every” mean? Does it include weekends and national holidays? Does it include vacation days?
- And probably many more…
Some of the questions are necessary because the requirement itself is vague. It is not clear what the payroll system can do to “ensure” employees do things, or whether there should be some kind of reporting built as well.
Other questions are necessary because spoken language is vague and ambiguous while a programming language is not. Computers are extremely sensitive to details. You cannot just say “midnight” without, implicitly or explicitly, also specifying in what timezone it should apply.
Engagement prevents fuckups #
In the end, I think the detailed questions should be seen as a sign of engagement from the developer, and as a mark of craftsmanship. It means they care. The alternative is developers who make assumptions or don’t really care. “Well of course it includes weekends, you said every day.”
It is also why it is crucial that developers have access to the domain experts. Even the best developer cannot have the same depth of understanding as the domain expert, so without access to the real information developers are forced to make assumptions. And assumptions, as the saying goes, is the mother of all fuckups.
So if you don’t want fuckups, engage with developers and answer their questions. It will make the end result much better.