In my previous role we had the concept of golden hours, during these times the development team were not to be disturbed by anyone (e.g. 09:45 - 11:45 and 13:30 - 16:00). This reduced the number of distractions and increased the possibility that we could get through a good coding session of around 2 hours un-interrupted.
This was achieved by insisting that any time members of the support team or business development team came round to talk to a developer, they first had to talk to the team lead.
The team lead would then be responsible for judging the importance of the interruption. If the interruption was deemed to be urgent then they would allow the developer in question to be disturbed, otherwise they would take a note of the reason for the visit and pass that onto the developer outside of the golden hours or simply ask the person who needed to talk to the developer to come back later.
This concept was extremely important as most of the daily work was carried out in pairs. So an interruption of one developer more often than not was actually interrupting two developers.
We also backed this up with a bug fix rota, where each week a member of the team would be allocated to fixing any live support issues. When a live software issues was brought to the team lead, they would check the bug fix rota and direct the support team member to the appropriate developer. This seemed to benefit the team in a number of ways: -
- Developers would get to see multiple areas of the system. As it was the responsibility of the person on the bug fix rota to at the very least identify the area of software in which the issues was occurring and preferably fix it, their exposure to the code base was continually increasing.
- The same developer was not interrupted continually. The support team would tend to bring problems to the developers they had known the longest, or were most friendly with. This would result in the more experienced developers being interrupted more often. The golden hours coupled with the bug fix rota helped reduce the number of interruptions experienced by the more experienced team members.
- Greater team interaction. By ensuring that the support team talked to different developers regarding live issues each week, the relationship between the two teams benefited.
Once the developer on the bug fix rota was asked to help the support team member, they would generally go to the support team area and listen to the support team member talking to the person experiencing the problem, often prompting questions to help identify the root cause of problems. Often the developer would actually take over the conversation with the customer to help speed up the process. Other approaches might involved interrogating the database or examining log files to identify the issue.
(Note: The customers for the team were not customers of the company, but were employees as the software was used to run operations at remote sites. The support team which interacted with the development team was a second level support team dedicated to supporting the software written by the development team.)
Doing this exposes the developer to the pain felt by users of the software and educates the support team in detecting recurring issues, therefore hopefully reducing the time spent detecting the cause of future issues.
The support team would only bring issues to the team lead when they were causing operations at the affected site to stop. Such as error messages appearing on the main screen or new work lists not being produced. However they would batch up smaller issues and bring them to the attention of the team lead when they had a good number of them. Such as incorrect data on reports or screen layout issues.
To finish off my rambling, I think that it is essential that developers are interrupted as infrequently as possible, there are many references out there that discuss how context switching is detrimental to developer performance. However I feel that it is equally important to keep them aware of the fact that their software is used by real people, who rely on it to get their jobs done.