Ugly Source Control Trees

My best experience with source control trees have been in shops that didn’t have them to start with. At that point you have a blank slate and you can do a reasonable job of organization. The ones where they used to have VSS and migrated into CVS and then Clearcase are generally just a mess. You have a lot of historical junk that’s poorly organized.

My current situation is messy:

  • The first source control system was VSS. Unfortunately a few projects are still stored there as there was not a wholesale migration.
  • Perforce was brought in next, but largely the organization was organic instead of organized. Despite being a commercial solution I’ve actually found Perforce to be a reasonable source control system.
  • Despite being deployed on a UNIX box many of the directories including top level directories include spaces. This causes a nasty issue with the Perforce plugin for Hudson where you can’t use the plugin because it refuses to escape a directory with spaces correctly.

Our eventual solution is to migrate to subversion or maybe even git. Unfortunately we have to live with the current pain for now.

Email Effectiveness with Inbox Zero

After one of those weeks where emergency after emergency cropped up between meetings I let my inbox get out of hand and left emails sitting in them as todo items. I’ve been a GTD follower for about 5 years now and I start to really feel out of control when my inbox is piling up. I know I’m re-reading the same email for the third time, but I fall into a hypnotic state.

Yesterday, I made a point after getting in early to really drill my inbox down move actions onto my lists. 171 emails later I had cleared everything dating back to 3 weeks ago. Freed of the mental distress of an overloaded inbox I’ve gotten more strategic items done in the last two days then I did all of last week. On top of that I’ve pushed along a wealth of issues that had been idling for weeks.

And the best part is I’m back to quick email sweeps 3 times a day to keep my inbox clean. If you’re one of those people who live in a 10,000+ inbox you might want to go back and read Merlin Mann’s articles on Inbox Zero.

Autotest Migrating to Java World

Some recent signs of continuous testing coming to Java land:

  • Grails 1.1 features 9 new features including #9 Continuous Testing.
  • Kent Beck is developing JUnit Max an Eclipse plug-in that runs tests in the background optimizing for the tests that are most likely to break.

Autotest was a joy to use when I got to spend more time playing with Rails. Maybe I won’t have to miss it that much longer.

Continuous Integration and Audits

Audits are easy to pass. You have a documented process. You have a pile of documentation that shows that you followed the process. An auditor independently validates the documentation. Much like running your suite of tests on a CI server.

In an average IT shop you may even have audits of your software process. Recently I used our CI server to help streamline the audit process. We actually had a formal document for unit test plans and unit test results. I value the idea behind the documents, but I don’t know that filling out the Word template was going to accomplish much beyond passing an audit finding.

Upon a request I simply sent a URL over to the PM on the project. It just pointed to that particular project’s JUnit test case reports. That URL should be constant through the life of the project. Now you have documented real time evidence that unit tests are being written and executed. Your CI server can make life easier for auditors.

Developing a Bench

Building a solid bench involves years of preparation with no immediate reward. Hiring a team from scratch is a beautiful dream. I got to do it once at a startup before I had much experience as a manager. In many ways I’d love to re-live that experience, but I haven’t worked at a startup in almost 10 years now.

If you’re not at a fast expanding startup you’re hiring opportunities are going to be an uncommon occurrence. Unfortunately they’re probably the most critical aspect of your job. Nothing is more important than building a team with the right people. Management success is all about people.

Building your bench is the process of making sure when you do get the rare open req that you have some great people just a phone call or email away.

I’m still working on techniques here and my networking skills need to grow, but this has been the tips I’ve picked up over the years:

  1. Keep in touch with your high performers from previous jobs. Obvious, but this means you have to make a habit of making the occasional phone call or email and making sure you know how there career and life are going.
  2. Stay in the same area. I’ve violated this one before and it can hurt. I’ve worked for some great companies in the Bay area and in Las Vegas and had a good network of people in both locations. When I moved up to Sacramento 8 years ago I still kept in touch with many of them, but a remote bench just isn’t effective compared to having a local one.
  3. Attend conferences, local user groups, and meetups. Passionate software developers show up at user groups and meetups. The local java and ruby user groups have been a great source of motivated talent as well as a nice social gathering. And yes this means when the group goes out after the presentation you should tag along.
  4. Keep old resumes and interview notes. I’m in a medium size city, but there are only so many software developers in a town this size. You will run into people again. Often they’ll be developers who you thought had potential 7 years ago, but were too inexperienced to bring on board. It always feels like deja-vu, but it’s happened to me more than once.
  5. When opportunities arise be frank about the minuses. Good recruiters know this well. You’re dealing with a long term relationship so you don’t want to get someone excited or bring them into a situation that is too risky or just wrong for them. They need to know if the company is generally slow paced, doesn’t have that many benefits, or they’ll be working with a largely junior team that will need a lot of mentoring. Selling the upside is fine, but give them the downsides.
  6. Don’t get frustrated if some of your bench turns you down. Maybe the opportunity was great, but someone’s comfort level in a downturn is to stay with their current company. The situation may be very different a few years later.