It’s simple: the client tells you what they want and you make it.
The hardest hurdle is actually listening to what the client says and analyzing it.
You need to convert their ideas into code.
That is why you’re being paid, right? The client isn’t typically a developer and they are not going to specify their ideas to the degree that the idea writes the code. The more you understand the client’s intent, the more you can focus development on achieving what the client wants without over engineering.
You need to do it fast.
If you’re using agile methods, you probably have a week to complete all your stories. Most projects are more complex than a week of work. So figuring out their intent will let you get them what they want now over some plumbing that you want but do not need yet.
You need to test it.
Testing is documentation. Testing allows refactoring when you do make write or integrate that piece of plumbing that satisfies a number of demands in a wide horizontal swath of your project. Testing ensures you don’t experience the same bug twice. Testing means your clients aren’t beta testers. Testing means your team doesn’t have maintenance programmers that hate their jobs. Testing means a new developer can come up to speed quickly and make changes to a complex system without worrying that they will break things (if they do, your tests are wrong). Testing means you can deliver a project that you can stand behind professionally with a guarantee that to the best of your ability it is free of bugs and you can afford to guarantee that you will fix any bugs at your cost.
You need to set expectations.
The client has a lot of ideas and wants everything at once. The agile approach using iterations and stories is one way to set expectations as it forces the client to prioritize the development efforts. The client begins to understand what goes into the development effort. They don’t receive a bill for 40 hours as one line item but instead those 40 hours are broken down into pieces of work that where requested by the client.
You need to turn it around and ask them how it is supposed to work.
When purposing stories it is critical to play with the ideas and go back and forth to understand exactly what the story is for. If you don’t understand it now it is going to cost more time later. So turn around things in your mind and ask pointed questions that help you target intent.
And you have to do it in a way that doesn’t piss them off.
We aren’t playing 20 questions. There are usually important questions that determine bigger paths to the actual intent. Avoid being distracted by anything unrelated to the intent of the client. It is easy to distract developers by bringing up technical topics but if they are not related to the intent of the client why bring it up? This time is valuable. You need to focus.
And you need to get every single last little detail and analyze all these details to find the contradictions.
But you only have to do it for a single iteration/story! Imagine if you had to do it for a whole project that was quoted at fixed bid!
There is a fine line here between being a pain in the ass and being valuable. It is also tricky to manage the long term intent of the client with the intent within the scope of the iteration/story. This is the area I hope to learn more about as I don’t quite understand yet how the agile approach works for the scope of a project. I suspect it’s something like this: both the client and the developer have an understanding of how the application is going to work. Both have a lower definition view of the overall project. The work of iterating the project defines it and the design emerges more strongly.
And you need to not get too far ahead of the iteration.
It is daunting to try to get a view of the whole project right now. If the agile approach works as I suspect, you’re being silly. You don’t need to see the whole project. It is okay if it’s murky or unclear. It’s okay if there are dragons out there breathing fire. As long as they are not in this iteration, it is not your concern. Focus on the clarity of the current iteration. The stories should be clear, sharp and well defined with strong intent. And you need to take those stories and deliver and that is all you need to worry about right now.