Abstract Guilds of Craftsmen

AdobeStock 110127005

While driving back from lunch with a friend the other day, a crazy idea hit me about the nature of day-to-day activities for information workers in the 21st century. I turned to my passenger, who has endured building software with me at two companies thus far, and asked rhetorically “Why do we get up every weekday morning and drive to an arbitrary building filled with desks to practice our craft? What value could this noisy and distracting structure possibly add to the grand scheme of things?”

We don’t build physical widgets, treat sick people, or serve customers in any capacity. We ferry bits and bytes around to where they ought to go and potentially accomplish amazing things on both incredibly small and incredibly large scales. There is no inherent physical nature to either our inputs or outputs. On any given day we might slice and dice more information than the sum of knowledge that previous generations ever imagined – let alone had access to. It isn’t even a remarkable task anymore to pull in petabytes of data, crunch some algorithms over it, and spit out meaningful conclusions in nearly real-time.

What do we even call ourselves? The list of titles I’ve held for essentially the same type of work over the past decade is wildly varied – Engineer, Developer, Programmer, Architect, Tech Lead, Chief Interactions Liaison… (ok I made that last one up.) As a student of Uncle Bob Martin’s wise musings, I’ve decided on “Software Craftsman” as the best way to describe what I do and how I seek to accomplish meaningful results. The Software Craftsmen of the world are a loosely organized guild of creators, inventors, and problem solvers – the likes of which the world of just a generation ago had never seen. We’ve given up on trying to explain to non-technical folks what exactly we do, but know it is our responsibility to educate our fellow non-geeks in the best ways to interact with us so that we can together accomplish great things.

Back to my original point, though. With our varied expertise, breadth and depth, why does it make sense to work for an arbitrary company that just happens to be within a 30 minute drive of where we hang our hat? Sure, there are a laundry list of practical reasons, healthcare, regular income, a steady stream of work, vacation, societal conformity, healthcare again. These outputs are generally associated with spending 45 hours a week at an arbitrary building full of desks, but none of them are inextricably tied to the experience.

In software, we often organize reusable parts into interchangeable abstractions. Traditionally, we might think of a paycheck as an output, but a better abstraction would be a stream of income. A stream of income isn’t necessarily a check addressed to John Q. Developer that arrives like clockwork on the 1st and 15th (unless you work at a startup, where sometimes it doesn’t arrive at all). We could structure a stream that arrives in a less granular way where income arrives based on the successful completion and delivery of a product or project. We could implement a SaaS model in which the stream of income arrives only based on who is subscribing to the software currently.

The duplicate mention of healthcare was no error at all, especially in America where we spend more than all other developed nations on healthcare and have the poorest results. The cost of healthcare obtained outside of a traditional employer will cost you more than the mortgage on a nice three bedroom house. That’s worth repeating to yourself quietly as you realize this cost will also increase much faster than inflation. While worthy of its own series of blog posts, this is a reality that supports and furthers the 20th century giant-corp employment model.

While having a steady stream of work might seem to be a tall order in other industries, just browsing the myriad open source software projects being actively developed on Github puts that notion to bed right away. If you get bored in this industry, it’s your own damn fault. Connecting this stream of work to a stream of income is a trickier task, and often involves skills that are highly irregular to pure technologist. My advice to technical folks is to partner with someone with business savvy, as it is nearly impossible to play both sides of this coin effectively.

Vacations are what you make of them. I’ve spent what should have been a weekend at the beach, instead sitting in the trenches at a keyboard & cases of red bull with fellow Software Craftsmen sliding sideways across the v1.0 finish line with our hair on fire. To me, that feeling accomplishment from shipping high quality software is tantamount to any weekend at the beach. I’d trade a weekend of R&R at an all-inclusive resort for an all-night Hackathon pretty much any day of the week. That’s not to say I don’t disconnect from all things electronic on a regular basis. My wife and I have spent the past couple of years rebuilding my Grandfather’s “Walden cabin” on a river in the mountains of southern Virginia where there is no internet access or even cell phone access at all. Unplug regularly to recharge, you ironic human.

In the coming decade, I expect we’ll see a different kind of outsourcing than we’ve ever seen. We’ll see folks in the IT industry outsourcing themselves, building abstractions between the traditional brick & mortar employer and themselves. This transition may not be completely unlike the shift from brick and mortar shopping to an electronic marketplace of work. This new landscape excites me, and I look forward to the efficiencies and freedoms these new abstractions will bring. We’ll be able to form loose connections with experts in our network and reconnect as needed to continuously accomplish meaningful work.

Curation of Dependencies

Reading an article from a former colleague, Proliferation of Depencencies got me thinking about how we manage dependencies today. There are inherent risks to blindly taking on a dependency to solve a single point need.

Dependency chain npm

source: https://lastlog.de

The tendency toward adding a dependency rather than writing code seems to be accelerating, at least from my observations.

The recent snafu with npm is a good example of how dependencies can be a risk. When Azer Koçulu removed all his npm modules, thousands of applications were suddenly unable to build. A situation that never should have happened due to namespacing, curation, and thoughtful dependency taking, it was a wake-up call to the node community. Many projects were dependent on a single package ‘left-pad’ that was only a couple of lines of code.

Taking a dependency on someone else’s code that isn’t part of a core language framework, especially for 3-4 lines of code, is an unnecessary risk. Alternatives to consider are to write the code directly into your project, or fork the dependency you’re considering taking.

The broader consideration is around how to curate an ecosystem such as npm. Languages and code bases with a benevolent overlord such as the Linux kernel, Microsoft’s .NET CLR, or Google’s Go have the benefit of a tie-breaking entity to minimize dependency sprawl. OSS projects without a strong advisory and curation group have a higher risk of dependency sprawl.

While a Swiss Army knife solves problems, a Swiss army chainsaw can make a mess.

Most Companies have a Data Privacy Policy – So should you.

Tin foil hat cat

Years of working in IT, especially in the financial and medical industries, have made me more paranoid than most people about data privacy considerations. We’ve all seen the data breach headlines from companies like Target, Home Depot, Adobe and countless others. These are companies with dedicated security teams charged with taking important measures to secure customer data who have nevertheless failed in this effort.

While the threat of a data breach cannot be eliminated entirely, having a written policy and methodically following it will go a long way. In many jurisdictions, companies are legally obligated to have such policies in place, so why shouldn’t you?

When I was recently asked to install an MDM client on my personal phone in order to access company email, I had to say no. There are various reasons for this, many related to the tin-foil hat that has kept my data safe for many years. However, when it came down to explaining this in simple terms, I was at a loss without going off on an extended Libertarian tirade on the merits of privacy. So, in order to remedy this loss of words in the future, I decided to write and publish my own person Data Privacy Policy.

It’s amazing how simple this makes things. The next time I’m asked to give out my personal information and am not comfortable doing so, I can just refer the requestor to my publicly available Data Privacy Policy. If their policy is not in alignment with mine, then I can simply explain that their policy isn’t sufficient to keep my data safe, and I will have to decline sharing it at this time.

Having a written policy keeps any decisions out of the hands of arbitrary choice.

You can read Chris Ballance’s Data Privacy Policy here.

Should you feel inclined to develop a data security policy of your own, feel free to use mine as a template. It is released under the MIT License.

Build an ecosystem around an ethos – The bottom line is no longer the bottom line

Sliced up hundred dollar bill

photo by http://www.flickr.com/photos/76657755@N04/

Once upon a time, in an economy far far away, the measure of a company was its balance sheet alone.

While a company must be profitable in order to stay in business, focus today is shifting to a more broad collection of measures, many of which have nothing to do with the bottom line. Organizations focused on achieving long term success are adept at firmly establishing their core values, attracting and retaining talented individuals and teams who embody these values, and communicating with customers authentically and transparently.

“As individuals and companies, everything that we say and do is a symbol of who we are. And it is only when we communicate our beliefs authentically that we can attract others to our cause, and form the bonds that will empower us to achieve truly great things.”

~Simon Sinek
This principal applies to organizations of all shapes and sizes. When choosing local produce the other day, I was presented with a choice between tomatoes grown by a local organic farmer and another set of similar tomatoes with simply a PLU 4064 and a somewhat smaller price tag. While I’m a frugal person at heart, seeing the name of the farmer and her nearby community made the choice clear to me, and I went with the local option because of the value provided to both myself and my local community. Ten or twenty years ago, this choice might have been unheard of. Individuals have started caring about “where” their food comes from, and this relates directly to the “why” of the person or organization who produced the food.

In the more ephemeral software realm, it can be hard for a customer to differentiate between a software platform from Initech Corporation or a similar product from Hooli. There was a time when companies could remain competitive on simply the number of features offered and the price, but the relevance of those two factors alone is waning, especially as the sales price of millions of pieces of software and apps approaches zero.

In software, a bullet-proof strategy is to have an ecosystem built around an ethos. While there is more to it than the field of dreams mantra “If you build it, they will come,” with other things equal, a clearly communicated “why” will separate the passionate innovators from the rest.

Companies and organizations are a powerful force in the world, and are able to organize and operate based on the ecosystem around them. There are limitless opportunities out there for us humans, as stewards of this planet, to make it a better place. Sir Richard Branson sums this up well.

“…imagine all the good that can be done when all companies place emphasis on purpose. Many customers want to buy from businesses that share similar values to their own, so more and more consumers are aligning themselves to impactful companies that sell social or environmentally-conscious products and services.”

~Sir Richard Branson

I encourage each of you to get out there and build successful organizations or work to effect positive change in the organizations you are a part of.

//Chris

Ten years ago, today, I lost my mentor, but his teachings were timeless

Reach for the Summit, Mt Rainier, 2011
“Reach for the Summit, Mt. Rainier, 2011”

Twenty-four years might be considered a long time for a mentor-ship, but this one was unique, and started way back in 1981.

What I didn’t know at the time was that the principles and rules I had gleaned over those 24 years would continue to mature and gain new relevance during the years to follow.

Learning / Technology

I can trace my career path back to a single day, July 12, 1986 when my mentor presented me with a hunk of metal, silicone, and glass that would keep me busy for the next 30 years and counting. That Commodore 64 is still in my closet, and the last time I fired it up, it booted up just like it did all those years ago. He somehow knew that putting me in front of this strange new machine would alter the arc of my life and career in so many interesting ways. I’ve always had a stubbornly inquisitive mind, and this was the perfect way to channel it.

Loyalty

He taught me to be loyal, fiercely loyal, to family – which can mean your blood relatives or close friends who you consider family. Their safety is your responsibility, and it’s your job to do whatever it takes to protect them from any harm that might come their way. On multiple occasions, he would tell me, “Take care of your brother. Long after I’m gone, you two will have each other and I expect you to look out for each other.” As an infantryman in Vietnam for two tours and as a Policeman in my home town for 33 years, he was a walking example of making sacrifices of self to protect others.

Do the right thing, even when no one is watching

So many times I’ve kept myself out of trouble by remembering his words to behave “as if people are always watching what you do, and they have a camera to take pictures as evidence.” Simple as this is, this perspective has kept me on the right track many times.

Reach for the Summit, but…

When I was very young, he gave me a pewter Ram with a motto that he subtly encouraged me to follow. The meaning of “Reach for the Summit,” has changed for me over the years as I have learned it applies not only to “Charge the hill,” but also to “Charge the right hill,” and “Don’t charge the hill if it is a volcano.” Several years ago I was leading a hike on Mt. St. Helens in Washington with a couple of colleagues from Microsoft. As we neared the top, I took a hard look at the situation and realized that “Reach for the Summit,” also included re-assessing the situation during the ascent and altering the plan if necessary – even if this includes not actually reaching the summit. I had under-budgeted on water for the team, and we got a late start on the mountain due to unforeseen circumstances. When I saw that reaching the summit was indeed possible, but only at the expense of the safety of my team, I made the call to turn back. In the end, we all made it safely home, and that’s more important than reaching any summit.

Persistence

Others may be more skilled, but don’t let them outwork you. Once you’ve set your mind to accomplishing a goal, you keep chipping away at it. Whether you’re slow or fast, as long as you’re moving toward your goal, you’re on the right track and every day you get closer to achieving what you set out to do. Getting discouraged is fine, but push past it. Oddly, he passes this along to me as a lesson he learned from the opposing force in the Vietnam War. While his side was under orders to fight the Viet-Cong, he respected the way they leveraged their persistence as a strength and were able to evade a more powerful army. “Know your enemy,” as Sun Tzu might say. There is much you can learn from them.

Loss

They say that time heals, but this is patently false. If someone truly made a mark on your life, there’s an indelible scar left when they’re gone and you’re never quite the same again. What time does do, is to help those scars feel less painful, and to make the voids feel less empty. Scars remind us of where we came from, and that makes them pretty important. Seldom a day has gone by in the past ten years when I haven’t thought of my Dad and how he somehow prepared me for challenges I would face, even years after he was gone.

In 2006, he checked 10-42* far too soon, but left me with a lifetime of advice that I’m constantly reminded of.

* (10-42 is a law enforcement term for end of watch)

Becoming a Journeyman vs hiring a Craftsman

Brick mailbox project

Mailbox

I recently decided to set out on the somewhat mundane task of replacing my (nearly falling over) mailbox with a nicer brick one. It’s certainly not the epitome of an exciting project, but I came upon an interesting bit of insight along the way.

When I set out have something built my first instinct is to built it myself. I’ve come to learn that is a double-edged sword. Sure, I get to learn a new skill or technique and have the unique sense of pride found in having sweat equity in the end result. I love both of those aspects of DIY, which is why I tend to lean toward it. The flip side is that unless I’m going to build one of these things more than once, ever project I complete is the work of an amateur, regardless of how diligent I am in doing the best job possible.

Over the years, I’ve had to force myself to always evaluate the equation of build vs buy. This applies to projects around the house, and software at the office. There are many factors, but the main ones are these…

  • Cost
  • Time
  • Quality
  • Control

Cost

I’d say 95% of the time, my initial back-of-the-napkin estimates indicate that it is cheaper to build than buy. The full implication of DIY on TCO (Total Cost of Ownership) is something I sometimes willfully choose to ignore. Questions I have started asking myself to counter this are

  • Do I already have the tools I need to accomplish the task? If not, and can I use them to accomplish other tasks?
    • How much will the necessary tools cost?
    • Will these tools be useful for other tasks?
    • How much space will these tools take up in my garage
    • Can I just rent the necessary tools instead of buying them?
    • Would a person I hire be able to complete the task for cheaper than I can?
  • Do I already possess the knowledge I need to accomplish the task?
    • How long will it take to obtain this knowledge?
    • Can I apply this knowledge in other parts of my life?

Time

  • Do I have time to complete the task myself? This includes any ramp up or tool and material procurement.
  • Can I complete the task myself faster than hiring someone?
  • How long will it take to find and hire someone to complete the task?
  • If I hire someone, how long will it take them to finish the project?
  • How quickly do I need the task completed? This has to balance my time vs finding and hiring someone else.

Quality

  • Will I be able to hire someone that will deliver a result of sufficient quality?
  • If I do it myself, will quality suffer?
  • Will my perfectionist tendencies prevent me from ever completing the project?

Control

  • Am I willing to give up control of the project to someone else
  • How important is having complete control – taking other factors into account such as cost, time & quality?
  • Will I be able to hire someone to complete the task with autonomy?

Taking the time to do a quick evaluation of these four factors have helped choose a more effective route and achieve better results rather than just always falling back to DIY.

As much fun as it is to DIY everything that comes along, it’s not the right route for every project.

As far at the mailbox goes, I decided to hire someone instead of slinging hundreds of pounds of bricks and mortar myself. When he came out to do the estimate I could tell this guy was a craftsman, not a Jack-of-all-trades and I’m pleased with the result.

“I don’t know” is almost always the wrong answer.

Whether you’re asked about the circumference of the Earth, the number of cups in a gallon, or the land speed velocity of an unladen Swallow – answering, “I don’t know,” is wrong 100% of the time.

While I would never advocate making up an answer in the hopes of your inquisitor not knowing the answer themselves, It’s never okay to say only “I don’t know,” and leave it at that. It is important to admit your knowledge gaps, but to not seek to fill them in is selling yourself short.

Monty Python – crossing the Bridge of Death


When you reach a mythical ‘Bridge of Death,’ which you must cross, the Keeper of the Bridge requires you to answer three questions. Telling this guy you don’t know the answer, is a really bad idea. After all he will cast you into the Gorge of Eternal Peril if you get it wrong or don’t know the answer.

Take your time, ask clarifying questions if need be, but if you really have no idea, the correct answer is “I’ll find out.”

Nearly every interview I’ve been on has included a question or two that I flat-out didn’t know the answer to. Each time, I made sure to remember or write down the question that had stumped me and to research the answer afterwards. With a little time and concerted effort, you can find the answer, and it’s a great opportunity to follow-up.

Ultimately, the answer to anything you don’t presently know is, “I don’t know … yet.”

Apparently I’ll read whatever is on the cue card.

This afternoon, I went out for my usual afternoon coffee at Rush Espresso in Latta Arcade. while I was walking, I was responding to a question about the specs for some servers in a test lab.

Coffee Steam CC Flickr waferboard coffee break

Coffee Break by flickr/waferboard

I was also formulating my order at the coffee shop and barely caught the error below just before I pressed send. This is also why I initially leave the TO: line blank and re-read almost every email I send before I press the send button.

“These machines are self-contained and we will only need access on ports 80 and 443, as well as a medium decaf latte, RDP access”

I should know better than to order a server with Java on it 🙂

“When I saw you strap on a helmet, I knew you meant business.”

As a student of both my Dad, and Sun Tzu, the following advice has proven useful to me over the years.

是故百戰百勝,非善之善者也;不戰而屈人之兵,善之善者也。

– Sun Tsu, The Art of War, 6th century BCE

The English translation I prefer is:

“The best victory is when the opponent surrenders of its own accord before there are any actual hostilities… It is best to win without fighting.”

Being prepared for what is ahead, and framing your perceived position to be one of strength, can often yield a successful outcome without the need for a more involved, high-risk, confrontation.

One of the stories my Dad told me gives a great example of this…

Dad was behind a car at a traffic light and noticed the driver seemed very nervous and kept glancing in the rear view mirror. It was a long light, so he had time to run the plate to check for any abnormalities.

Sure enough, the driver had reason to be nervous, as he had just stolen a shiny new sports-car, and the marked police car behind him seemed to have figured this out.

For whatever reason, Dad ended up in a lot of car chases in the 33 years as a cop and started carrying a helmet to keep from getting banged up as much.

When the car came back stolen, he reached over, grabbed his helmet, put it on, and tightened the chin strap.

Expecting the guy was going to run as soon as the light turned green, he caught the driver looking back at his now-crash-helmeted self and gave a huge grin indicating he was ready for an epic car chase.

As soon as the light turned green, the driver went through the light and pulled over before Dad even turned on the lights and siren.

When Dad got to the window and asked him why he pulled over, the driver says…

“Sir, this car isn’t mine, and honestly I was gonna make a run for it… But when I saw you strap on a helmet, I knew you meant business.”

Posture and preparation can often provide a shortcut to the desired outcome without the struggle and risk of conflict.

Crash helmet

Dad’s Crash helmet (similar)