Monthly Archives: May 2020

Software Craftsmanship

Anyone with a compiler today can call themselves a programmer.  Some are doing it and don’t even realize that they are doing it (think Excel formulas).  But even narrowing the field down to those that make a living writing code, there is a great disparity in the quality of developers out there. Compared to  various other professional careers out there, software developers are vastly unregulated.  How can we tell (without extreme vetting and interviews) how good a developer an individual really is?

Engineer – An engineer can do the work.  She understands the basic and advanced levels of the work.  He knows the tools and knows how to do them.  In software engineering, this person does not need Google to write code.

Let’s begin with some definitions that help us understand Craftmanship:

Craftsman – A craftsman lives the life of their craft.  It is part of their being.  They know intimately the tools and materials that are available when building something from scratch. They know how to fix things the right way.  A craftsman intuitively knows when something is right.  This person learns and educates at the same time.  When I think of craftsman,  I immediately get this image in my head of some learned old dude in worn coveralls with a white beard, hunched over a tool, finely tuning that end product while dropping knowledge on some younger apprentice.  Craftsmen can just do their work without thinking, almost intuitively. Craftsmen mentor.  They educate.  They teach.

Levels – Many other professions regulate their membership.  These are the common levels of craftsmanship in organizations and professions like Masons, Doctors, Electricians, Engineers, Architects, Plumbers, HVAC, and others in which we place trust with our lives:

  • Apprentice – Has identified an interest.  Studying, learning.  An apprentice must prove proficiency via testing and practice.  Must be supervised by a Journeyman. Membership at this level is usually a period of 3 or more years or classroom and practical experience.
  • Journeyman – Can work alone at the direction of a Master.  Usually consists of 5,000+ hours of on the job training and hundreds of classroom hours.  Tested.
  • Master –  10,000+ hours of experience.  Has been a journeyman for a certain time period.  Testing.  Proven track record.

Guild – An organization of members that facilitates and oversees the entire process.  A guild regulates and certifies its members, requires regular and ongoing professional training, and recommends professionals based on those certifications. 

What does the field of software engineering have today that satisfies the Craftmanship challenge?  In short, very little:

  • Schools – let’s face it, from the 2 week programmer’s boot camp program to undergraduate and graduate school, these programs are all the same: A let down.  These organizations teach you a few skills, take your money, hand you a piece of paper, and wish you luck.  At best, these serve only a portion of the Apprenticeship requirement.
  • ACM – I was a member of this organization when I was in college.  ACM leans a little more to the hardware engineering side of IT.  It is disappointing from the software engineering viewpoint.  Their levels fall short of a mastery certification or a process of development.  Membership levels  are based simply on years of membership and member endorsements.
  • Software Craftmanship NA – Interesting conference.   But it’s only a 2 day conference. It is a good options for ongoing training learning.
  • User groups/Meetups – Great ongoing learning opportunities
  • Conferences – Also good opportunities for learning.  I especially like attending the community run conferences in my local area.

So why don’t we follow this same course in Software Engineering?  There is certification testing available:

  • National Council of Examiners for Engineering and Surveying
  • PE exam in software dscipline

A Call to Action

So where are you along your journey?  Are you an apprentice, still trying to figure out if you like the  job?   Or are you just paying the bills so you hack out some code every few days?  Do you consider yourself a Master?  If so, why?