The Petty Officer School of Management

I am the son of a former United States Naval officer. I am a Navy brat born and raised. A lot of the values I hold, come from the US military. Last August I found a website that sells military related apparel for MMA training, totally random. As I perused I came across a shirt( which is displayed above) and the description(copied below) got me thinking a lot about how I manage my team.

Right now, as you sit here, there is a team of sailors on 30 foot seas, underwater in a tin bubble, or about to kick down a door and meet the enemy. There is a young petty officer leading this group. He's no more than 21 or 22 years old. Odds are he is the first man in the stack even though that's not his job, because he can't bear to ask his guys to go in first. Before they arrived at the house he was encouraging his men, running through the steps, reminding them how it was all going to go down. Before that, at base camp, he was checking their equipment, ammo, and weapon. Back home, before they even came to this God-forsaken place he was pushing them through training, reminding them that one mistake could mean their deaths, carrying that burden on his shoulders.
But he isn't alone. He has mentors too. His leader, only a couple years older has probably spent 2-3 years of his life at sea by now. Older than his 24-year-old appearance by a long shot, he is not going to let his men down. He is going to have the most prepared group of sailors in the Navy.

If he doubts that for a second, his Chief, that crusty E-7 the movies are so prone to lionize (and rightly so for a change) is right there to kick him in the ass. He runs this crew, and on top of that, has to train a cocky 22-year-old ensign to not be an idiot and get his men killed.

He reports to the lieutenant, but his real boss, the Senior Chief, is there to back him up in every way - making sure his guys have everything they need to survive and thrive, whether it's food, ammo, rest, or recognition.

Watching over it all, maintaining the discipline of the Navy, is the Master Chief. He looks haggard and salty as hell, but still spry for his age. He's seen it all. He's been there, done that, and had more t-shirts than this whole damn company. He's forgotten more about Davy Jones Locker than we all know. And he's quietly confident in a way an Admiral will never understand.

He wasn't shooting for Master Chief the way many officers plan on being Colonels or Generals and start networking from day one. All he did his entire life was take care of sailors, whether it was his battle buddy when he was a scared seaman at basic or his ship now.

The best part is that he still doesn't think he deserves it.

God bless the NCO.

What I took away from this

1. Your priorities are: 1. The mission, 2. Your men, 3. You. In that order. You make sure your men are moving the mission forward, You take care of your men, then you worry about yourself. Period.I make sure my developers are making forward progress and compensated properly before I consider asking for compensation.

2. Protect your men at all costs. Be the first one through the door. If I can shield my guys from bullshit, I will.

3. Never ask your men to do something you wouldn’t do yourself. Despite having a director title, I still code 80% of my time. Eventually that will change as the organization gets larger. However if we are ever in a jam where we are seriously short handed, I will have no quams or complaints about throwing myself into code again instead of letting one of my guys working a 100 hours/weekfor a month and being so burnt out that they can’t continue.

4. Train the guys below you. You never know whats going to happen. You could get hit by a bus. You may have to get major surgery. You may just quit. Make sure someone knows how to do what you do. you may be MIA or KIA, but the mission must continue.

Postscript

I wrote this shortly before I left on a working holiday to my parents for christmas. I showed it to my father. I’ve had a hard time coming up with a way to end this that doesnt sound snotty or preachy. So i will just end it with a joke my father told me after reading it.

A master chief petty officer died the same day as Pope John Paul II. The pope was shown to his room with a humble palette, was provided with good food, and full access to the libraries and entertainment that only heaven could provide. He looked out his window to see a great ruckus out in the streets. There was a man with a beer gut, smoking a fine cuban cigar, with a bottle of whiskey in his right hand and an unimaginably attractive woman on each arm. they were sitting in the back of one of the most beautiful caddilac converibles anyone had ever seen driven by none other than Saint Francis. Not irate, but enervated, the Pope did not go straight to the top, but rather to Saint Peter. "Peter, I dont understand, I am not asking for fanfair, but why does this man get a parade?"
"You see John, we have all the Popes except for a few. This is our first petty officer."

I hope someday to make it to Master Chief of my own profession.

Happy Holidays

Dec 20, 2011

Development Environments for the “Prosumer”

I had a friend, who I would consider a fairly technical guy who programs for fun, but not an engineer by trade, recently ask me how I setup my personal dev environment. I was a little taken aback by the question, because honestly, I employ most of the techniques I use professionally, be it at a much smaller scale and don’t really think about it all that much. So as an homage to him, Below are a few of the tools and methods that I use both personally and professionally in building and maintaining Development Environments.

Tools

Virtualization

I evaluate a lot of software. I would prefer not to install it on my native hardware where it may be difficult to extricate it or may not be compatible with my operating system. So I make use of virtualization for evaluation and various environment setups. I personally use Oracle Virtual Box, but Parallels, VMWare, or Amazon AWS EC2 (if you have stay mobile and don’t lug around a heavy metal MacBook Pro like I do) will work as well.

Editors

This where I may start a holy war. Use whatever editor you want, if you like a nice shiny IDE, go right ahead. If you like something more stripped down like vi or emacs, go right ahead. if you like something in the middle, thats fine too. use something you can feel comfortable in.

Source Control

Always use source control. Period. Even if its a plaything, when you want to make changes to something a week later when you realize its wrong, its 100x easier to rollback to the last working thing and try something else than to try and get rid of the problem code. I use Git and store things up on GitHub or Bitbucket, depending on my mood.

Build System

Use a build system like source control, it will save you a ton of time when you have to walk away and come back to something. I leave some projects for months and come back and the first thing I do is look at the build system. Use the build system that is appropriate for the language you work in( For java use ant/maven, for ruby use rake, etc)

Testing

Write Tests. this will make it easier to verify something still works after you change it. this seems like a no brainer to me, but if you’re just “hacking” something together and don’t write tests, you will kick yourself months later when you go to change something or try and adapt it into something else.

Methods

Keep base VMs, and take snapshots along the way.

I keep a set of base VM images with various operating systems and patch levels. when I need a VM, I clone it( in some VM platforms, this is as simple as recursive copying the VM’s folder and renaming it), install the software I need on it, then use the VM platform to take a snapshot of the VM state so you can go back to a clean state at any time( this is particularly useful for things like databases).

Keep base projects and build systems

This one is from spending may years creating the same thing over and over again when I go to a new job or creating some thing new at home. whether its a ruby gem, a java jar, or a c library, put together a standard directory structure and base build system that will do the basics: clean, compile, package, and save it off in source control. This makes starting new project infinitely easier

Never install a new language your native hardware.

Read this as I don’t trust RVM. If i want to experiment with a new language or build, I stick it on a VM to test it out. I share a folder with my VM that contains the source code I want to test and that way i can use the editor on native hardware and the language in the VM. if it doesn’t work, I roll back the VM to a previous

monday.sh or morning.sh

This is a habit I picked up while working at Apptio. If I am working with a team and there is a lot of daily commits( which in my opinion, there should be) you’ll need to get them, make sure they merge, make sure all the tests still run, and update the generated documentation. Sometimes for really large projects this can take a while. I write a script called monday.sh that will do a full merge, build, test suite pass and documentation update. I fire this up first thing monday, then go check email or get myself a cup of coffee/tea. When I come back, my environment is ready to start the week.

Keep secret scripts and a solution log.

Sometimes, when you need to do a specific thing, whether its unique to your environment, or a particular service, you write script for it. check it in to source control. Also, it you write a nifty function, data transform, or class to do something very specific, keep that in a solution log. I used to use Evernote for this but now I’ve started to migrate to GitHub Gist.

Parting thoughts

You can go as hog-wild on this as you want. I have seen some pretty elaborate setups. I have even gone overboard once or twice. However, don’t let development productivity pr0n keep you from creating awesome things.

Nov 17, 2011

I am the 1%

in response to http://wearethe99percent.tumblr.com/

I am 29 years old.

I have worked since I was legally able to hold a work permit. I sold books, fixed watches, anything I could that would keep me in lunch money, since my parents really couldn’t afford it.

The same year, I was diagnosed with a rare and painful kidney disorder that will plague me my whole life.

I grew up with a father who had to work 800 miles away from me and my sister while still being married to his wife, my mother because he couldn’t hold a job anywhere close.

I graduated high school after being accused of being a member of the trench coat mafia and being harassed by fellow students and school administration

I went to college, but not to my first choice, because even with a full ride i could not afford it.

I created a research program in my chosen field, where none existed before.

I graduated with honors and 15k in student debt, I paid for the rest by doing work on campus and summer work teaching in my chosen field.

I was offered a job across the country and with next to no money in my pocket, moved to seattle from the east coast

I was fired 9 months later.

I was unemployed for 45 days and considered running back home, but I didn’t. I stuck it out.

I was picked up by what I thought was a growing company. My boss resigned the day I started. They closed shop 8 months after I was hired.

I took a risk and went to work for a small company with a big idea. we sold it for 60 million dollars to another company which then sold to another company for 1.2 billion. I quit.

I went to work an even smaller company with another big idea. Three years later, I left when it was almost 200 people.

I am now number employee 5 at a company started by my friends. The success or failure of myself and 10 other people rests in my hands.

I do not complain, I do not regret.

I take risks, I reap the rewards.

I don’t look for someone to give me something, I create opportunity where there is none.

I work.

I am the 1%

Oct 07, 2011

My Summer Reading List

Summer has passed by very fast this year and I can barely tell you where it has gone. I hit the ground running at Simply Measured back in June. This was quickly followed up by Barcamp Seattle. Then I dove head first into my work, the fruits of which will hopefully be released soon. During my sebattical and as I’ve had time, I have started making my way through the books on my shelf that I have had no time to read in the past or that I really wanted to reread. I am not going to present any commentary on them, just to say they are all worth a read.

Aug 14, 2011

Soccer for the Uninformed, Part 1: Leagues and Tournaments

I have several friends who cant grok my love of futbol( nee soccer). The fact of the matter is, it is one of the simplest games in existence. All you need is a ball and a goal. Not too different from life really. But I have found a lot of people I talk to in basic conversation get tripped up on several aspects of the game, among them, the multiple layers of what has become the international sport (Some people say its the rules, but that’ll be for another post).

Futbol competition can be divided into three parts: League play and tournaments play, and friendly play. League play is very much what you would expect, teams representing cities or municipalities, vying for a league championship. However very much unlike American football and very much like baseball, countries may have one or more leagues, at varying levels of recognition and prestige. Typically, when you see a team traveling internationally, like for example, Manchester United, they are coming from a Major league in side of their respective country.

Tournament play in futbol is a multi-tiered affair. Separate from league competition, tournaments are held at national and international levels. These tournaments can also can have preconditions about participation and winning of other tournaments. To explain this, I will use examples of various club tournaments and how they interrelate.

To start lets use an american soccer team, the Seattle Sounders FC. the Sounders enter a national tournament, the U.S. Open Cup. This tournament is open to any competitive team. After competing fiercely against other teams from around the country, some that also participate in Major League Soccer and some that are in lesser leagues, they win the tournament. They hoist the cup, get the ticker tape, and everyone goes home. Because they won that tournament they have also qualified for an continental tournament, called CONCACAF Champions League. This tournament is held by the international futbol organization FIFA’s north american arm, CONCACAF( which stand for Confederation of North, Central American and Caribbean Association Football). Now the Sounders would play the winners of other National club tournament from other countries like Canada, Mexico, or Panama in this tournament.

Lets say, the Sounders win CONCACAF Champions League. This would be great, but they wouldn’t be done yet. Winning Champions League would qualify them for yet another tournament, the FIFA World Club Championship. The participants in the World Club Championship are the winners of each of the regional tournaments, like CONCACAF. this allows the best clubs in the world to compete against each other to determine the best club in the world.

Finally, there is the friendly match. A friendly match exists outside of league and tournaments. The clubs play for the fun of it, and for their fans enjoyment. Much like a pickup game, there are no extra periods, no sudden death penalty kicks, they play with the time they are allotted and everyone goes home. Why watch a friendly? Because you may see clubs you might not see otherwise compete against each other.

I have noticeably left out things like the U.S. Men’s National team and The World Cup. I will discuss these in another post.

I hope this explains some of how the various forms of play take place. a lot of this can overlap. there is a lot to watch, and its a lot of fun.

Aug 07, 2011