Clean Code Developer is not a status but a progression. It is not learning a few rules by heart but to live the CCD values. This needs time and practice. Hence we distributed the values to separate levels which the developer can reach step by step. However we see the whole process a circle so that who reaches the last Grad restarts from the beginning.
Each grade has a color. And clean code developer working in a grade may wear a CCD bracelet of matching color to indicate his intention to deserve it. So other that in Judo the color represents the grade in progress rather than an achieved one.
Grade 0. Black
Developers who did not yet start own the black grade. So a black bracelet simply indicates that you are interested in CCD. You may already wear it when you are not yet prepared to work on the first real grade.
Grade 1. Red
The true path for a Clean Code Developer begins here. Practice starts with the red grade. Accordingly it contains exclusively those CCD values which are absolutely essential. Getting into thing shall be as easy as only possible. Hence on this level we focus less on software development principles but more on building the general attitude of a clean code developer.
Grade 2. Orange
After building basics for continuous improvement in red grade the orange grade deals with applying fundamental principles to code and gaining initial experience with the first way of choice for increasing productivity: Automatization of processes. As only correct code is good code automatization serves verification of correctness. So this is not a nice-to-have code characteristic but something essential.
Grade 3. Yellow
Yellow grade focusses on automatized tests. Orange grade stopped at integration tests applied from outside so changes in coding were not necessarily needed. Starting with yellow grade tests under the hood are required. Even more atomic units shall be tested rather than only functional crosscuts. This implies changing coding praxis as otherwise single classes may not be tested independent from used services. Due to this fact yellow grade includes principles of object orientation as only with these it is possible to separate code under test from its “surrounding”.
Grade 4. Green
Green grade continues with automatization. This plainly is the key to productivity and agility. If you automatize as many software development activities as possible, the developer will be able to focus on his principle task: Implementing customer requirements. Without automatization development is slowed down by trivialities. Integration tests and releases then for like a penalty than ways to success. After test automatization productive environment gets into focus. Testing code on a developer’s machine is one thing � compiling and running it on a independent machine is another challenge. Only that way subtle dependencies to the developer’s workplace may be found. On top this practice introduces further principles for structuring code and a tool for advanced architects.
Grade 5. Blue
Blue grade brings us on the finishing straight of CCD. After build and testing automatization will be enhanced another step: Deployment. Primarily blue grade takes care of software development aspects beyond code and tools. CCD concerns not only good detail structures but also plans these in respect of the big picture upfront. It’s about architecture. Being aware that planning alone can’t define a perfect solution, software development as such � not just architecture � has the need of an appropriate process model. Latter is an iterative one and shall be practiced in the blue grade.
Grade 6. White Grade
In white grade all principles and practices flow together. Same as white light contains all colors the white grade includes all other grades. A developer solely works in white grade when he is permanently aware of all the CCD values. This makes clear that only experienced and advanced software developers in a proper environment will be able to work in white grade.
Intention of Grades
The grades do not represent a quality ranking. Developers working in blue grade are not better or more advanced than developers working in orange grade. Grades are meant as didactic aids to partition the whole of CCD values, principles and practices. The many CCD building blocks can be digested much easier in smaller bits than it would be possible in one run.
Exactly that is why it is important to start with red grade. Didactically it is best to start there � even if you already consider further values in daily business. Independent from your background it will be certainly new to come to grips with principles and practices that deliberately. Daily reflection especially likely is not yet habitual. Red grade is ideal to practice all this using basic building blocks.
We understand it is tempting to tick of already known topics on first sight of the CCD values. Though intention is deliberate pursuit and use while being in a grade. It is not about achievements and completion. It is about iterations and small bits. Grades are loopholes onto the full picture.
CCD values and building blocks may appear cast in stone. They are not. Everything is valid only until we or the community decides that something shall be changed. Furthermore the tools and materials are even more subject to change. Programming languages, IDEs, frameworks, server products permanently evolve, are brought up or die away. Stuff to be potentially understood and mastered becomes more and more. Knowing one programing language plus one standard library is far below sufficient nowadays.
Grades contain certain forms of self-training (reading, networking and publishing). They do not define the time to spend on each. We think time for training is not form-specific but should be form-independently at least 20% of your work.
That is our true conviction: 20% of working time should be spend on learning. So 1 day per five-day week. Not less. Google shows that can work: “This means, every employee may spend 20 percent of his working hours on project which are not directly connected to his task. That is not monitored.” (Source: Interview with Philip Schindler, head of North Europe at Google, published in Hamburger Abendblatt on Nov 7th 2007)
20% sounds a lot. But learning is not that bad for the person who has to pay for since learning is not the following:
Learning is not vacation
Learning is not absence from the office
Learning does not mean projects won’t benefit from it
Learning does not necessarily mean a higher budget for trainings or software
Learning mainly provides room for mistake. Putting it differently a professional developer should be allowed to be free of fear to produce mistakes for 20% of his working hours. That would be 20% without project benefit to the extreme. Compare this to practicing time of a musician. On stage a musician shall perform without mistakes. A musician has to practice both to keep and improve his skills. Mistakes are explicitly allowed because otherwise progress is not possible. Hence two separate modes of operation are required.
Given that room for mistakes, it can be filled meaningfully. The only constraint should be a recognizable connection to work. People who spend that 20% on pumping iron in the gym or on search for real estate won’t learn much.
Samples for learning content:
Read professional publications (online/offline, blog/magazine/book/video)
Experiment with things read
Visit professional events (training/symposium/community-event)
Publish ones professional knowledge
Within the company, e. g. on a project-wiki
To the public (blog/magazine/book/symposium)
Connection to your current project is of secondary importance. There can be one but does not have to. A CCD may evaluate a technology considering its use for his current project or just out of general curiosity. The project with benefit in both (!) cases. Directly in the first case, indirectly on the latter. Every knowledge in a technology or method extends the horizon and creates additional options even if the project use is not yet in sight.
Remark for deciders: Developers who learn continuously express a value. They are more experiences, more innovative and more flexible. Your products will benefit from that.
Remark for developers: Who learns gets precious. He or she gains experience, is not bound to a niche and won’t fall into every hype. This serves “employability”.
Becoming CCD needs time. Likely at least 21 days per grade. Psychology claims that humans need 21 days (or 3 weeks) to habitually integrate new aspects or changes in general into their lives.
At the end of your working day reflect if you followed the principles of your grade (and the grades below). If not your CCD bracelet to your other wrist. This action helps to bring to mind which principles need to be internalized further.
Having worked 21 days in a grade without need to switch the bracelet the grade can be considered as mastered and the developer moves on to the next grade.
Obviously there will be no formal control. So it is completely up to the developer to be honest against himself. As no grade is better than the other cheating doesn’t make sense anyway. We hope developers mastering the white grade will restart at red grade. That way they state conviction that software development means continuous learning.