Crystal is a family of software development methodologies with a shared genetic code that includes frequent delivery, personal communication, and improvement through reflection. Each type of project has its own Crystal methodology. This article will explore Crystal Clear as a concept for small teams (up to 8 people). It’s a good alternative to extreme programming, with some shared aspects.
History of the Crystal Family
In 1991, Alistair Cockburn, one of the co-authors of the Agile Manifesto, aimed to create an effective software development methodology. He surveyed numerous project teams and studied their development cases.
The research laid the foundation for the key principles of Crystal Clear as an effective software development concept:
- People-oriented methodologies are more beneficial than process-oriented ones.
- The methodology should be tailored to the individual project and team — there is no universal application development methodology.
In 1994, he implemented these ideas as the lead consultant on a fixed-cost project worth $15 million with a staff of 45 people called “Orange.” The principles developed by Alistair became the foundation for the project’s success. He documented this experience in his book “Surviving Object-Oriented Projects” (1997) and a year later developed the Crystal family of methodologies.
Happy author of the Crystal methodology family, Agile Manifesto co-author Alistair Cockburn
In 2004, Cockburn identified three main methods of the concept:
- Rapid delivery of useful code: Transitioning from large, infrequent code deployments to smaller, more frequent releases.
- Improvement through reflection: Gathering insights on what worked well and poorly in the previous version of the software to improve the next version.
- Osmotic communication: Cockburn described the perception and exchange of information among developers working in the same room as background noise, similar to osmosis.
That same year, Cockburn published “Crystal Clear: A Human-Powered Methodology for Small Teams”.Further contributions to the development of CC were made by system administrator Marcel Wagemann, who wrote an essay on using Crystal Clear, Agile, and Scrum principles in software development.
What is the Crystal Methodology?
Crystal is a family of methodologies based on these three methods.
There is no single “best” Crystal Clear methodology; each modification suits different types of projects. The organization or project creates this modification based on Crystal’s “genetic code” (basic usage rules).
The simplest possible classification of Crystal is by the number of people in the project:
- Clear: 2 to 8 people working together in one or adjacent offices
- Yellow: 10 to 20 people
- Orange: 20 to 50 people
- Red: 50 to 100 people
The genetic code of Crystal Clear consists of:
- Economically cooperative game model: Cockburn views software development as a series of “games” consisting of invention and communication, constrained by resources. Each game has two goals: deliver software in this game and prepare for the next game in the series. Each new project requires new strategies.
- Chosen priorities: Common to all Crystal methodologies are two priorities: safety and development efficiency.
- Chosen characteristics: These enhance the priority of safety. Three are basic (rapid and frequent delivery of code, personal communication, improvement through reflection), while the remaining four are additional: personal safety, focus, easy access to experts, and a quality technical environment with automated testing.
- Chosen principles: One continues the key direction of individualizing the methodology:
The level of detail in software requirements, design documents, and planning depends on the project’s specifics, including the degree of personal team interaction and the damage that can be caused by undetected errors.
Cyclic Process of Crystal Clear
Most projects with Crystal Clear consist of six cycles, defining the responsibilities and tasks of the project team:
- Project cycle: Although the project itself is a product unit, it is usually followed by another project repeating the cycle. The project cycle consists of three parts: preparation (team assembly, 360° research, methodology determination), a series of two or more delivery cycles, and a “completion ritual”. Duration: from a few days to weeks.
- Delivery cycle: Involves recalibrating the software release plan, a series of one or more iterations resulting in a tested integrated code, delivery to real users, and a “completion ritual”. Duration: 1 week to 3 months.
- Iteration: Consists of three major parts: iteration planning, daily and integration cycle activities, and the project’s “completion ritual”.
- Working week/day: The choice of day or week as the time unit of the cycle depends on the project’s format and team. Examples include weekly department meetings, team leader reports, and “brown-bag” seminars (lunch discussions on project issues).
- Integration period: Development, integration, and system testing. Some teams perform continuous build-testing with a dedicated machine, while others integrate daily or three times a week. The shorter the integration cycle, the better. Duration: 30 minutes to 3 days (depending on team experience).
- Development: Writing and checking a part of the code. This is the core work of a programmer in agile development. A team member takes a small task, programs a solution (ideally with testing), and checks it in configuration with the entire system. Duration: 15 minutes to several days.
Strategies and Techniques of Crystal Clear
“Pure” Crystal Clear doesn’t require any specific strategies and techniques. However, we’ve prepared a starter set of methods to help the team work effectively at each CC cycle.Key Strategies Include:
- 360° Research: At the start of the project, the team needs to understand how useful and meaningful the product is and whether it can be created with the available resources and technologies. The project is examined in areas such as business value, requirements, necessary technologies, project plan, team composition, and chosen methodologies. Implementation takes a few days to 1 – 2 weeks.
- Early Win: A victory unites the team and boosts each member’s confidence. In application development, the early win strategy involves finding the first piece of working code, often a small element of useful system functionality. This small victory helps team members learn each other’s work styles, users get an early idea of the system, and sponsors see the team’s capability.
- Incremental Architecture Change: The system architecture should evolve as technological and business requirements change over time. The strategy addresses this by allowing the team to incrementally change the architecture without disrupting the system’s overall functionality. The same strategy can be applied to functional changes in the final system.
- Information Radiators: Displays placed where people can see them while working or resting. They show necessary information without needing to ask extra questions, embodying the Crystal Clear rule “more communication, fewer interruptions”.
The information radiator should be large, easily accessible, simple to use and read, and contain up-to-date information. Examples include Scrum and Kanban boards and a working glossary interpreting project terminology.
Popular Techniques Include:
- Forming the Methodology: Crystal Clear customization occurs in two stages: project interviews (creating a mini-library of organizational experience highlighting the project’s strong and weak points) and a methodology formation workshop (analyzing experience to enhance strengths and compensate for weaknesses). The information from the first step is used in the second.
- Reflection Workshop: Periodically, the team should take a one-hour break to conduct a “reflection workshop,” discussing what works well or poorly, what needs improvement, and what can be done differently in the next project stages.
- Blitz Planning: Allows sponsors, users, and developers to jointly create a project roadmap with time constraints.
- Daily Stand-up Meetings: Short meetings to determine the project’s status, progress, and issues. These meetings are not for discussion, only for problem identification. Results are recorded in an online task manager or on a physical Kanban board.
- Pair Programming: In this process, two people work on one programming task on a single device. Pair programming is often criticized for eliminating individual approaches to tasks and requiring high-quality interpersonal relationships within the project team. An alternative technique, “slide-by-slide,” involves two people sitting close enough to see each other’s screens but working on different tasks on separate workstations. This corresponds to the concept of “osmotic interaction.”
Recommended Reading on Crystal Clear
Unfortunately, there is very little literature on Crystal Clear, and no specialized works in Ukrainian as of 2017.Key resources for studying Crystal Clear include:
- “Crystal Clear: A Human-Powered Methodology for Small Teams” by Alistair Cockburn: The essential book for understanding the methodology from its creator. It contains many case studies, examples, and mini-guides on implementing individual elements of Clear in an organization.
- “Pair Programming Illuminated” by Laurie Williams: A detailed analysis of one of Crystal Clear’s techniques, pair programming. The book provides practical advice on using PP in software development.
- “Agile Software Development: The Cooperative Game” by Alistair Cockburn: Explains the concept of software development as a “cooperative game of invention and communication.” Cockburn expands on ideas from Crystal Clear in this book, later formalizing them in “Crystal Clear: A Human-Powered Methodology for Small Teams.”
- The official website of Crystal Clear’s creator: While not a book, it offers a wealth of information, including interviews, diagrams, blog posts, and discussions on the methodology. The only downside is the unfriendly design of the site.
Verdict
Many so-called “best” methodologies are rejected by project teams because they are too complex, intrusive, and unwieldy.