Channels ▼


C3 Programming

C3 Programming

C3 programming focuses on the three components of the programming phase—contract, code, and close—and the two interfaces. The coding phase is the most practiced and most familiar to programmers and software development teams. The contract component represents the interface with business analyst, and the close component represents the interface with quality assurance. Together, the three components define the role of "programmer".

Each of the C3 programming components could happen in any order, even simultaneously. Most commonly there is some contract component prior to coding or close. TDD emphasizes the close component prior to coding. Programmers are proficient in coding, and programming tools and development environments have been designed to facilitate writing code. Moreover, there exist add-on modules to facilitate closing and tools to create contracts, but the bulk of programming effort is in coding. This balance needs reevaluation.

The contract phase defines a binding agreement between business and programming. Business provides requirements in some format—spreadsheet lists, business use case diagrams, or process diagrams. The process of transferring the business requirements to a software "plan of action" is informally the contract phase. This phase needs be formally framed. The contract reflects back to the business what the programmer will provide. The contract defines, from a programming perspective in programming/business jargon, how the programmer understands the business needs. The programmer then works from this document in developing the code. The code component is the most familiar component to programmers because it focuses on the functional requirements, architecture, software interface design, algorithms, and coding of instructions that make up software. Existing programming tools have focused almost exclusively on this component of programming. Code generators, debuggers, and code-analysis tools all contribute to reducing defects in code and have done well in this domain.

But when there is no clear, unambiguous finish line, the software is never complete and incomplete software does not get delivered. For this reason, the close phase must be clearly demarcated for programmers. Most of the time the finish line is implied and as rules in business change, the finish line gets moved. The solution to control shifting finish lines is an explicit set of objectives that need be reached to conclude that the software is complete. TDD controls this by requiring that programmers formally state the tests that the software shall pass to qualify the software as finished.

C3 and the Software Development Lifecycle

C3 integrates seamlessly and complements the software development lifecycle. C3 more finely defines the interface and expectations in the hand-off between different roles in the cycle. While the roles of contract and close can be assigned to others on behalf of the programmer—business analysis can take responsibility for contract and quality assurance for close—the value of having the programmer fill these roles is valuable because it both crystallizes the solution in the mind of the programmer and reduces risk of misunderstandings. It's analogous to asking a person to repeat, in their own words, what is understood.

Peer review is a common method to reduce error and resolve uncertainty. C3 improves on peer review by providing a view from a different perspective. Individuals in the same organization performing similar tasks tend to follow similar routines and overlook similar events. By bringing programmers to overlap with the sphere of business analysis and quality assurance, you get an orthogonal view to a proposed solution. This alternative perception can strengthen both sides of the interface—the input from business analysis and quality assurance can to guide the programmer in focusing on core requirements and ignoring noncritical and nontestable features.


C3 programming is a more fine-grained implementation of the programming phase and can be implemented in any software development lifecycle model. It adds necessary responsibility to programmers to ensure that they understand the scope of the business problem, yet limits the programmer to solving only the problem. An additional value is that the programmer perspective on business requirements and quality assurance provides observations not generally made by those dedicated to those roles. This perspective can identify areas of ambiguity and opportunities where programming can provide additional added value.

Related Reading

More Insights

Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.