What is Code Counseling?

04 Oct 2015 . Technology . Comments

#coding #software #technical-debt #mentorship

Code itself can not be counseled, but the people and process used to create software are often prime candidates for counseling.

Code Counseling is the ongoing practice that all code counselors perform.

A Code Counselor is a software craftsman recognized for their ability to lead and equip others in each of the areas detailed below, such that they are constantly attaining higher levels of maturity.

The case for Code Counselors

Most organizations seeking a marked change in behaviors or technical solutions will hire the help of a consultant. Certain situations require outside help; when an external change agent is absolutely the last option, or the talent and experience can not be found inside the organization.

In most cases however, these code counselors are right in front of us. They are the people we count on to deliver high priority projects on time. For that reason, the long term payoff of having them focus on the priorities below are too often overlooked in favor of short term goals.

The case should be made that without the best people in the organization focused on and leading everyone else towards these goals, the outcome will always be less than the full potential of the team.

The Marks of a Code Counselor

Leading by Example

  • Respected among peers, with a reputation for high quality delivery.
  • Capable of learning, assessing, and selecting relevant technologies.
  • Operates with excellence without sacrificing a sustainable pace.
  • Demonstrates an intentional plan to mentor others.
  • Protecting the team while allowing them to understand all risks and impacts.

Fostering Mature Engineering Practices

  • Test Driven Design (TDD) & Emergent Design
  • Appropriate use of programming language(s) and third-party dependencies
  • Appropriate use of patterns
  • Refactoring
  • Continuous integration (CI)
  • Code review & pairing
  • Excellence in automation:
    • Deployment
    • Testing
    • Operations
    • Monitoring & Alerting
    • Feedback Mechanisms / Information Radiators

Understands Technical Debt

  • Ability to communicate and educate management and non-technical stakeholders on the issue and importance of managing technical debt.
  • Acquiring and maintaining buy-in from all necessary stakeholders to address unhealthy debt levels.
  • Understanding of various types of technical debt, along with discretion on when to accept new debt or not.
  • Educating the team by demonstrating refactorings that remediate debt in an efficient and repeatable way. You may refer to two great resources on this topic: Refactoring to Patterns and Refactoring Legacy Code.

Creates A Culture That Values Collaboration

  • Understand the needs of the customer or business by building a strong working relationship, and then ensure solutions are not over or under engineered.
  • Help the team identify standards (code, documentation, process, etc) to be followed throughout the entire delivery. Recently, DevOps has expanded the traditional focal point of production deployable code to that of automated test code, deployment automation code, and any operational support tools.
  • Demonstrate and practice meaningful code review, ideally by establishing effective pair programming behaviors.
  • Allocates time to mentor and teach others.

Feedback

If you would like any more information on the attributes of a code counselor please contact me or leave a comment below.

For Further Reading