Years ago, I worked for a company that had a strictly governed bug fixing process. The bugs to be fixed per release were specifically regimented, right down to the amount of hours available to fix each issue. Developers were expected to meet or beat their estimates, and failing to do so meant overtime (since the deadline was immutable). With effectively every working moment spoken for, there was never any free time for innovation, invention or creativity (at least on the schedule). Developers were effectively bug fixing or feature building machines, with no input into the process or product features.
Unfortunately, this seems to be an all too common trend in the development industry. Employers, who love the ability to measure things, disdain the fact that engineering is first and foremost a creative art, that cannot be effectively measured. They attempt to install artificial measures of productivity like tests written, lines of code added, bugs solved, and number of bugs reopened by the quality assurance team. Sadly, these measures all fail to effectively measure the effectiveness of development teams, because the developers themselves see immediately through the schemes, and learn quickly to game the system.
Since the dawn of programming, programmers have attempted to define their industry, often by using outside industries for comparison. This can be traced back to the fact that programming itself is unique: it’s unlike any field in existence. Most programmers hate being called “coders”: it seems pedestrian, somehow beneath what we do. Many times we like to call ourselves “engineers”, but this title doesn’t really fit. Though we do engineer things on a regular basis, engineering is a field in which the time to completion is relatively set by physical laws, not the complexity of the job.
As I spent time this past week watching my mechanic work, it occurred to me that much of what I do is act as a mechanic for my software. My job is to inspect, disassemble, replace bad parts, lubricate, make faster/more efficient/less squeaky, and to maintain software that has largely already been written, engineered, and released. There’s the occasional new feature to be developed, and this is surely the engineering portion of my job, but 70% of the time my work revolves around being a software mechanic.
Laura Thomson posed a question on Twitter, asking what do you like most about being an engineer? I spent a good part of the morning thinking about it, and it’s an interesting question to answer. My answer is simple: it’s the fact that engineering is a creative enterprise, one that requires intense imagination and sometimes lots of sweat, blood and tears.
The greatest inventors of the past were creative, intelligent thinkers who imagined solutions. This to me embodies engineering today. As a software engineer, I’m called upon to answer difficult technical problems that involve creating solutions that require innovation and invention. Engineers are modern-day inventors.