Dear project managers, that's not so simple
We are all Agile now. I am an agile developer in an agile company working on agile projects. That can be anything else than all good but I spend my times figuring out what should be done.
As a developer, somebody through various agile tools tell me what should be done. The most accurate description you can expect to get would be something like:
We need a simple login page
Thanks, I wouldn’t have though a website need that.
What I’d like to hear as a backend developer.
We need a page containing a login form with a username and a password. We will use SAML to validate credentials. A link provide a change password page where you can fill in your email address. Upon success, the user is redirected to his profile page. If the user has been flagged as XYZ, he should get a message saying “You are flagged Mr!”. If 3 failures occurs, the user is blocked and informed by a message.
Yeah, I know all that seems pretty obvious and most of them are obvious but:
- What if your project can accept email address as username?
- Facebook or twitter login?
- What if you should redirect to the home page?
- What if you do not display the message?
- What if you do not block the user?
You push to test, somebody test, notice or not something is wrong and deploy to stage or prod. Somebody notice that’s wrong, create a ticket for you. You fix, deploy, they test and all fine. You think you are a bad developer, they think the same. Two complete loops because at the beginning, requirements was vague.
But we are agile
That is definitely not agile. That is a:
- problem in communication. That lacks accuracy and doesn’t understand the context which should be used to describe the problem. That uses a user point of view instead of a technical point of view.
- That’s lazy thinking. By giving a simple “we need a login page”, you do not have to imagine the solution, think about the lifecycle, etc… You have been lazy (like a dev).
- Risky. What is an obvious way of doing something for a developer might not be obvious. Do you really want a command line login page?
Agile means you can change your mind later when you will have a better understand of what you need, a better view of what is ok, what is wrong. That doesn’t mean the developer has to figure out what is the best thing to do knowing no detail about the task.
Anytime I have to figure out what should be done, I obviously lose coding time but that also break the flow, which mean even more time lost.
Now, we are gonna fix that
The solution starts by thinking harder about the problem and gathers as much information as possible before submitting your inquiry to the poor lost developer, but mainly, no developers told you what we really expect. The problem is wide but I am going to try.
Before requesting anything to a dev think about:
-
The solution lifecycle. Where do you come from, where you are going after. Which conditions are required before performing the operation. ex: We received some information about users through an XML file. We were told, the user XYZ need to be set as “blocked” when the tag ABC is present and should stay “blocked” after even if this information is no more present . If you think about the lifecycle, you will spot there is a problem to “unblock” the user. How are we doing that?
-
Validations and formatting. How do you expect values to be shown and what are we doing when they do not match that. ex: Number formatting, form validations, list/table sorting.
-
Admin interface and other tools. On a website especially, when you have a new kind of data, that’s really likely that you should be able to manage that. ex: You would have the list of user, being able to inactivate them, change their password, etc…
-
Data source and exchange format. That’s on the border of being too technical but if there is anything required, you should know. ex: lovely SOAP exchange, data coming from the XML file (maybe event tag XYZ), populated with the admin interface.
-
Calculation rules. When you have any kind of calculated values, knowing how that’s calculated is helpful. That doesn’t need to be a mathematical representation. ex: This value is the sum of average sell volumes for all users in that groups for the last 3 months from today date.
A slight improvement in the way requirements are handled might have a big impact on your project. You will still have bugs, developers not reading the specs or whatever but greater quality as input give greater output quality.