What is Triple Programming?
          A collaborative development strategy with 3 mutually-supportive roles focused on creating excellent quality software.

Is Triple Programming just Pair Programming Plus?
          No!

Is Triple Programming easy to learn?
          Definitely Not! [see Appendix G]

Why should we bother?
          Only bother if you want to move your software quality from good to great.

What are the characteristics of Triple Programming?
           This collaborative strategy entails component development and verification. Each of its three roles has primary responsibility for guiding one distinct and mutually supportive development activity as well as helping other roles meet their responsibilities.
  1. One role is mainly responsible for guiding development of all domain functionality.
  2. A second role is mainly responsible for ensuring that all other requirements are specified, achieved, and monitored. This includes development of quality goal support code e.g., safety, security, and resiliency support code as well as misbehavior monitors.
  3. A third role is mainly responsible for guiding component verification of strategies, tactics, designs, code, data, and procedures as well as verification of misbehavior monitors.
          Each role selects available tactics and staff that best suit their responsibilities.
Tactics may include:
  • individual and pair programming
  • Quality Design Up Front and Hazard Analysis
  • skeptical reviews and Test Driven Development
What assumptions support Triple Programming?
  • Software quality mainly depends on:
    • Adequate development skills of team members
    • Their depth of understanding of the problem/opportunity and an effective solution
    • Their communication effectiveness
    • Adequacy of available resources
  • Triple programming significantly increases the first three quality factors. But if a capable team is given one week to complete a two-week project, triple programming won’t help.

  • Most developers do NOT have a deep understanding of collaboration, quality goal management, nor component verification, beyond domain functionality testing.

  • While this ignorance persists, changing software practices will have little effect on software quality.

  • Improved collaboration, improved management of quality goals, and improved component verification will each lead to improved software quality. Each of these improvements will make the greatest contribution to improved quality in different situations.

  • Triple programming is most appropriate when successful achievement of quality goals e.g., those for safety, security, or resilience, is critical.

  • Many quality goals and their support functions e.g., safeguards and logging, impact code in multiple components [see Appendix F].

  • Most developers have an adequate understanding of domain functionality development and its testing.
What are the benefits of Triple Programming?
  • Improved collaboration [see Appendix A] leading to improved communication and deeper understanding

  • Clear, distinct, and mutually supportive responsibilities

  • Equal emphasis on all other requirements [see Appendix B] and component verification [see Appendix C], in addition to domain functionality

  • Improved software quality – from good to great because of (1) equal emphasis on quality goals [see Appendices D and E], misbehavior monitoring, and component verification, (2) improved collaboration, and (3) clear responsibilities

  • Diffusion of knowledge and skills among team members

  • Resilience of a triple
Where are the appendices?
          Look under the Appendices tab at the top of this page.