I got some really good questions about my career. Which caused me to reflect back and snort at my own attempts to make a sense of what happened.
Here is a rough timeline:
- 1999 – Start of actually considering myself to be a professional developer. This is actually the start of a great one year course I took to learn C++, right out of high school.
- 2001 – Joined the army, was sent to the Military Police, and spent 4 years in prison. Roles ranged from a prison guard, XO of big prison, teacher in officer training course and concluded with about a year as a small prison commander.
- 2004 – Opened my blogged and started writing about the kind of stuff that I was doing, first version of Rhino Mocks.
- 2005 – Joined the Castle Comitter’s team, Left the army, joined We!, worked as a consultant.
- 2006 – My first international conference – DevTeach.
- 2008 – Left We!, started working as an independent consultant.
- 2009 – NHibernate Profiler beta release.
- 2010 – DSLs in Book book is published, Entity Framework Profiler, Linq to SQL Profiler, RavenDB.
- 2011 – Hiring of first full employee.
- 2014 – Writing this blog post.
A lot of my history doesn’t make sense without a deeper understanding. In the army, there was a long time in which I wasn’t actually able to do anything with computers. That meant that on vacations, I would do stuff voraciously. At that time, I already read a lot of university level books (dinosaurs book, Tanenbaum’s book, TCP/IP, DDD book and a lot of other stuff like that). At some point, I got an actual office and had some free time, so I could play with things. I wrote code, a lot. Nothing that was actually very interesting. It was anything from mouse tracking software (that I never actually used) to writing custom application to track medical data for inmates. Mostly I played around and learned how to do stuff.
When I got to be a prison commander, I also got myself a laptop, and start doing more serious stuff. I wasn’t able to afford any professional software, so it was mostly Open Source work. I started working on NHibernate Query Analzyer, just to see what I can do about it. That thought me a lot about reflection and NHibernate itself. I then got frustrated with the state of mocking tools in the .NET framework, and I decided to write my own. Around that time, I also started to blog.
What eventually became Rhino Mocks was a pretty big thing. Still one of the best pieces of software that I have written, it required that I’ll have a deep understanding of a lot of things. From IL generation to how classes are composed by the runtime to AppDomains to pretty much everything.
Looking back, Rhino Mocks was pretty huge in terms of pushing my career. It was very widely used, and it got me a lot of attention. After that, I was using NHibernate and talking about that a lot, so I got a lot of reputation points in that arena as well. But the first thing that I did after starting as an independent consultant was to actually work on SvnBridge. A component that would allow an SVN client to talk to a Team Foundation Server. That was something that I had very little experience with, but I think that I did a pretty good job there.
Following that, I mostly did consulting and training on NHibernate. I was pretty busy. So busy that at some point I actually have a six week business trip that took me to five countries and three continents. I came back home and didn’t leave my bed for about a week. For two weeks following that, I would feel physically ill if I sat in front of the computer for more than a few minutes.
That was a pretty big wakeup call for me. I knew that I had to do something about it. That is when I actually sat down and thought about what I wanted to do. I knew that I wanted to stay in development, and that I couldn’t continue being a road warrior without burning out again. I decided that my route would be to continue to do consulting, but on a much reduced frequency, and to start focusing on creating products. Stuff that I could work on while at home, and hopefully get paid for. That is how the NHibernate Profiler was born.
From there, it was a matter of working more on that and continuing to other areas, such as Entity Framework, Linq to SQL, etc. RavenDB came because I got tired of fixing the same old issues over and over again, even with the profilers to help me. And that actually had a business plan, we were going to invest so much money and time to get it out, and it far exceeded our expectations.
Looking back, there were several points that were of great influence. Writing my blog. Writing Rhinos Mocks, joining open source projects such as Boo or Castle. Working and blogging with NHibernate. Going to conferences and speaking there. All of those gave me a lot of experience and got me out there, building reputation and getting to know people.
That was very helpful down the road, when I was looking for consultancy jobs, or doing training. Or when it came the time to actually market our software.
In terms of the future, Hibernating Rhinos is growing at a modest rate. Which is the goal. I don’t want to double every six months, that is very disturbing to one’s peace of mind. I would much rather have a slow & steady approach. We are working on cool software, we are going home early and for the most part, there isn’t a “sky is falling” culture. The idea is that this is going to be a place that you can spend a decade or four in. I’ll get back to you on that when I retire.
More posts in "Career planning" series:
- (24 Jul 2015) The immortal choices aren't
- (22 Jul 2015) The age of least resistance
- (27 Oct 2014) Mine
- (23 Oct 2014) Disaster recovery
- (22 Oct 2014) What is your path?
- (20 Oct 2014) Where do old devs go to?
How much of your time at various points in this time do you spend "doing software" be it, writing, reading or blogging?
I Work 9-6 writing code, hit the gym, then spend 9-11 reading about or writing code?
I still feel i don't even scratch the surface, do you have any tips? Should i try and specialise in one area?
Aaron, There were times where I would spent 9 + 10 hours at work, then go home and spend another 6 hours just working on OSS stuff. That was a regular thing, we many weekends just doing OSS or writing, or stuff. I still do a lot of reading about technical stuff, but I can move a lot of that to the time that I actually working :-)
I would strongly recommend getting a good grounding in the basics, then building on top of that.
Thanks for the reply, so sleep should be deemed as something optional by the looks of it!
Do you believe in specialising in a single set of areas or trying to know the whole software spectrum?
Also what do you deem to be a grounding in the basics? I would like to think i have that covered but i guess what the basics are is debatable.
Aaron, I'm no longer doing this, not even close. But I spent a lot of time doing a lot of stuff, yes.
Basics: Operation Systems, Networks, Memory Management, Virtual Machines, I/O, Threading Systems, etc.
At least for me, that was VERY helpful.
More out of curiosity than anything else, does Hibernating Rhinos have a research team? Put differently, do your developers have an outlet for any crazy ideas they have that might be within the company's reach? Or is it more, "If someone has an idea, they come to me and we discuss possibly building it in the future;" that type of thing.
Kyle, We don't have anything official. However, we have people who spend some time at the office (and at home, probably) doing their own thing. For example, we have a GraphDB implementation on Voron that is purely there because one of our guys want to write graph algorithms.
It's always interesting to hear book recommendations from successful developers. I wonder which books from the last six years you would recommend (i.e. since you posted http://ayende.com/blog/3192/recommended-books)?
Typo or intentional :P Dos DSLs in Book Book refer to https://www.youtube.com/watch?v=MOXQo7nURs0 ?
Ayende, how much time you spent at work before / after marriage? :) http://ayende.com/blog/8193/the-big-event-is-just-a-week-away