Benjamin Hysell – Software, Projects, and People Rotating Header Image

management

Doing More With Less

Did you know Dr. Seuss’ Green Eggs and Ham was written on a bet?  Neither did I, until I came across a collection of bronze statues of his characters at the Hotel del Coronado in San Diego, California.  I snapped this picture of a plaque next to the statue for Green Eggs and Ham.

Dr. Suess Plaque at the Hotel del Coronado in San Diego, California

A full tour of all of the statues can be found at http://www.drseussart.com/hotelgallery.html, sadly most of the plaques are not included in the picture tour.

If you can’t read the plaque in the picture, Wikipedia has you covered…

Bennett Cerf, Dr. Seuss’s publisher, wagered $50 that Seuss could not write a book using only fifty different words.[2][3] The bet came after Seuss completed The Cat in the Hat, which used 225 words.

http://en.wikipedia.org/wiki/Green_eggs_and_ham

Dr. Seuss created an American children’s classic on a bet where he was resource limited.  Dr. Seuss, in this instance, embodied the mantra of “doing more with less.”

This concept of “doing more with less” isn’t new in the field of computers, and is one of the mantras of 37signals.  A quick Google of 37signals more with less kicks up two great articles:

I’ll save you the trouble of a click through: “Less is More” implies that more is better. It’s not.  Less is less.  Less is just right.  Less is better.

I’ve tried this technique of “doing more with less” in how I manage my time and the tasks I would like to accomplish at home.  For example, before I would come home from work and have all the time in the world and a long list of things I would like to accomplish.  I would keep thinking to myself, “I’ll get to writing that blog post, or playing that new Xbox game, I have hours before I need to be in bed.”

The rub was since I thought I had hours upon hours of time on my hands I would wind up not focusing on any one particular task, get sucked into something on TV, and never accomplish anything.

Every morning I would wake up and ask myself, “Where did all of the time go?”

Thus, in an attempt to live the “less is more” mantra I have restricted the amount of time I allow myself to spend on any one given task at night.  I have restricted the amount of time I have to write, program, and play Xbox.  By restrict the amount of time I give myself to complete a task I actually spend my time more wisely, accomplishing more than if I just gave myself all of the time in the world.

::Well, I’ve been productive writing and programming, I’m not sure you can call my Xbox time “productive”.  However, now I actually finding myself playing my Xbox instead of it collecting dust under my TV.  Productive?  Microsoft might think so, my wife and dog are not so sure.::

The only thing keeping me from creating the next Green Eggs and Ham is to make a crazy bet with my publisher, which will happen, once I get a publisher.

Breaking Down the Game Film – Micro Code Reviews

“Breaking Down the Game Film” is a term commonly used to analyze tape from an already played sports game to dissect what went right and what went wrong.  In this series I’ll be taking published articles from around the web and break them down.

Topic: Micro Code Reviews

Article: “The Joy of Code Reviews”

Author: Tom Hollander

Link: http://blogs.msdn.com/tomholl/archive/2009/01/06/the-joy-of-code-reviews.aspx

Short Summary:  Full code reviews are done too infrequently, and take too much time to complete to be done with any real regularity.  Micro code reviews, performed before every check-in, provide you and your project all the benefits of a full fledged code review, but also facilitate knowledge transfer between team members, an avenue to provide mentoring, and a chance for your team to “show off” to one another that cool new algorithm they have been working on.  All in 15 minutes or less!

Analysis:

When was the last time you reviewed the whole codebase for your project?  Stem to stern?  I know, I know, who has the time.  Everyday the codebase gets larger and larger, and each one of your team members becomes more and more specialized in whatever it is they are working on day in and day out.  What happens if one day George walks in and goes, “I’m off to Alaska to follow my one true calling.  Being a software developer is nice and all but I wanted to be… a lumberjack!”

::Deep down you know he’s a lumberjack, and he’s ok.  He likely will sleep all night and work all day, but I digress…::

George is gone.  When was the last time anyone was looking at his code?  Who on your team knows how his really cool, yet very complex, algorithm runs?  Sure it all works, but who last put eyes on his code to try to and understand it?

If I know your team, and I likely don’t, but I’ll assume I know them, no one has looked at his work in a while.  Why would they?  George’s code worked, all of his tests passed, who has the time to review working code?

Your project has just suffered a major brain drain, and you don’t have a plan on how to recover quickly.

Tom’s article, “The Joy of Code Reviews”, provides some great reasons for you and your team to adopt what I’ll call micro code reviews.  A micro code review works like this:

  • Before every check-in to source control George grabs a fellow team member, Stan, and they review all the changes that are about to be committed to source control.
  • In Tom’s article he states these reviews often last 15 minutes, some much shorter, some a little longer.  Fifteen minutes seems just about right for a couple of programmers to review a bug fix or feature enhancement and has been the typical amount of time my team and I have taken for our own micro code reviews.
  • After George and Stan have reviewed the code, ensured the unit tests pass, and then check the code into source control.

Pretty simple and straight forward; spend 15 minutes before every check-in, or 30 minutes billed to your whole project, to get a second set of eyes on the code that is getting into your source tree.  On top of that:

  • In his article Tom calls out one of the great benefits in doing these reviews is the mentoring that can take place between two developers.  George has a chance to show Stan the new functionality he has implemented and possibly a new way to write code, debug, or write tests.  As Stan is exposed to George’s style he may pick up a tip or trick just watching him work.
  • I’ve personally seen George improve his ability to explain complex thoughts and algorithms to Stan.  Oftentimes we work in isolation, only explaining things to ourselves.  By sharing with Stan and forcing himself to verbally explain things George has a chance to work on his presentation skills as he breaks down a complex problem to Stan.
  • Micro code reviews provide a chance for a team to feel more like a team as they work directly with one another.  I feel my team has gelled together a little more with these mini interactions that take place during these micro code reviews.
  • One might think developers would be resistant to these micro code reviews, however I found when I argued one could “show off” that cool new thing they did everyone seemed to get on board after doing a few code reviews.  Software developers love to have the admiration of their peers, give them a stage and most of them will step up and gladly perform.

I’ve adopted micro code reviews for my team and have had some excellent results.  Team members are grabbing one another when before new code is committed to the system.  Spirited debate takes place between the developers while reviewing the code, and learning is going on as each one learns from one another.  For us it has been a huge win win.

So when George answers his primal calling to be a lumberjack…

:: He cuts down trees.

He eats his lunch.

He goes to the lavatory.

On Wednesdays he goes shopping

And has buttered scones for tea.

I’m done, I’m done, I swear.  No more Monty Python for this post…::

You and your project will be prepared.

Breaking Down the Game Film – Mission Statements

“Breaking Down the Game Film” is a term commonly used to analyze tape from an already played sports game to dissect what went right and what went wrong.  In this series I’ll be taking published articles from around the web and break them down.

Topic: Mission Statements

Article: “How to Write a Mission Statement that Isn’t Dumb”

Link: http://www.fastcompany.com/magazine/140/do-something-wordplay.html

Short Summary:  The time used to generate most mission statements would be better spent burning $20s in the alley behind your office building.  Identify your company’s quantifiable goals and write a statement that will inspire people to rally behind those goals.

Analysis:

Quick!  What is your company’s mission statement?

Can you find it on your internal website?

Can you find it on their external customer facing website?

Ok, now that you have found it how do you feel?  Quick, one word!

I’ll spot you the word, let’s go with underwhelmed.

Now, compound that feeling with the thought of how many man-hours it took to produce that mission statement.

It’s ok if you are now openly weeping…let it out.  I know your company couldn’t buy you that brand new computer chair last year, they had to write a very bland statement that serves no purpose to you or your daily life.  Sure, the new computer chair would have been nice, but they really needed that sentence on their website.

Before reading this article I wouldn’t have given a company mission statement a second thought.  One of the tools I use, Microsoft Team Foundation Server, a task tracking and source control system, starts every project with a few pre-populated tasks.  One of those tasks is to write the project’s mission statement.  I normally skipped this step; I never saw any value to burning any calories on attempting to define the mission statement for an individual project.

However, after reading this article something clicked for me, making me reconsider the value of the mission statement.

Do you want to add a feature to the project?  Will that feature further project development?  Does it mesh with your mission statement?

Yes: Continue investigating the idea.

No: Drop it and move on with your life.

Quick and simple.

Caution.

Like any tool in your toolbox overuse the mission statement and your co-workers will become numb to its effects.  Engineers smell b.s. from a mile away, if you show up Monday morning chanting your company’s mission statement, wearing a shirt with the statement on it, and hand out pictures of you posing with the mission statement you will lose them.   “Sure boss, great idea, I’ll put on my hat with the mission statement tomorrow…today it would clash with my outfit.”

If you are going to take the time to do so, write the mission statement with care, capture that goal, write it in such a way as to inspire people to work towards that goal, but be sure to not over use it.

How Would You Motivate Howard Stern?

Disclosure #1: I am a rabid Howard Stern fan.

Disclosure #2: I actually own stock in SiriusXM at the time of this writing.

Wise Ass Remark #1: I should have really held off on buying the new iPhone last week, I could have completed my hostile takeover of the company.

::As of this writing the stock is trading in the mid 40s, the mid 40 cents a share.::

Picture yourself as SiriusXM management.  We’ll call you, Mel, for fun.  Mel you have one of the greatest radio talents ever to grace the airwaves in your possession.  Your company acquired exclusive rights to him and have him locked up for the next couple of years.  Howard moved over to your company and brought a lot of his fans with him, almost instantly paying for his contract with all of the new subscribers.

Howard is still on top of his game.  His audience still loves him and by all accounts, he is doing a bang up job.  But the stock, oh the stock price!  People could buy a share of your stock with the change they find in their couch…your subscribers might be happy, but Wall Street is not.

For the sake of this article let’s pretend there are not a million other economic, business, and social factors at play in determining the stock price of a company.  Let’s assume that the more subscribers you can acquire the higher your stock price will rise, thus motivating you, Mel, to find a way to acquire more subscribers.  Lastly, you being you, you know that there is a vast quantity of people out there willing to pay to listen to Howard Stern, they just need a little nudge to get them into the game.

Knowing all this, one might naturally approach Howard to do some promotion outside of his show; maybe do the late night talk show circuit, an interview in Rolling Stone, show up to a movie premiere…anything that would expand the reach of his voice past his own show, and remind the fence sitters who used to listen to Howard to pick up a satellite receiver.

Sounds reasonable to you…get your biggest star to make a media push, sit back and watch the subscribers roll in.

Howard, however, isn’t all that motivated to help out.

Sure he has a million and one reasons why he doesn’t want to do more press, the late shows, etc, but it really comes down to he feels he is doing a great job, as validated by the listeners, and the hell with everyone else who didn’t follow him and the stock price.  Howard, in his mind, has fulfilled his end of the contact.

Mel, what do you do with a star employee who is performing at acceptable levels, but not working to his ‘all-star’ potential?  You know Howard could step up and do more outside of his already excellent show, he could be doing things to bring in more subscribers, and grow the business.  You have seen him do it in the past, however right now he just isn’t.

What do you do?

Back to software engineering…you’ve hired an all-star developer, named Johnson, from Microsoft.  Johnson has years of experience with all the right technologies.  You pay him a fair salary for his skills and his years of experience, and once he starts working for your company you find out he is only an average manager/mentor/team member/coding machine and not the all-star you expected to show up when you hired him.

What do you do?

How do you get your own personal Howard Stern to step up, take on new challenges, and work to their full potential?

What motivates people to work harder?

Money, Power, Respect, Whatchu’ need in life.

~Lil Kim from Money, Power, Respect by The LOX featuring Lil Kim & DMX

::I knew at some point I could work DMX into my blog.  Mark another item off of my ‘Bucket List’::

Conventional wisdom says we are all working for these three items, money, power, and respect.  Let’s break each one of these down.

Money

I believe we as managers have covered the money aspect, be it Howard Stern or our fictional software engineer Johnson.  Hopefully, you and Johnson both did research and negotiated a fair salary.  Johnson came on board, and one will assume he is satisfied with his pay.  You could throw more money at him and see if that re-motivates him to work harder, but did you just create a negative feedback loop?  Don’t work up to your all-star potential and make more money?  If Johnson keeps this up, he will end up owning the company and only have to work a few hours a week.

In Howard’s case, his contract was well publicized, something to the tune of half a billion dollars for five years.  Surely, that is enough money for almost anyone to live comfortably.  Re-motivating Howard with more money would be difficult; we don’t have another half a billion sitting around to dangle in front of his face, plus there is an upper limit on how much money your company can throw at one person.

I have just finished reading Stumbling on Happiness, see my review at http://benjaminhysell.com/my-bookshelf/, once people rise above poverty acquiring more money rarely makes people any happier.

Since we don’t want to create a negative feedback loop, and don’t have any extra money laying around in this economy I’ll cross money off our list.

Power

What is power?  Power to decide what to work on, how to work on something, when to complete a task?

Power who to hire, who to fire?

Power over your subordinates, power to decide what they need to accomplish, and when?

Power to mange every aspect of everyone’s lives around you?

Power is a nice thing to have in your daily job, its nice to have some freedom to decide what to do when, and to influence those around you.

Howard has plenty of power.  He hires and fires his own staff, he chooses what to talk about every morning, and decides how and when to move his show along from topic to topic.

Will giving someone like Howard more power re-motivate him to excel?

What about Johnson?  How much power is Johnson wielding in his current role?  Is he allowed to set schedules, talk to the project stakeholders, and manage features?  Assuming Johnson already has most of these upper management ‘base powers‘ will giving Johnson more power re-motivate him to excel?

Again, no, there is too much of a potential to create another negative feedback loop by rewarding less than stellar work ethic with more power.  Plus, how much power do you want to give him?  What new powers would you give him?  For Howard and Johnson you could expand their powers over other departments, hiring and firing for the company, and long term strategy.  Are these powers they would even want?

With great power there must also come – great responsibility.

~Stan Lee

::Ha, two items off the buck list in one night, a DMX song and a quote from Spider Man::

How much power is too much when someone can’t perform the basic functions of the job you hired them for and they become absorbed doing other tasks that are not vital to their core job?  I’m going to mark power off our list as well.

Respect

Do you respect your employees?  Do you hear their ideas, thoughtfully consider them, and then respond back to those ideas with a well worked out response?  You do?  Stop reading, start your own blog, and send me a link to the RSS feed.  Why are you wasting your time reading my blog?

Listening to others and fully considering what they are saying before responding is a rare trait among most people.  What is the quickest way to make an employee not care any more?  Pay them lip service when they are talking to you about how to improve the company.  Show me someone who feels upper management has ignored them and I’ll show you someone who has turned “it” off, and is coasting through their job doing just enough to get paid and not get fired.

The feeling of people above you not caring about what you bring to the table can be a huge de-motivator.

Howard has a lot of knowledge about the radio industry, however, rarely is his advice sought or his ideas given any respect with regards to expanding the company.  Notice I’m not talking about giving him the direct power to implement his ideas, only a forum where his voice his heard and honestly responded to.

Have you been listening to Johnson and his ideas on how to streamline development?  Did you check out his ideas for implementing a more secure source control system?  How about that time he suggested improvements for the mentoring program?

Giving people respect is time consuming and difficult.  One wants to make sure any respect given is not given falsely.  People have keen ‘bullshit‘ detectors on a whole, so giving false respect is just as good as giving no respect.

Lastly, one wants to make sure they don’t give too much respect.

Give too much respect and one loses all ability to self-reflect; they become lazy, cocky, and all around, a general failure at their job.  As a manger you have to find the right amount of respect to provide and ensure your employees don’t grow a head so large it won’t fit through the front doors of your office building.

So Mel, what techniques will you use to re-motivate your own personal Howard Stern?  Will the right amount of respect appropriately given re-motivate an employee and help them re-discover their passion?

The Zappos Way

I’ve done it.

I’ve bought shoes online.

And I liked it.

First, let me be clear, I own roughly five pairs of shoes; I am not a shoe aficionado.  I have my sneakers, running shoes, brown shoes, black shoes, and my motorcycle boots…hardly a collection to make Imelda Marcos jealous.

However what I was missing was a pair of Nike Aqua Socks, (http://www.zappos.com/product/7525588/color/191561).  I haven’t been able to find them since I was ten, and I used to love them.  Sure, they never last a whole summer as the tops wear through, the soles have zero cushion, and provide almost zero traction, but I don’t care!  My memories of using them in my youth compelled me to find a new pair that would fit my now grown adult foot.

For the past few years I have searched high and low for the Aqua Socks to no avail.  That was until I was driven to try Zappos.com after reading an article about them in Inc.

http://www.inc.com/magazine/20090501/the-zappos-way-of-managing_Printer_Friendly.html

Sure enough, they had my beloved Aqua Socks and they were delivered promptly with a promise that if they didn’t fit I could return them with free shipping both ways.  I was delighted; I finally owned my long lost Aqua Socks in a size I could now use!  They arrived just in time for my recent trip to the Poconos for some whitewater rafting.

My foot needs aside, Zappos seems to be generating a lot of interesting press and buzz on the interwebs as of late.  What sets them apart from all of the other Web 2.0 companies out there?  As I, and others, have said in the past, all they do is sell shoes.

Primarily the focus of the Inc. article and other postings is the amazing customer service, the freedom phone reps have to meet your needs, and the free return shipping if something doesn’t fit.  In my mind all of the customer service policies and practices that everyone is praising Zappos for are all necessary evils of selling shoes online.  Zappos is attempting to fulfill a shoe need, a need filled by delaying actually acquiring of said shoes by a day or two since they need to be shipped.  With this delayed gratification Zappos needs to step it up in terms of customer service over traditional brick and mortar stores to survive.

Let’s face it, if Dick’s Sporting Goods carried Aqua Socks I wouldn’t have thought twice about hopping in the car and driving the ten minutes to the mall to have them that day.  I like the mailman and all, but I’d rather not be waiting by the door for him to arrive with a box full of shoes.  Call me impatient, but when prices are about the same online vs picking up in the store I choose the store nine times out of ten.

What caught my eye in the Inc. article wasn’t, in my mind, the baseline customer service I believe a company like Zappos needs to thrive, but rather how they go about interviewing new hires,

Prospective hires must pass an hour long “culture interview” before being handed off to whatever department they are applying to. Questions include, “On a scale of 1 — 10, how weird are you?” and “What was your last position called? Was that an appropriate title?” (The first question makes sure that employees are sufficiently weird; the second, in which the interviewer is trying to goad the applicant into grumbling about his or her title, tests for humility.)

Spending an hour or so interviewing for ‘culture fit’ is a very interesting angle to explore in job interviewing.

I’ve gone on at length about my interview process, (http://benjaminhysell.com/archive/2009/02/the-technical-interview/), however unlike Zappos, I’ve never placed so much emphasis directly on culture fit.  I tend to focus on passion…does the interviewee have passion for our craft and life in general?  Normally, while exploring someone’s passion we get a pretty good sense of who they are, what they are going to be like on a day-to-day basis, and we as an interview team can see if the prospective new hire is going to click with the team.

Lately I’ve been wondering if I should retool my interview to further explore ‘culture fit’ not only from a passion perspective, but by some other measure needed in our industry.  What that measure is I’m not so sure.

I can think back through college and high school where group work was key to many projects’ success.  Have you ever found yourself in a group of people where personalities just didn’t mesh?  I have worked in a few bad groups from time to time, and compared to groups where I worked with friends the experience of working in a group where we didn’t have a great ‘cultural fit’ was not as much fun.

I took a class at SUNY Binghamton in artificial intelligence my senior year of high school with a group of college seniors.  It was spring semester for both the college seniors and me, so we all had senioritis.  However, while they were heading off to real world jobs at the end of the semester, I was heading off to Cornell to start my college career in the fall.  Let’s just say being 18 years old and hanging out doing a group project with college seniors was an amazing way to spend the spring semester.  I had a lot of fun, but that was only after we cleansed the group of “Rick”.

The class was split into groups of four, and our group happened to be a group of five.  We were to implement a 100 node feed forward neural network as our final project, a task we were well prepared to code and implement.  What we were not prepared for was Rick.

Rick terrorized the group.  I’m not sure which was worse, Rick taking tasks and never completing them, or failing to show up to 95% of our group meetings.  The four of us who were not named Rick had to spend a lot of calories doing Rick’s work, trying to track Rick down, and in general dealing with ‘The Rick Issue.’

It’s physically and emotionally draining always picking up dropped tasks and trying to chase someone down who doesn’t want to be found.  Not like Rick couldn’t do the work, he was more than capable, however we didn’t share his work ethic nor he ours.

Now picture yourself today in your job and take a Rick, if you don’t have one already, and inject him into your normal daily working life.  My Rick was gone two weeks after the project started, as he was removed by the professor from our group, however a real world Rick maybe impossible to remove from your daily life.  Are you looking forward to Monday knowing Rick is going to be there now?  I wouldn’t be.

Life with a Rick is miserable, and from the article it appears Zappos makes a huge effort to ensure Rick never gets through the interview process:

If there is a disagreement between HR and the manager doing the hiring, Hsieh personally interviews the candidate and makes the final call.  His strategy is to get the applicant into a social situation to see if they can connect emotionally.  Alcohol often figures in the hiring process.  “I had three vodka shots with Tony during my interview,” says Rebecca Ratner, Zappos’s head of human resources.  “And I’m not atypical.”  I asked Hsieh if this wasn’t exposing the company to unnecessary risks.  “It’s a risk,” he says.  “But if we’re building a culture where everyone is friends with everyone else, it’s worth the risk.”

For my college project we never had a chance to conduct an interview.  Could we have figured out Rick would be a problem with a bottle of Jack and a couple of shot glasses?  Should a social situation with a few drinks and attempting to identify an ‘emotional connection’ be the tie breaker in an interview?  Can you scale this process as your company grows?  Could this be implemented at Apple or IBM?  How different would corporate America be if most job interviews started and ended in a pub?

For now I’m going to sit back and watch the Zappos story unfold.  We already know for most of the working world the non-alcoholic approach to hiring works pretty darn good.  We’ll see how Zappos fares in the long run, and what side effects hiring for culture will have as the company ages and their core culture changes.

I’m hoping for the best, I wouldn’t mind sitting down and relaxing with a nice tasty beverage the next time I conduct job interviews…a taste beverage and maybe a plate full of nachos.

Understanding the Wheel

I hate reinventing the wheel.

The phrase ‘reinventing the wheel’ is tossed around in software development, as it likely is in other professions, to signify you are probably doing something someone else has already done.  Moreover, others who have solved your problem have hopefully had a chance to iterate on the solution several times to find an optimal answer.

With all this time and effort invested by others why bother trying to duplicate all that effort?  After all, others have already solved your issue, no sense trying to out do them, is there?

Like all issues, reinventing the wheel in software development is not so black and white.

Jeff Atwood wrote about not reinventing the wheel unless you intend to learn more about it: http://www.codinghorror.com/blog/archives/001145.html

Joel Spolsky wrote a few years back that reinventing the wheel is a very good thing if that wheel happens to run your business: http://www.joelonsoftware.com/articles/fog0000000007.html

It is these two key points that will hopefully dictate when you as a software developer decide to break out the case of Mountain Dew and start coding your problem from scratch or to pull a code snippet off of http://stackoverflow.com/ and plug it into your production code.

I am a huge proponent of not reinventing the wheel.  I used to expound to my developers constantly that I am a very lazy programmer.  Why should I spend the time and effort to code something up from scratch if someone has already done all of the legwork?

What isn’t normally fully communicated to someone when I say, “be lazy and don’t reinvent the wheel,” is you have to understand the wheel to know that you are reinventing it.  This is the point Jeff makes at the very bottom of his article, http://www.codinghorror.com/blog/archives/001145.html:

If anything, “Don’t Reinvent The Wheel” should be used as a call to arms for deeply educating yourself about all the existing solutions — not as a bludgeoning tool to undermine those who legitimately want to build something better or improve on what’s already out there.  In my experience, sadly, it’s much more the latter than the former.

I get to be lazy, reuse my old code, and not reinvent the wheel because I understand the wheel I am about to not reinvent.

I have done a bit of legwork myself to understand the piece of code I am about to plug into my system before choosing to plug it in.  I have done some research on the forms to see how others are tackling the same problems I have, and I have done some testing to ensure what I am about to use is going to work.  With all of this legwork under my belt hopefully the next time I encounter a similar problem I won’t have to work so hard for a solution, in effect be a little lazy and modify or tweak an already existing solution to use in a new problem.

It is with this experience that one can become truly effective at producing robust software, learn from the past, and not treat every problem by starting with a blank sheet of paper.

However, one also needs to be smart enough to know when to break out a blank project in your IDE and start from scratch.  As Joel points out in his article, if the piece of code you are about to borrow is a key piece of your product, and this code is going to differentiate your product from your competition you might want to get to know the ins and outs of that code yourself.

What do you do in your software or business that sets you apart from everyone else?  Whatever that is, don’t outsource it or borrow it from others!  If you do you are at the mercy of others for what you are claiming is your advantage.

Joel gives several examples in his article of items not to outsource those items are the cornerstone of your business.  One more recent example Joel did not reference was Zappos.

Zappos sells shoes online.  That is their whole business, online shoes.  Not special fancy shoes you couldn’t buy a hundred different places, just normal run of the mill shoes.

Yet, they are one of the more successful companies operating today on the Internet.

http://www.inc.com/magazine/20090501/the-zappos-way-of-managing_Printer_Friendly.html

Zappos prides themselves on their customer service and quick and speedy order fulfillment.  Guess what are the two things they don’t outsource?  The one part they can’t outsource, the actual delivery of the shoes to your door, they compensate by paying out of their pocket for overnight delivery on most orders to give the end user the allusion of faster than normal service and fulfillment.  Zappos has taken to heart the idea of what sets them apart from everyone else is customer service, and they do everything in their power to ‘reinvent the wheel’ when it comes to that.  They are reinventing the wheel to make a better wheel, a wheel more and more people are starting to use.

I leave you with these thoughts:

  • Don’t reinvent the wheel.
  • Understand the wheel well enough before making a judgment call to reinvent it or not.
  • If the wheel is the corner stone of your software/application/business, you had better be reinventing the heck out of that wheel.

Your Baby is Ugly

I’m not kidding, you have one ugly baby.

Its not your fault…well probably not your fault.

Did you drop him a lot in the first few weeks you brought him home?

No?

Hmm….

I’ve never personally had this conversation with anyone,

::Two points

  1. Yes, I’ve seen this done on Seinfeld…if you haven’t watched Seinfeld go grab a copy of the complete series.  It still holds up.
  2. I actually did see someone tell somebody their puppy wasn’t cute…so sort of in the same vein as telling someone their child is ugly.  Needless to say, “awkward” doesn’t being to describe the mood the conversation took on.

I digress…::

I’ve never seen anyone tell a parent their child is ugly, however, when it comes to creating software, I advocate telling people who write ugly code that yes, indeed, your code child is ugly.

First, for those of you who don’t design software and write code for a living a little background on the parent/child relationship people have with their software.

Software, like children, requires massive amounts of time and energy.  You, as a designer/architect/coder, conceive the code, often times starting with little more than a blank page.  From there, you outline the basic functions of your code, you test your code to make sure it meets specifications, and you clean up your code to ensure it follows all of the best practices dictated by your company.  Hopefully, in time, when your code is completed you can send it off to play with all of the other code in the system.  With any luck, you’ve written a good piece of software that is well behaved, has good manners, and is robust enough to function for many years to come with very little maintenance.

However, with all of the work that goes into the code sometimes it just turns out ugly.

What is ugly code?  Ugly can be described in so many ways…it could be:

  • Inefficient, taking way too long to perform simple tasks
  • Overly complex, possibly a piece of code performs a task in 50 lines where if someone took some time with the code and refactored it the same task could be performed in 10.
  • Incorrect, not producing the correct results.

This is by no means a complete list, but a small sample of items I have run into in my career.

Like anything anyone spends any amount of time with people often grow attached to their output.  With such an attachment people do not take kindly to having that output being called ugly, be it real life children or code ‘children’.

However, as I have said, it must be done…

To their code children, not their real life children…. geez you are a monster.  I’m not sure you should continue reading this blog…

If you can control yourself and your urges for calling kids ugly please continue, we have much to discuss.  Otherwise, I bid you good day.

How you tell someone they write ugly code is up to you.  I don’t advocate sending a company wide email letting everyone know that Johnson can’t write a for loop to save his life, and he would serve the betterment of mankind if he never touched another keyboard.  No, that’s just mean.

Nor would I post their code on the refrigerator and write a large ‘F’ on top of it with a red sharpie…although humorous, after sending that first company wide email Johnson may get the impression of not only do you think he is a horrible coder, but you might not like him either.

No, I’ll leave the delivery of the bad news to the parent of the ugly code up to your discretion, but something must be said, because lets face it, that ugly code child is going to grow up and become your whole team’s responsibility.

Failing to correct ugly code when it is first generated leads to all sorts of problems and heartache.  Firstly, for you, you will likely be the one on call when the code begins to fail in your company’s application, and it will be up to you to fix it at 3am on Christmas Eve.  You will be up all night attempting to track down the module that is failing, and once you find it you will attempt to get something working as quickly as possible, because every second the system is failing your company is losing money.

This is no way to conduct a career…working under the gun to fix a problem, hopefully you didn’t cause.  Especially if it could be avoided by telling the original designer they created one ugly child, and you, for one, do not want to support it when it starts misbehaving and throwing a temper-tantrum.

I recommend several steps in approaching and telling someone they have just written some ugly code:

  • Come out and say, ‘I’m not calling your code ugly, but we need to talk about how you implemented requirements x, y, and z.‘
  • Lay it on the table that there are concerns about the code, not the person who wrote the code.  Attempt to separate the parent from the child.
  • I suggest approaching this situation as a learning exercise.  Point out why you believe the code, although possibly technically correct, has room for improvement.
  • Make sure people know during this exercise this isn’t an indictment on their ability to program or create working algorithms, it just so happens this one isn’t up to snuff and needs some work.  The important point is to stress this isn’t personal and you hope to fix the code to avoid problems in the future.
  • Be able to back up your suggestions on how to fix the code with industry standards.  Share with the individual why you believe their approach isn’t quite correct and show how it is done everywhere else in the industry.  Even if you don’t have Johnson’s full respect it is very difficult to argue with how the rest of the world performs a task.

Lastly, put others at ease around you by inviting them to call your code ugly.  Separate yourself from what you have created and attempt to learn from their years of experience.  It’s the ability to take criticism and to learn from it that will help you grow in your career.

Management Books are Bunk

This article was kicked up last week on Hacker News, http://news.ycombinator.com, and I thought I would share it here with the group.

The Management Myth by Matthew Stewart:

http://www.theatlantic.com/doc/print/200606/stewart-business

This is a long article…long even by my standards.  Set aside some time and curl up with your laptop and a frosty mug of your favorite beverage.

For those of you who find you can’t spare half a day’s time reading about management theory, and who can blame you, allow me to sum up a few of Stewart’s key points regarding modern business management:

  • Management books are bunk, don’t waste your time
  • Frederick Winslow Taylor, author of the Principles of Scientific Management, is regarded as the father of scientific management.  Steward describes how Taylor formed his management theories with a short story about a bunch of workers moving pig iron.
  • The story goes…ask a bunch of workers to perform a task as quickly as they can for a short period of time.  Take that data and extrapolate out what a worker could do in an entire day.  Lastly account for lunch, breaks, and rest periods
  • In this instance Taylor took precise measurements of how much work was being done over a short period of time, but when he accounted for breaks Taylor just picked a number out of thin air.
  • The question arises, why perform such detailed analysis of the work and then just throw a giant fudge factor into the equations when accounting for everything else?
  • Although most modern management books treat Taylor as a footnote in the history of management, at the core of all of these books are the same principals…appear to have a scientific measurement of how to manage people and then throw in a giant fudge factor to account for the ‘human’ aspect of management.
  • The article goes on to describe the work of Professor Elton Mayo in the 1920s, describing that if people care about what they do they will work harder for the greater good of the company.  This is the ‘humanist’ theory of management.

Stewart sums up these two viewpoints:

Between them, Taylor and Mayo carved up the world of management theory.  According to my scientific sampling, you can save yourself from reading about 99 percent of all the management literature once you master this dialectic between rationalists and humanists.  The Taylorite rationalist says: Be efficient!  The Mayo-ist humanist replies: Hey, these are people we’re talking about!  And the debate goes on.  Ultimately, it’s just another installment in the ongoing saga of reason and passion, of the individual and the group.

I’ve read this article a couple of times now, and have spent a considerable amount of time reflecting back on how I manage the people under me.  As I look back on my career I can recall instances where I have managed using both methodologies, I’ve been Tayloritte and a Mayo-ist, and I don’t believe I’ve settled on either side…I’m not sure I am supposed to pick a side.

I have to ask myself, what is the point of all of these management theories?  What are we actually trying to accomplish when it is all said and done?

From my vantage point it appears as if we are attempting to predict the future.  We are hopeful that if a person is given a task to perform, moving pig iron or writing code, that person can perform that task in a certain period of time.  Based on those estimates we can hopefully derive when the assigned task will be completed and when we can ship product.

I believe I’ve been reading the wrong books in a vain hope to predict the future…Stewart goes on to conclude:

The tragedy, for those who value their reading time, is that Rousseau and Shakespeare said it all much, much better.  In the 5,200 years since the Sumerians first etched their pictograms on clay tablets, come to think of it, human beings have produced an astonishing wealth of creative expression on the topics of reason, passion, and living with other people.  In books, poems, plays, music, works of art, and plain old graffiti, they have explored what it means to struggle against adversity, to apply their extraordinary faculty of reason to the world, and to confront the naked truth about what motivates their fellow human animals.  These works are every bit as relevant to the dilemmas faced by managers in their quest to make the world a more productive place as any of the management literature.

I think I’m going to take Stewart’s advice, I’m dumping my management books and I’m cleaning out my Amazon wish list this afternoon.  I am going to replace those books with books written by the greats.

Define greats however you like, and yes, Douglas Adams does count.

How Valuable are Yearly Reviews?

It is that time of the year again, where managers and employees alike sit down and attempt to sum up an entire year in a few short pages or less, in a little process I like to call “Writing the Yearly Review”.

I hate this time of year.

::change my voice to that of a child about to throw a tantrum::

Writing yearly reviews is all hard and stuff, they require a lot of thinking and work, and they take me away from architecting, writing code, and playing with cool toys.

::I suggest turning the child voice off for the remainder of the post, however go sick and leave it on…I leave it to the reader’s discretion::

Review preparation and writing is a difficult, tedious process that seemingly must be performed year after year.

::Or if you are a real glutton for punishment prepared every six months.::

Needless to say while I was toiling away on this years batch I started to wonder if what I was doing was providing real value to management or to the employees?  Do all of the man hours spent building the yearly review provide anything worthwhile?

Basically, why the hell are we doing these things, and are they needed in this day and age?

::Before I get too far let me go on record saying I have no idea what HR policies are in place nor do I know if there are any state employment laws that require some form of a yearly review.  Let’s assume no such laws/rules exist…:

First, some sympathy to those who write the reviews…have you ever tried to write one?

Try writing your own review for your last year at work.

Go on, give it a shot.  Here, I’ll provide the format:

  • Start with your goals from your last review.
  • Write down each goal and talk a little bit about how you went about achieving those goals
  • Write down some new goals for next year

Sounds simple enough…well except for that part about the goals.  Do you have clearly defined goals for your current job?  Do you know them by heart?  Can you rattle them off like the names of the people that make up your extended family?

Goal setting is a tricky business.  How can one sum up an entire year’s worth of guidance in a few short sentences that are not only memorable but actionable?

Say for the sake of argument, you do have clear and actionable goals.  Do you remember what you did during the last 12 months that moved you towards those goals?  What were you doing last January that helped you realize your goals?  How about last June?  What about last week?  What were you doing yesterday that moved you closer to your year-end goals?

Do you keep a detailed journal of your actions month-by-month, week-by-week, and day-by-day?  If not, what reference material can you pull from to show you were working towards your goals?

Anyone can write in generalities, “I worked with Johnson on the Widget Tester Project, we both used our communication skills to fully execute the project last March,” but statements like these hardly contain enough detail as to what skills you actually used and how they made the project better.

::Pssst…keep a journal, summarize on a daily, weekly, and monthly basis.  Not only does this CYA in the event something goes wrong, you can always look back fondly on all of your accomplishments at the end of the year and put them in your scrap book.  You do scrap book don’t you?  Doesn’t everybody?::

Ok, let’s further pretend you had goals and you had material to show progress on your goals.  What are your goals going to be for next year?  What should you be doing for the next 365 days to better yourself and “move up the corporate ladder”?

Does your company have a ridged corporate structure?  Is there a clearly defined path to move up to the next rung in the ladder?  Can you simply do X, then Y, and finally Z?  What if projects fail to materialize where you could have done X, Y, and Z and you end up doing A, B, C, and D?  Will you be an automatic failure at your next review because no opportunity existed for you to attempt to reach your goals?

We could set out some general goals…“work on public speaking skills,” “become an expert database modeler,” and “become a highly skilled assassin.”

You can set out some general goals, but why bother?  General goals are rarely actionable nor memorable, and the opportunity to work towards those goals may never materialize in the coming year.

To recap:

  • You likely don’t have very good goals from the year before.
  • You likely don’t have the material to backup your poorly written goals.
  • You can’t predict what your future goals should be nor can you write them to be actionable or memorable.

Based on this likely reality you are living in why write a yearly review?

“But Benjamin,”

::I hear you yelling at your monitor…didn’t know I could hear you did you?  You don’t think Apple puts all those mics on all of those computers and leaves them turned off do you?::

“…I actually have great goals that I have worked towards, I have lots of material to back them up, and we have done a great job creating goals in the past, we should be able to create some new goals this year.  Why not write that yearly review?”

Yes, why not indeed?

See, here’s the rub…this yearly review I’m about to write for you, the one you are begging for me to produce, is going to take quite a few man hours to generate and is late by about 364 days.  The review will contain no surprises to either one of us, and frankly if there are a bunch of surprises in the review neither one of us is doing our job very well.

If your car was making a horrible metallic clicking sound every time you drove to work would you wait for your annual inspection to have someone look at it?  If so remind me not to buy your car second hand even though you say it is in great shape, and you are letting it go for thousands below the blue book value.

Real problems are tackled on the day the occur, or hopefully soon after.  Even minor problems with automobiles don’t fester for long before, hopefully, they are attended to. If your car’s windshield wipers were about to go, how long do you wait to replace them?  It may not get done the next day, but it also doesn’t take a year to go get the item fixed.

If someone is kicking ass for me on a project or job I let them know then and there.  I want to reinforce all good behaviors, skills, and/or commitment while it is happening.  I don’t want to capture it in a note and bring it up a year later…by that time all of the luster of the good “event” has worn off, and recognizing it a year later may actually be insulting.

I say the hell with the yearly review, if you manage people let them know on a regular basis how they are doing, good and bad.  Don’t wait for some arbitrary date a year in the future and attempt to create a document that takes lots of man hours to produce to deliver news hopefully you and your employee already know.

Plus, with this new system in place I won’t have to write your review anymore, I don’t have to use my child tantrum voice, and I can go back to architecting, coding, and playing with cool toys.

Very Strong Opinions, Very Weakly Held

You know, I wasn’t always in a management position at Viewpoint.

It’s true.

Shocking, but true.

I am, as I type, actually in charge of people, they report to me!  I am all-powerful over my minions!

::insert evil laugh here, maybe a thunderclap in the background…a few streaks of lightning…::

BOW BEFORE ME, MINIONS, AND DO MY BIDDING!

This style of management, the ‘cartoonish evil dictator’ works for very few companies and people.  I am not at one of those companies nor am I one of those people.

I fancy myself a leader…I’ve been captain of my fair share of hockey teams, editor of my high school newspaper…

::Although to be fair, to those who knew me back then, the newspaper was turned into my own personal opinion page where me and my ‘editorial board’ would rant and rave about the school.  It was my hypothesis no one was reading the paper when I took the reins.  I then theorized we could print almost anything and not get a rise out of the student body, and in the process have some fun by printing outrageous opinion pieces where we could practice our comedic chops.  In the end, we created a very interesting dialog between the different grade levels that was not only fun to write, but actually had people reading the paper again.  I digress…::

…and I’ve lead a few group projects in my time.  I’ve also coached college hockey for a few years, http://rso.cornell.edu/clubhockey/history.htm, so I’ve been in positions of power before, but before becoming a manager at Viewpoint I never held a position of power in a professional environment.

Through all of these positions I felt, subconsciously, I had worked out a ‘management style’, but consciously I don’t think I could explain it to myself.  As I moved into my new position I felt it was high time to figure out exactly how I had led and managed in the past, and figure out how to explain it to others.

One might ask, “Why bother explaining yourself?  Just get out there and manage like you have in the past…the people you manage will either get it or they won’t.”

I argue they might get it.  People, given enough time, might figure you out, and how you work.

But why make people go through all of that work?  Why would you want to make people ‘figure the riddle of you’ out?  Why not just tell people what you expect of them and how you are going to manage them?  Why not make it a day one ritual when someone joins your team to let him or her in on your expectations and your management style?

“Hey Johnson welcome to the team!  I’m going to expect X, Y, and Z from you and you can expect me to manage you using the ::blank:: technique.”

It took me a while to search back through my previous leadership and management positions to find a common thread of techniques that worked.  In my search I found all of the usual techniques, you know the techniques that one would find in any given management book…be a clear communicator, set expectations, yadda, yadda, yadda.  Basically, one will find quite a few common threads between a given set of management books since each one of these threads all work to differing degrees.

Check out the bookstore in the airport next time you fly, if you doubt me.  Airport bookstores have to have the single highest concentration of management books in the known universe, and they are all almost interchangeable.

It actually wasn’t until I read a post by Jeff Atwood (http://www.codinghorror.com/blog/archives/001124.html) that pointed to a post by Bob Sutton (http://bobsutton.typepad.com/my_weblog/2006/07/strong_opinions.html) where I was able to pull everything together for me:

I have very strong opinions that are very weakly held.

I am now able to tell people on day one when they join my team, “Johnson just so you know when we start working together I have very strong opinions that are very weakly held.”  During our day one introductions I can clear up many potential misunderstandings between Johnson and myself with this one statement.  I normally go onto explain as Bob Sutton does:

  1. I have found when you have a strong opinion people are willing to challenge you, do their research, and invest themselves into their counter position.  A weak opinion does not inspire anyone to bother…why bother putting in all that effort to fully form a counter argument if you can change someone’s mind with minimal work?  What if that minimal work doesn’t undercover the flaw in your own argument?  The opportunity for discourse back and forth is lost when you hold a weak opinion.
  2. I say my opinions are weakly held so that I may change my position when I am presented with a different point of view.  It also means I’m willing to listen to the other side, and I’m open to discourse about the opinion.  A strong opinion strongly held is just as bad as a week opinion, no one will bother challenging someone if they know at the end of the day no matter what they say nothing is going to change.

Take for example Rush Limbaugh…if you’ve flipped around the AM dial at all in the past few years I’m sure you’ve heard him one or two times.  I am not fan, I made up my mind about his radio show a while ago from the little bit of his show that I heard.  I decided it just wasn’t for me.  However, what I did hear was someone who had very strong opinions that were very strongly held.  If all of my opinions were counter to Rush’s, and I had all the time in the world to attempt to change his opinions I don’t think I could do it.  All the political discourse in the world with Rush would not change his mind on any one political topic.  In my opinion, I believe he is set in his ways, and any attempt to change his views would be a very difficult task.  Would you be up for it?

I know I’m not because my political views are very weakly held.  Yes, I have some political views, but I don’t hold them strongly enough to take on Rush and try to change his mind.

In this scenario, my weak opinions weakly held going up against someone who has very strong opinions very strongly held doesn’t provide much opportunity for discussion and explorations of any topics.  The discussion would likely go nowhere and accomplish nothing.

Now flip the tables, I have very strong opinions on why someone might buy a Mac laptop over a PC.  However, I also know that Macs do not fit everyone’s needs and I’m open to discussion on what may work for someone or even myself the next time I’m in the market for a new laptop.  I have a strong opinion, but I hold the opinion weakly enough that I could talk to someone about different possibilities, and I may even change my mind.

It is this ability to discuss an opinion and possibly change someone’s mind that fosters an environment of innovation, and a comfort level among colleagues where productive work can be accomplished.  This is the environment I set out to have within my team.

The results for my team and me have been good.  I feel we have very open working relationships where ideas are challenged and discussed knowing that all of the strong opinions are held weakly enough that someone’s mind could be changed.  Knowing that others are listening to you is a huge motivator to continue discussions and to come to consensus on any given topic, be it politics or designing software.