I think simple software development processes usually have some common characteristics:
- They originate within the development team as a way to increase their efficiency and ability to cooperate
- Duplication of effort is eliminated as much as possible and automation of tasks is introduced at every opportunity
- Artifacts produced by this process are designed to minimize interactions with other teams within the organization
- Processes should be self-documenting as much as possible
All of these characteristics are focused on a single goal: increasing the efficiency of the individual developer. If you focus on quality developers, you will have a small team and you need to maximize throughput. This is why your processes must increase efficiency.
If you start to notice aspects of your software development process which don't contribute directly to efficiency, you can use those components to identify weaknesses in your organization. In this respect, your software development process becomes a diagnostic tool to find diseases within your organization.
For example, I've worked on several development teams which were required to deliver an impact document to the QA and business teams with each release. This impact document outlined the changes made in the release, listed which components of the application were effected, and provided guidelines for how to test the release and validate it for production-readiness.
This document was not increasing the efficiency of the development team - the impact of changes was already known by the developers and had been covered in unit testing. It was seen as busy work by the developers and was often considered an afterthought. As such, it sometimes didn't even provide all the details which the QA and business teams requested.
What this task really represented was a deficiency in the organization - the QA and business teams weren't able to test all the functionality in the application to meet their aggressive release cycles so they wanted to focus their testing on what had changed in each release. Their inability to test functionality indicated one of several problems:
- The release schedule was too aggressive for such a complex application and should be scaled back (smaller change sets or less frequent releases)
- The QA and business teams were relying too heavily on manual testing and not taking advantage of automated test scripts
- The QA teams needed an increased headcount
- The QA and business teams needed training in version control to determine the changes in a release for themselves
Any of these options would have solved the actual problem in a better fashion than the inclusion of an "impact document" in the development process. In my opinion, the problem was a lack of automated testing. Fully automated testing would have caught defects which somehow made it past unit testing - even in portions of the application which were not perceived as being effected by the release. In many cases, the impact document caused extra trouble for the teams. In addition to being a drain on the development team, it created a false sense of security for the QA and business teams when creating their test plans.
In my experience, development teams in large IT organizations are often at the bottom of the food chain and find these types of steps bolted on to the development processes to address organizational issues in other areas or as a reaction to perceived failures. By re-examining your development process and working constructively with other teams, you can eliminate inefficiencies in your process and improve the health of your entire organization.