My understanding (according to how we have been taught scrum) is that it's the developer's responsibility to flesh out the requirements for the page.
Yes and No.
Yes, if you can implement the task from start to finish yourself.
No, if your code interfaces with someone else's, or the user's I/O inter-hand-to-face for that matter, then you need an agreement on the specifications of the code/user interface. Most importantly, what can not be done, and how to work around it if necessary.
In our environment, as illustrated
above, this makes for a frustrating
experience for the developer as well
as a lot of wasted time for the
developer while waiting to get all the
powers that be to come to a unified
decision about what the requirements
are.
I perfectly know what that's like! You don't happen to work at my place? :)
Here's a real world example that i've had to go through:
- Designer designs a UI page up-front. It's about displaying hierachical HTML pages and has buttons on top and to the right side, sort of like a tabbed dialog but with tabs on two sides. Mockup looks good and seems reasonable, no big deal issues. Accompanied with some detailed description of what this dialog can do etc. It seems as if everything is done and said.
- Designer actually gives me the task to implement the data structures for this into our database. Which is unusual but the scrum master has been informed. Still, communication was a bit tough for both of us because of a language barrier both in human language as well as the fact that he's a designer and i'm a programmer from a different pod.
- I work on implementing the tables in the databse and adding the UI for it to our DB frontend application. I make a few assumptions on minor issues as is usually the case with most tasks I get. I also adapt (normalize as good as i can) the data i've been given and told how it's used on the dialog so it fits best into the design of the DB frontend application. A few questions come up that i try to resolve because one of the design requirements would either explode exponentially (database) or become unusable in the frontend if i had done a regular denormalization. So i was opting to get buy-in for this, which i got but unfortunately, this turned out to be a major misunderstanding biting us later on.
- Next up, the programmer exporting the database has some questions. I answer them. I rework a few of the things so he has an easier time to export things, respectively we're working around some of the limitations of his work environment. Other issues just need clarification of the "unusual and confusing terminology" the designer used.
- A third programmer begins working on implementing the designer's UI mockup. Immediately some questions are raised. More tweaks are being done on the database tables. Suddenly i have committed to something i have a hard time implementing in the DB frontend application, but i was able to work around it. However, the DB exporter programmer has to rewrite some of the code as well, and he's not happy with the new data layout.
- Now we find out that there's been a major misunderstanding in part 1. I get another rework task to redo 50% of the work. Fortunately, no one has yet entered production data into the database, so i could scrap most of it. Still, the task has already taken 3 times as long as initially thought.
- Again, this goes to the exporter and UI programmer adding more time into it.
- Finally, someone starts entering production data into the DB frontend and doesn't know how to work with this. He finds himself communicating between two programmers: UI programmer and DB frontend programmer (me) who both have different views on the task. More rework is being done but most time is spent explaining how things work.
This is just a very condensed and small part of the story. Not an interesting read i assume, i can't give much details nor do i want to remember everything that happened. What were the major problems in this example?
- Designer unfamiliar with DB and frontend
- DB Programmer unfamiliar with UI design
- Designer and DB programmer have misunderstandings, each making their own assumptions based on their experiences
- concessions are made in the technical design to accomodate for limitations of the DB frontend and the DB exporter
- avoiding to write costum code in the DB frontend and exporter as this would have blown the initial task estimation big time
- Because of constant requirements and implementation changes, there has been confusion all along. Amplified by the fact that we didn't work on this together at the same time, but one at a time with days or even weeks in between.
But the biggest issues of all: Inter-Pod communication. Everyone was used to working inside their pod and since people knew each other and what they are doing, not everything needs to be explained or written down in excrutiating detail. However, once the talking with other pod members started no one expected communication to be so difficult. People wanted to know seemingly obvious things in great detail. Some issues just didn't "stick" and came up over and over again. It was frustrating for everyone involved, which further limited the effectiveness of the communication.
What i am getting at: communication is key and once other pods that don't normally work together are involved, the communication overhead can be quadrupled. If you are not prepared for this it can lead to frustration, demotivation, lackluster implementation, and so on.
The more people are used to working with each other, the less they need to communicate. The reverse is true doubly so. Be aware of that and plan ahead.