Critical Path Newsletter
Can your candidate spot missing requirements?
There may be software project managers in the world who can define every last technical requirement of the tasks he assigns, quickly and on the fly. I’m not one of them. With time pressure and daily distractions, there will always be missing requirements in the tasks I assign.
So I rely on the developers on my team to fill in the details when I forget them–or overlook them as too obvious. Don't get me wrong, it's important to strive for complete requirements when you assign tasks. But the team members should be able to meet you half way.
I might spend an hour defining the technical product requirements for an XML parser. It needs to be a DOM parser. It needs to read in data from an XML file. It needs to have a GUI representation in Windows using MFC CTreeCtrl. Searching the tree should take O(log n) time, etc., etc.
But if I forget one detail, perhaps something I consider very obvious such as "this needs to be portable," I hope the developer won’t come back in a week with a great parser that meets all the requirements, but is based on Windows MS-XML.
One thing that can help is if you select team members who are quite good at detecting missing requirements up front. At Macadamian, we always give a "Missing Requirements" written interview question, especially to the global partners because the problem is amplified by language barriers, time zone differences, and lack of face to face communication.
You should consider adding a missing requirements question to your own interview process. I'll show you a simple example of the missing requirements question we give in our own interviews, then I'll explain the ingredients you need to make your own missing requirements question.
Missing Requirements Question
|
Instructions Your manager sends you a request to help on a project you haven't seen before. List the assumptions you would make and questions you would ask before beginning implementation. Note: Don’t write out the implementation. The task Write a function that:
database.txt is a text file which contains usernames and passwords in the following format:firstname-lastname-password The function you write must be portable. It must integrate with the DaVinci project's existing codebase. |
Elements of the Missing Requirements Question
Let’s look at the missing requirements in this question–and there are a lot of them:
- References to software/acronyms/functions the developer doesn’t know
- Vague specs
- Missing technical requirements
- Flawed design specs
- Contradictory specs
- Missing work environment requirements
References to software/acronyms/functions the developer doesn’t know
What is the DaVinci project? Could you give me the SubVersion URL so I could obtain the sources?
If the candidate doesn't point these out, sound the alarm! Imagine giving a developer in India a critical task but forgetting to tell him where to find the instructions. That's bad on your part, but if he doesn't notice it either, you’ll start the next morning with an e-mail that says "You forgot to tell me where to find the instructions. I couldn’t get any work done today."
Vague specs
What does "efficient" mean in this context? Efficient in terms of time, in terms of memory consumption, etc.? What benchmark should I aim for? Maybe "no search must take longer than 10 seconds on a 2 GHz machine?"
If the candidate asks for clarification, that's a plus. If he makes specific suggestions, that's even better.
Missing technical requirements
What do I do if database.txt is not found?
It's nice to get these questions up front instead of waiting until the last minute when the application crashes because the developer overlooked this detail or made an incorrect assumption.
Flawed design specs
If the usernames are stored in the format "firstname-lastname-password", how will you store someone whose first name is Jean-Pierre? Won't the function interpret “Pierre” as the last name? Do you really want to search for "Diana Ross" or maybe you'd prefer a function that will search for any user?
When writing your own missing requirements question, you could include other generally bad ideas such as "this music player application must always run with full Administrator privileges".
Putting in design flaws gives the candidate a chance to say "Hey, wait a second! There's a mistake" instead of accepting your (obviously fallible) word as law.
Contradictory specs
The spec says "it must be portable", but the database file is in "c:\windows\system32" which is Windows specific. Is this an oversight?
Candidates who look carefully will spot these and point out your mistake in a way that is diplomatic and fair.
Missing work environment requirements
When do you need this function finished? What programming language can I use? Who should I tell when it's done?
A developer who points out these kinds of missing requirements is very far ahead of the game.
Spotting missing requirements
Developers have to have many different skills. The ability to spot missing requirements is one of them—at least until project managers learn to always include every tiny detail in their technical specs, never overlook anything and never make any assumptions. Putting a question like this into your interview process will help you with that.