A Healthy Software Culture
The culture of a software group is revealed through the behaviors of individuals, teams, and managers, and in the characteristics of the organization as a whole. A group having a true commitment to excellence in software engineering and enlightened management is likely to exhibit many of the following characteristics.
- Each individual explicitly strives to perform some aspect of each project better than on the previous project, reflecting an individual dedication to continuous improvement.
- An egoless attitude encourages team members to submit work products for review by their peers, and to be receptive to finding mistakes in their work and learning from those mistakes.
- Individuals spend some personal time reading software books and periodicals to keep abreast of new technologies, and they continually look for ways to apply superior techniques to appropriate problems.
- Mutual respect among the developers permits vigorous technical discussions without fights or put-downs.
- Newer team members benefit from effective and nonjudgmental mentoring by those who have more experience.
- Team members use common engineering procedures and tools to collaborate effectively on projects. Teamwork is the rule, not the exception.
- Existing work products, including code, are extensively reused, because of an attitude that the greatest productivity comes from not doing work that has already been done.
- The team shares an attitude of getting it right the first time. The quality emphasis is on preventing defects, not just fixing them when the customer or tester complains.
- Data on the team’s software products and processes is collected and analyzed to find ways to do even better on the next project.
- Customers of the software being created are at the center of the requirements specification and design efforts.
- Management and the company provide support for ongoing education through conferences and seminars, tuition reimbursement for college studies, and purchase of technical books and periodicals.
- Management provides the money and time for appropriate tools, training, and support for new technologies. Training needs are factored into project schedules.
- Senior non-software managers recognize the alignment of sound software engineering practices with the desired business results of the company.
- The actions managers take are consistent with their words. They understand the premises of software engineering, and they reward those staff members who consistently practice it well.
- An ongoing effort is devoted to process improvement. All team members participate in improvement activities as part of their regular job responsibilities.
- Overarching business and information technology strategies provide a framework for the evolution of the organization, making decisions, and setting priorities.
- Written software development procedures of manageable size have been adopted by the team members and are regularly followed.
The software utopia described here probably doesn’t really exist. Approaching it is hard work, demanding visionary leadership and sustained teamwork over a long period of time. The more of these characteristics that can be found in your environment, the more attractive it will be to prospective employees who want to work in a quality-driven culture.