reinh.com

Ch-Ch-Ch-Changes

A couple months ago, I resigned my position at Hashrocket. This was not an easy decision for me. Working with the rocketeers has been a very fulfilling and edifying experience. The people at Hashrocket are passionate about what they do and extremely competent. I was given challenging and rewarding responsibilities. Hashrocket was a great job and I would recommend it to anyone. Why, then, did I chose to leave?

In the end, it came down to a need for personal growth. At Hashrocket, I have had the opportunity to work with interesting clients on interesting projects, to lead a number of talented development teams and to consult on Rails development and Agile methodologies to large businesses. Thanks to Hashrocket, I have expanded my core competencies and matured as a developer. Certainly I could have stayed with Hashrocket and continued this process. There was more to do and more to learn. In the end, though, I felt that it was time to for me to take on a new set of challenges. My friend and former boss, Obie Fernandez, has been wonderfully supportive of me in this and I owe him a great debt of gratitude. I am happy to say that my departure from Hashrocket has been entirely amicable. They are a great bunch, one and all, and I am fortunate to have worked with them.

As a consultant for the past eight years, both freelance and with Hashrocket, I have worked with many clients. This work has been more or less successful, my clients have been more or less happy, and the work has been more or less satisfying, but there is a common factor in its transient nature. I work on a project for weeks or months, provide as much value as my abilities allow, and then move on to another project once my role is complete. Consultants rarely experience the satisfaction and sense of accomplishment of a job well done, the rewards of the successful completion of a long and often arduous project life cycle.

So, to make a long story short, I wanted to find a project that I could call home. I wanted to feel a sense of ownership in the project and its outcome. I also wanted to learn new skills and develop new competencies. The problem is that I didn’t yet know where home was, so I decided to start by taking some time off and then sort of figure things out from there. This was risky, especially in our current economic climate. Luckily, I’ve never been shy about making such decisions. After all, I love a good adventure, and adventures always entail a certain amount of risk.

During my vacation, I spent a lot of time playing piano and writing music. It felt good to give my creative muscles some much-needed exercise. I assessed my career and my goals. I read a lot. I played some video games. I quickly found, however, that living without a ”dedicated purpose” was less than satisfying. I was not happy leaving my tools in the corner to gather dust: they needed to be used. So, how best to use them?

I decided, after some consideration, that what I wanted was the opportunity to shape the destiny of a project that I believed in. I wanted to do more than sit behind a desk and code. Luckily, I was presented with just such an opportunity only a few weeks after leaving Hashrocket. Rick Bradley, a good friend of mine and an excellent developer, had a client who was looking for a full-time hire. I was reluctant to become Yet Another Developer but I decided to look into it. I’m sure glad I did: the position turned out to be just what I was looking for.

The client was Reductive Labs, the company behind Puppet, the Ruby-based configuration management tool. This in and of itself was interesting. The Puppet codebase covers a large area both topographically and conceptually. It has a significant installation base and a large open source community. It would be a challenging project to work on and a welcome test of my abilities.

I don’t have a Computer Science background. I’ve never taken any courses in programming. I am entirely self-taught. Puppet, on the other hand, has a lot of Serious Business going on: a parser-compiler, a graphing library, client-server systems, and so on. I have experience in some of these areas, but in others I have only a basic theoretical knowledge gleaned by way of an intense curiosity and a love of reading. I had read the Dragon Book, for instance, but I had no experiential background in language design or writing parsers and compilers. Luckily, my lack of a formal education was not a barrier to entry (nor should it be if you have the skills needed to execute or the ability to acquire them, but that’s a topic for another post).

I spent a week in Portland getting to know the code and the company. While Puppet is older than Rails, the code has until recently been under the sole stewardship of Reductive founder and CEO Luke Kanies. As a company, Reductive is small and young, but the technology is relatively mature. This is an interesting combination of both the pioneering spirit of a startup and the stability of an established open source project.

During the day, I spent my time pairing with Luke and talking with the founders about their plans for Reductive Labs and Puppet. Luke has a piercing intelligence and a compelling vision for the future of both Puppet and Reductive Labs itself. I quickly saw that I would not just be yet another a developer, rather that I would also have the opportunity to lead teams, collaborate with a large and active open source community, and even more importantly, to help Luke and the rest of the Reductive team make design and strategy decisions that would inform the growth of both Puppet and the company. Plus, I would be “forced” to relocate to Portland, one of my favorite cities. Bonus.

Apparently my visit was a success: I’m pleased to say that Luke offered me a position immediately after my trip and I accepted just as quickly. As I grow into my new responsibilities at Reductive, I find that they scale well with my abilities. Luke seems happy to let me do what I’m good at and I enjoy the opportunity to carve out my own role within a growing company. Most importantly, I feel like I have the opportunity to accomplish something significant. Nothing matters more to my sense of fulfillment and satisfaction.

My faithful readers have most likely been lamenting this blog’s recent lack of content. Hopefully my little story helps explain this conspicuous absence. Expect more posts in the near future. I’ve got plenty to talk about.