Dec 282012
 

I got a call this morning from a good friend telling me that another good friend, John Michael Baugh, passed away a few days ago.

I met JM when I went to work for CyberClick Marketing. Shaved head, stocky build, inked up arms – if you didn’t know better, you’d think he fronted a Norwegian death metal band. In reality, he was one of the most soft-spoken, even-keeled men I knew.

I admired JM because he had things going on in his life that any one of which would have destroyed most people. His adopted son was critically ill, completely dependent on others, machines, and hospital stays. His son was also a victim of a few significant instances of malpractice, and JM was the victim of an insurance and healthcare system that seemed almost purposefully designed to make sure his life was hard.

That was just one thing. As long as I knew JM, it seemed like life never let up on him. It seemed like every day, something was seriously wrong at home, or his transportation, or some bill came due that put him in a financially precarious situation, or the “system” backhanded him, or some weird relational thing happened in his family, or someone who depended on him broke down, or one of eight million things.  And in all that time, JM just took it as “life” and did the best he could.

Sure, like most of my friends, he had a cynical dark streak, but he faced a rather overwhelming sea of problems and, somewhere in his heart, just decided that the only thing you could do is take life on its own terms and just plow through the difficulties the best you could.

People who knew JM will probably remember his love of conspiracy theories, and if you’d been screwed by the system as much as JM had, you might be a bit of a conspiracy theorist, yourself. But I will always remember him as a man whose life was ten times harder than mine, and he just kept going in that matter-of-fact manner.

He thought of me as a good friend and made sure I knew it, keeping in touch with me and supporting me long after we went separate ways, workwise. Like everyone else, he had his flaws, but in many ways, he embodied several characteristics – strength, loyalty, simplicity, fortitude, and a sense of perspective – that I and others in modern American society could learn a lot from. I hope I can honor his memory by trying to exhibit those characteristics more in my own life.

I think he’d get a kick out of that.

“You may find yourself living in a shotgun shack
You may find yourself in another part of the world
You may find yourself behind the wheel of a large automobile
You may find yourself in a beautiful house with a beautiful wife
You may ask yourself, well, how did I get here?

Same as it ever was.”

Aug 282012
 
W. Edwards Deming in Tokyo

W. Edwards Deming in Tokyo (Photo credit: Wikipedia)

W. Edwards Deming was a man instrumental in helping Japan get back on her industrial feet after World War II. It’s hard to imagine the United States being able to tell someone else how to do things efficiently and without waste, but apparently we used to be in a position to do this without anyone laughing, and this guy did it.

Deming was a prodigious thinker, writer, and analyst, although once you worked through the core of what he had to say, a lot of it fell into categories like “Common Sense” and “No Seriously Why Aren’t You Guys Doing This Are You Touched In The Head Or Something.” One of these ideas was the Plan – Do – Check – Act flow, which is often shortened to PDCA because… well, actually, those are all one-syllable words, so I guess I have no idea why it gets shortened to PDCA.

Plan: What are you trying to accomplish and what do you think will get you there?

Do: Execute the Plan.

Check: Did the results of the Do correspond with the expectations in the Plan?

Act: Make adjustments if necessary (most often to the Plan).

As simple as the basic idea is, it’s astounding how many business processes, activities, and decisions leave out one of these components, or at least fly right through them as if it’s not important to do them carefully and well. Because I have no life to speak of, I got to thinking about the various ways this cycle occurs in software development.

PDCA at the project level

When we begin a project, we ideally have some strategic goal this project is supposed to accomplish. Maybe it’s to increase market share. Maybe it’s to cut costs by automation. Maybe it’s to give more control to our customers. This goal and this project have ideally been prioritized, and now its time has come.

In the Plan stage, we want to define what the project should look like (e.g. a feature list) and how we think we’ll get there (e.g. prioritized sequence, high level design and infrastructure, etc.). It’s important to note that we are planning at the Whole Project level. It’s just waste to start doing things like getting all the details about all the features at this point.

The Do stage, I’ll expand out in a moment, but this is basically building the application and getting it all into production.

In the Check stage, we make sure our intended features are in there and working. We also want to measure how this project is doing in terms of supporting the strategic goal that brought it to us.

In the Act stage, we either move on to the next project priority, or we enhance and rework this one to get closer to our intended feature list and strategic goal.

PDCA at the feature level

Now, we’re down to cranking out the features identified at the project level.

In the Plan stage, we want to take the top priority feature (or possibly features if you have enough developers to roll off onto a second feature) and we want to find out what it means for this feature to be complete. In other words, the business, testers, and developers work together to flesh out the Acceptance Criteria in an attempt to answer the question: How will we know when we’ve got this feature ready to deliver? It is a time of getting down business rules, various requirements, etc. This is also a good time to create any design or documentation artifacts that will actually help you deliver.

In the Do stage, we write automated tests around our acceptance criteria (I guess you could argue this goes in “Plan;” I won’t fight about it), then produce the stuff that will make those tests pass. Web pages, controllers, databases. We create according to the Plan, no more and no less.

In the Check stage, we’re going to see if our feature makes our acceptance tests pass. This is also when we want QA and the user to give it the once over, although hopefully they’ve been checking out our progress before now.

In the Act stage, we either make adjustments to accommodate the feedback we got from Check, or we get this feature out the door and start on the next priority.

NOTE: Feedback should be ubiquitous and, as such, it’s hard to find a nice, neat place to put it in diagrams like these. It’s great to have user and QA feedback as you go, for instance. It’s good to have a peer confirm your direction before you get halfway into something that won’t work. It’s good to have regular meetings where the team reflects on their own performance and things to improve. Those things don’t really fit in at a specific project, feature, or unit level, but they should definitely be liberally sprinkled throughout.

PDCA at the code unit level

When we code a feature, we have to write units of code to deliver that feature. Controller methods. Domain object properties. Service APIs.

At the unit level, the Plan stage involves making sure that we’re writing code for the specific purpose of satisfying an acceptance test. If this isn’t the case, then we screwed up. Either we didn’t capture a necessary requirement, or we’re writing something nobody asked for. We also want to write the automated unit test that our code will support. This helps us both design the code and write less of it.

The Do is basic – write the code that makes your unit tests pass.

The Check is mostly that the unit tests pass. It’s also a good idea to have some level of peer feedback, whether you do this by way of an official review or whether it just happens naturally from pairing and swarming. Having someone look at your code after every single unit might be annoying, but you want some mechanism to get feedback.

Based on whether or not your unit tests pass (and the feedback you get from other developers), you may need to rework your code. If the tests are passing and your colleagues agree your code isn’t draining their will to live, then check it in. I recommend checking in at the “my unit of code is making its test(s) pass” level, which probably means several times a day. Then, start your next unit of code, which also should be supporting an acceptance criterion.

I haven’t really fleshed all this out or even thought critically about it, but there are some interesting ramifications for looking at things in this way. For example, some people feel automated tests are waste, but when we look at them through Deming’s eyes, we see that they’re actually a mechanism for reducing waste (which in this case means code that does not work or adds no value to the customer). We find also that testing is done early and often, which addresses what is often pointed out as the highest risk in a waterfall approach. We also see that, in order to limit waste, planning needs to be level appropriate. A comprehensive UML diagram is completely inappropriate before you start work on a feature, for example.

More on this as it develops.

Nov 012011
 
Image representing LinkedIn as depicted in Cru...

Image via CrunchBase

I had this gem waiting for me in my LinkedIn Inbox, today:

I wanted to touch base with you to see if we could help each other out. I would like to see if you could meet for coffee sometime to see if we could partner up on some of our clients to grow our businesses. Would you be available next week?

This is exemplary of the dark side of business related social networking.

Hopefully, we’re all familiar with the benefits. You can keep track of people you meet at events. You can easily follow industry leaders. You can quickly share knowledge and converse with your colleagues in the field. You can look up people you hated in high school and see if they’ve lost their hair or ended up working in sewage management. All kinds of helpful things.

But then you get things like this – people who have no idea who you are coming out of the blue with some generic message in the hopes you’ll be all, “Hell yeah, I was really hoping I could partner up with a total stranger to grow our businesses! Saddle up, partner, and let’s ride this success bronco into the sunset of financial independence. YEE-HAW!”

First of all, I’m not even sure this person has any idea what I do. Second, I hate it when someone asks me to “partner” with them, especially when it’s clear that this “partnership” is basically me helping them out.

95% of recruiters operate the exact same way. About three times a week, I get a request from a recruiter asking to be part of my network. Typically, I send them a message asking how I know them, and inevitably, I get this, “We don’t really know each other, but I’m looking for people like you for opportunities I have in dolphin riding. If you or anyone you know is looking to ride dolphins, let me know. Are you happy with your current dolphin riding situation?”

Whether you’re recruiting or trying to build your business, there is no substitute for real relationships. I will not help you spam me and my colleagues. I am not a “prospect” or a source of prospects. If we haven’t met before, and you’d like to build a business relationship, at least show some inkling that you know something about me and there’s a reason why we should know each other. For instance:

Hey Phil, I was reading your blog about dolphin riding, and it was really good. It’s hard to find people doing that level of thinking about dolphin riding. I admit, I didn’t understand all of it, but I got the main points. If you would like to and it’s convenient, I’d like to buy you a coffee, sometime, because a lot of clients I work with are lost in the world of dolphin riding, and I’d really appreciate knowing someone who could give some insight when I need it. If you don’t have time to get together, that’s completely fine.

Not great, but much better. It at least indicates you’re halfway interested in me as a person and my work and not just a name that came up on a LinkedIn search for “dolphin riding.” At least we have some sort of basis for forming a business relationship and, as long as you aren’t creepy about it or wanted for a string of craigslist killings, I’d probably take you up on your offer just to hear what’s on your mind and get the free coffee (although, fyi recruiters, the way to my heart is scotch).

Here’s to hoping I show up as an authority on dolphins in Klout because I wrote this!