Quality Development - A few best practices for distributed teams
In the past month I’ve been helping a very large, worldwide distributed project (not RAD for those wondering - something new you’ll see soon) with several systems, focus on both quality and scope to a release date. The team is passionate; it’s one of the things I love about working in Embarcadero engineering.
In the last month, we saw an unusual spike in bug regressions. Regressions are where functionality has been tested and proven to work, stops working due to another change in the system. "Large" is quantified as over 10% of bugs found. Ideally regressions are a very small number, indicating a good quality process in development. A large number of regressions is doubly concerning, since first QA has to find them, and then fixing them slows down the overall progress to release. To discuss these issues, I held a tiger team session with the development leadership to understand the causes, and discuss what we could do in short and long term.
It was a really productive discussion, so I’ll be sharing some of the findings on my blog. They seem like "common sense" best practices. Overall the team believes they will reduce regressions, and increase both quality and predictability to the release:
- Communicate early and often between a new code owner and the previous code owner on new changes. This was possibly the #1 source of regressions when someone was taking over an area of code and making changes, without the full context of why the code was designed in a certain way, or what other systems were impacted by the code. Most modern source control management systems have some method to identify the person who last touched a portion of code, and armed with that information - a new change will be communicated to the original owner for review and make sure no hidden "gotchas".
- Be disciplined. Make sure to run new code through unit tests on a CLEAN system (not the same system developed on), and in our case - run the integration smoketests. Just recently I had an email from a very senior engineer who was frankly amazed how many serious regressions in other systems were introduced by what "should" have been a safe code fix. Far far better for the project to catch these before even checking in to the development branch.
- For this large, distributed team - establish as strong ownership of code as is practical. Document the areas and owners, both for R&D and QA. Make sure the owner/experts are consulted when working on code that may cross boundaries. This is already helping, as it encourages point #1, and a unified table helps gives all team members a picture of who to talk to, to understand a system. It seems basic, however when a new team is spun up and has presence worldwide, it makes a big difference.
- Periodic bug ownership review meeting with R&D leads. Here is where developers who after reviewing a bug (or partially fixing one with shared ownership) discuss the more complicated and cross system issues with their peers, and make sure the most appropriate people are looking at the right bugs. At least weekly, though encouraged informally between owners that bugs cross multiple boundaries on.
These specific practices complement a number of other basic practices which are institutionalized at Embarcadero, such as:
- Daily automated functional tests (these found plenty of the regressions, quickly, which led to the topics above).
- Daily bug councils to triage incoming issues, help filter them to the right people.
- Daily collaboration between R&D and QA to ensure issues reported are well understood in terms of customer impact, frequency and breadth.
It would be interesting to hear other tips/tricks and suggestions from other developers to help improve defect prevention, not just detection. I think this is where teams can truly become agile - when they can self-improve to reduce the number of defects coming into the product.




