My understanding (according to how we were taught in the fight) is that it is the responsibility of the developer to determine the requirements for this page.
Yes and no.
Yes, if you can implement the task from start to finish.
No, if your code interacts with someone else's or user I / O in different ways, then you need an agreement on code / user interface specifications. The most important thing that cannot be done, and how to get around it, if necessary.
In our environment, as shown in the figure above, this leads to a frustrating experience for the developer since there is a lot of time for the developer, waiting to get all the authority that should come to a unified decision about what requirements are.
I know what it is! You do not work in my place? :)
Here is an example of the real world that I had to go through:
- The designer is developing a user interface page. This is about displaying hierarchical HTML pages and has buttons on the top and right, sort of like a tabbed dialog, but with tabs on both sides. Mockup looks good and seems reasonable, no problem. Accompanied by some detailed description of what this dialogue can do, etc. Everything seems to be done and said.
- The designer really gives me the task of implementing data structures for this in our database. This is unusual, but the scrum master was informed. However, communication was a little tough for both of us because of the language barrier both in the human language and the fact that he is a designer and I am a programmer from another module.
- I am working on implementing tables in a database and adding a user interface for this database frontend application. I make several assumptions about minor problems, as is usually the case with most tasks that I get. I also adapt (normalize as much as possible) the data that I received, and told how it is used in the dialog box, so that it best fits the design of the database frontend application. Several questions come that I'm trying to solve, because one of the design requirements will either explode exponentially (the database), or become unusable in the interface if I did the usual denormalization. So I decided to buy a buy-in for this, which I received, but, unfortunately, it turned out to be a big misunderstanding biting us later.
- Further, the programmer exporting the database has several questions. I answer them. I reworked several things to make it easier to export things, so we are working on some limitations of our work environment. Other questions just need clarification of the "unusual and confusing terminology" that the designer used.
- The third programmer begins work on introducing the layout of the design interface. Some questions immediately arise. Additional settings are made in the database tables. Suddenly, I decided to do something that is difficult for me to implement in the application of the external interface of the database, but I was able to get around it. However, the DB exporting programmer must also rewrite some of the code, and he is not happy with the new data layout.
- Now we found out that in the first part there was a big misunderstanding. I get another remake task to redo 50% of the work. Fortunately, no one has yet entered production data into the database, so I could opt out of most of them. However, the task is already taken 3 times longer than originally expected.
- Again, this applies to the exporter and user interface programmer adding more time to it.
- Finally, someone begins to enter production data into the database interface and does not know how to work with it. He discovers that he is communicating between two programmers: a UI programmer and a DB interface programmer (s), who both have different views on the task. More alterations are being done, but most of the time is spent explaining how everything works.
This is just a very concise and small part of the story. It is not interesting to read, I suppose, I can’t give a lot of details and don’t want to remember everything that happened. What were the main problems in this example?
- Designer unfamiliar with database and interface
- DB programmer unfamiliar with user interface design.
- Database developer and programmer have misunderstandings, each of which makes its own assumptions based on their experience.
- concessions are made in technical design to accommodate the limitations of the database interface and the database exporter
- avoiding writing costum code in the database interface and export, as this would remove the initial task evaluation for a long time
- Due to constant requirements and changes in implementation, there has always been confusion. It is strengthened by the fact that we did not work on this together at the same time, but one at a time in a matter of days or even weeks between them.
But the biggest problems of all: Inter-Pod communication. Everyone is used to working inside their container, and since people know each other and what they do, not everything needs to be explained or written down in detail. However, as soon as the conversation with other members of the group began, no one expected that communication would be so difficult. People wanted to find out the seemingly obvious things in great detail. Some questions simply don’t “stick” and reappear. This was unpleasant for all participants, which further limited the effectiveness of communication.
What I get: communication is key, and when other pods are involved that usually don't work together, the communication overhead can be quadrupled. If you are not ready for this, this can lead to frustration, demotivation, lack of implementation, etc.
The more people used to working with each other, the less they need to communicate. The converse is equally true. Keep this in mind and plan ahead.