Monday, December 12, 2016

Developers Need to Develop Discipline

Discipline means more than looking like a professional
At least once a week, I receive an email or tweet featuring an article claiming agile and scrum are dying.  Many of these items are click bait.  A few are about poor agile implementations.  This week I saw a new variation on that theme, and it was from one of the initial signatories of the Agile Manifesto; Robert Cecil Martin aka “Uncle Bob.”  I took some time to watch his video, and I encourage you to do the same.  This week I want to discuss one of Uncle Bob’s main themes – discipline.

I was a self-taught developer.  During the giddy and stupid days of the dot-com boom, I decided to change careers at the ripe old age of thirty.  I remember going to job fairs with floppy disks and resumes looking to break into my first career role.  I knew a smattering of HTML and Visual Basic.  ServiceMaster took a chance on me, and my software development career was born.  I would learn SQL and many other skills during my first two years in the business.  It would take me another eight years for me to develop any confidence in my skills.  Today, I have eighteen years of experience, and I still consider myself an intermediate level developer.

The reason why I feel this way is that I have made numerous mistakes over my career and had the scars to show for it.  I still struggle with practices like Test Driven Development and SOLID programming.  In the fast-paced world of software development, I struggle to pick up these concepts as quickly as my peers.  I would be humiliated at job interviews when people reviewed my code claiming that if I have learned code at “X” university or code camp, I would be so much more professional.

A funny thing happened to me when I started working as a scrum master.  I was now bringing on software developers to new teams.  Some of them had masters degree’s in mathematics and computer science, but they never wrote a unit test or worked with source control tools.  I would have to educate them on how to be better developers who to be professional and disciplined.

According to Uncle Bob, half of all developers have less than five years of experience in the profession.  That means that those freshly scrubbed developers are learning how to work on large code teams, write unit tests, and develop business knowledge.  It is up to more experienced professionals, like me, to help them develop these skills and have a sense of pride and craft in what they do.  They should avoid the numerous mistakes I made in my career because I will show them how to avoid them.

So what does it mean to be a disciplined software developer?  The first trait of a disciplined software developer is that they use source control for their work.  The code is checked in on a regular basis, and it is commented to explain what it is doing.  A developer should also know how to do branching and merging so that they can segregate code based on the needs of the business.  Working with source control allows a developer to work on large or small projects.  It does not matter if you use GIT or Team Foundation Server for source control.  Learn to use source control.

The next trait is the desire to improve your skills.  A disciplined developer is reading up on new techniques and practicing them outside of work.  When the time comes, this will help solve business problems and speed up work.  I am also a big fan of using the phrase, “why not?” at the office.  That is because someone has discovered a new way to do something and I cannot think of a valid reason why we should not try it.  My software developers started using MOQ and incorporating dependency injection into our software projects because of this attitude.

The last trait of a disciplined software developer is humility.  I am very hostile to the brogrammer movement in development.  Developers should be willing to learn from each other and develop new techniques based new knowledge.  The arrogant disregard of others and the showing off of software development skills is not helpful or necessary in the activity.

So to be a disciplined developer you need to leverage source control, be willing to learn new things, and approach the business with some humility.  Being a programmer and scrum master is one of the hardest jobs I have ever had.  It has been financially rewarding and professionally fulfilling.  It also took me eighteen years to get to this point.  For all the new software developers entering the market, I hope I can help you avoid the mistakes I have made in my career.

Until next time.