I'm passionate about finding ways to improve my daily workflow. There are two things I'm always looking to improve: how productive I am and how prioritized my efforts are.
The apps and services I use and the way I use them directly influences how I work and what I care about as a professional. This is analogous to engineering teams. The apps and services an engineering team chooses to use directly influences the processes and culture of the engineering team.
Engineering teams put processes into place to create an environment that cultivates productivity, prioritized efforts and efficient communication. Like most engineering teams, we know we're not perfect so we're constantly refining our processes, which tend to be driven by the services we use. For example, when we came to the conclusion that we were introducing too many bugs, we implemented a more rigorous code review process with GitHub pull requests. As a result, our bug backlog has never been smaller.
Every once in a while, we come across an issue that we struggle to address. For us, that issue was technical debt (TD). We tried to carve out time in our backlog, but it was hard to prioritize it over bugs or product development. We tried to do 'TD Week' where the entire engineering team spent a week paying down the debt, but you can only make so much of a dent in one week.
We needed a process that would prevent us from introducing new TD while aiding us in our efforts to correct a lot of the existing TD in our application. This is when we discovered Code Climate.
Code Climate provides an objective analysis of the quality of your code and gives you the information and tools you need to fix it.
We believe in the saying you can't improve what you don't measure so at first, we used Code Climate to provide a starting point for our TD battle. We would refactor and abstract common logic and would rely on Code Climate to quantify our TD efforts.
This worked to some extent, but only some engineers took it seriously and our Code Climate score would fluctuate up and down depending on how fast we had to move with our projects. There was nothing in place in terms of engineering processes that enabled us to address this issue as a team in a sustainable way.
Quality is a team issue. The most diligent developer placed on a team that just doesn’t care will find it difficult to maintain the enthusiasm needed to fix niggling problems.
- The Pragmatic Programmer
During one of our sprint retrospectives, we were discussing what processes we could implement to resolve this issue and someone said: 'what if we made a rule that every time you push code, you have to improve the overall quality of the code base'. Simple enough for everyone to remember. Important enough of a cause for everyone to rally behind. We gave it a try.
Since Code Climate can analyze any branch on your repository and notifies you of quality changes, it can objectively enforce our rule through detecting code duplication, high churn, or too much complexity. No one has to be the bad cop that subjectively judges every commit. We let Code Climate scores speak for themselves.
Since following this new rule, our web application's Code Climate GPA has risen from 1.62 to 2.38 in the past 9 months, which is significant considering we have close to 1,000 classes, controllers and modules in our app. Gamification of this process has also occurred as our Web team has created a healthy rivalry with our Ops team's Code Climate score. Each time the Web team's GPA gets close to the Ops team's GPA, the Ops team does some mob refactoring and raises the bar.
What used to be our hardest issue to tackle is now one of our most celebrated processes that everyone can rally behind thanks to Code Climate. In case you're curious what Code Climate's team mantra is, they follow the Boy Scout rule: Always leave the campground cleaner than you found it.