Octopus grew by about 40% every quarter for the last 8 quarters, or 400% in the last 12 months. We hired 6 people over that time, so that leads to a conclusion: assuming we grow at the same rate this year, we're going to be hiring at least another 12 people if not more. And while Octopus Deploy is our only product now, long term our goals are much more aspirational: I'd like to see us become the next JetBrains or Atlassian, building a whole suite of world-class products that do one thing well, and which developers love to use.
This is part one in a series of posts about how we're dealing with some of that growth:
- Developer career paths
- How we work
- Compensation and career progression
- Interview process
- Laptop program
- Anti-harassment policy
- Local or remote?
Developer career paths
Building software like Octopus Deploy is incredibly fun, but also quite technically challenging. It's certainly very different to building enterprise software or typical web applications. Octopus is shrink-wrap software that needs to work (and be supportable) across a huge number of OS and network configurations. Most of the code is actually in the back-end, in orchestrating deployments across, in some cases, up to a thousand individual servers. There's a custom communication stack, there's language parsing and mini-programming languages, there's a huge amount of integration with cloud and with OS components. And when things go wrong, it's on a client's server that you have no access to, so you'd better have good "spidey senses" for debugging and diagnosing issues.
We need to grow this team, but we are not looking for 10x developers" or "rockstars". I'm much more interested in building an incredibly productive team than in finding great individual contributors. The kinds of skills we need might be more at home in a database vendor or infrastructure provider, not enterprise software development, but I think with the right attitudes these skills can be taught.
Given the size of our team in the next 12 months, I think that a career path for developers at Octopus Deploy - and the roles we'll be hiring for - looks something like this:
Given some mockups, and good guidance, should be able to implement small features. They should be able to come up with at least one solution to the given problem, but it may not be the most elegant, and it will probably be slow. They might not fully understand the tradeoffs they're making, and will occasionally get stuck. The most important attributes we're looking for in this category is eagerness to learn, and the ability to put your hand up and ask for help when you do get stuck.
Should be able to implement bigger features end-to-end, without so much guidance. Should be able to contribute to the design of features (both architecturally and from a user-experience/functionality point of view). For a given problem, should be able to think of a few different approaches, and have a good understanding of the tradeoffs. Writing tests, refactoring, and using patterns and good engineering principles should be second nature. Knowledge of advanced topics like threading are not expected to be incredibly deep, but should extend past "I've played with
BackgroundWorker". Should understand topics slightly outside of development, like basic networking. The attributes we're looking for here are a passion for continually sharpening the saw, and a focus on delivering high-quality, working software.
Junior developers get into trouble. Senior developers get them out of trouble. Should be able to design and implement entire feature areas end-to-end. Should be able to think of many solutions to a given problem, have seen many of them before, and be able to understand the tradeoffs. Beyond writing great code, should be able to coach and mentor other team members on the same. Should be able to demonstrate a deep knowledge of topics like threading, memory management, networking, and the underlying operating systems. Given a crash dump, should have some idea of what to do with it. Attributes we're looking for here are obviously a certain level of competence and leadership, but also a passion for helping to coach and improve the rest of the team.
I don't really like the "architect" title, and we certainly don't want ivory tower architects, but it's all I can come up with beyond "Even more senior developer". A solution architect should be a great communicator, able to bring the rest of the team along with them in designing and building software. They should have enough experience to understand a wide variety of approaches to systems design. Given a mission like "figure out how to make a hosted version of Octopus" or "create a new product called Octopus Build", should be able to put the entire systems together and come up with end-to-end solutions. Finally, solution architects should be able to work closely with our end customers, helping them to understand and adopt our software and adopt it in their organizations.
Beyond software architect, I'm not sure what comes next (mainly because we aren't hiring at that level just yet). As we grow, having a career path for developers (that doesn't eventually lead to management) is important, and I expect we'll add more specialization and levels to the above.
One of the bits of feedback I've heard is that these expectations are a little too high, and that we shouldn't expect senior developers to understand threading, or how the garbage collector works. What do you think?
At the moment, our focus is on finding developers and senior developers. I'd love to take on junior developers, but right now there aren't enough people to help mentor them, so that will have to wait until we have a couple more experienced developers in place. If you think you'd fit one of these roles (and live in Brisbane), we're hiring!