An exploration of the art and
craft of software development
Developer Opportunities, The Rest of the StoryPosted by Marty Haught on Tuesday, March 13, 2012
Picking up where we left off, I want to go deeper into the opportunities that you have once you’ve got some meaningful experience. Whether that’s 3 years in different gigs or 10 years, it doesn’t matter. You’re skilled enough to know how to build software on your own and you can now entertain offers from just about anywhere. What do you do? I’ll break this down into two categories — Mid game and end game. What if you’re not at this point in your career? I’ve got a third post that will cover how to get started and get up to this point. Expect that in a few days to a week.
The mid game, as I’m calling it, is all about building up the resume and experience. You have so many options so go out and see the world of software. Travel, stretch yourself, experience. You should be able to make yourself a healthy salary while doing so. You may also want to go into business for yourself and you may not. I am going to separate these opportunities into two types: one based on work style, another based on project domain.
There are primarily five types of work style that I see for programmers — product companies, consulting, freelance, training and content. Perhaps you’ve done one or two of these types so far in your career. Great, consider trying some of the others for a while.
Product companies are most familiar as they exist everywhere and vary incredibly — from latest hot startup snapping up rockstar devs to the well-established corporation. You might choose one company as it has a certain culture or quality of team. Another reason, which I’ll go into further down below, is its problem domain. With product companies you also have a higher chance to become a specialist in some area, like big data or highly concurrent processing. From what I’ve seen the deepest knowledge about a domain is typically attained via a product company. My recommendation here is make sure you’re not just looking at the compensation part of the equation and make sure both the culture, team and project’s challenges help you in some way.
Consulting and Freelance are both based on client work though there is considerable variation between these two. Consulting companies are a larger organization where your role is simply the development portion. You are not on the line for business development, marketing, sales or operations. You will be one of many consultants that provide value to clients. Pivotal Labs and Thought Works are two good examples. When looking at working for a consulting company, pick one that has really skilled developers and/or a process you’d like to have more experience with such as extreme programming. The other benefit is you can learn more about interacting with clients and recognizing when you’re delivering value. These skills are invaluable and though you can learn them elsewhere, I see more emphasis put on them at consulting gigs. The other benefit of these types of gigs is the variety both in team mates and projects. For larger consulting shops it’s common to switch teams and projects after a while.
There are some downsides too. First, you may grow tired of doing this type of work. Perhaps you are rolled off projects before you’re ready. You may also reach a point where you feel you aren’t really growing your skills. I’d say 2-3 years seems more than enough in this type of environment. Pay is usually pretty good and wherever you end up next should be a higher level position.
There are other flavors of consulting that I’ll touch on briefly. One is the recruiter/local placement companies. I consider these staff augmentation as you still go for an interview at the client and assuming you are selected you then work side-by-side with their team. You can be either W-2 or 1099 for the consulting gig. I consider these gigs a last resort if you can’t find other work. It’s also something I see in the earlier years of a software career though it can be useful as as fallback while you’re bootstrapping a new venture.
Freelance is on the other spectrum of client work. The reason I consider it different is that you own the entire business. You have to do business development, marketing and sales. You have to handle your own accounting, taxes and legal needs. As you are your own boss, you have ultimate flexibility. I think freelancing is a wonderful thing you try your hand at for at least a couple years. You will learn so much about how to run a business as well as software development. There is a lot you’ll need to invest but you can easily bootstrap the business. It can also scale so you can bring in subcontractors or even hire employees yourself. I won’t go into any further advice on how to do this as that’s easily its own series of posts. There is higher risk with freelance so you should make sure you have saved up some cash to cover dry spells.
Training is another direction you may want to go in that will take you a bit away from developing. You still get to work with software but more of your time will be spent mentoring and teaching others. I understand there is excellent money to be made in this field and it can be incredibly satisfying if you like helping others. Like freelance, you’ll have to own the business yourself. I know there are some organizations that will hire you on to be a trainer but I’m focusing more on when you take your software expertise and create your own training courses. As I have never personally done this, I can’t offer more insight. I’m pretty sure that you’ll want to make sure you really enjoy doing this before you take the plunge. It’ll require dedication and perseverance to succeed.
Finally, I want to cover becoming a content provider. This is where you leverage your expertise and make content you can sell such as books, screencasts or other written material. The most common flavors are pay per item or subscription service. If you have the passion to create this content as well as enough expertise then I think it’s a wonderful idea. Like freelance and training, you’ll need to build up your business’s reputation. However, the potential to scale your content to thousands of developers is really nice so there’s very good earning potential in this space. I hear Amy Hoy’s 30×500 class really helps get this type of business off the ground.
The other direction you might take is seeking out certain kinds of project domains to round out your experience. I’ll mention a few notable examples but there are many more I won’t touch on. As you read through these keep in mind the idea I have is that you want to round out your experience.
Rescues are very common in my line of work. These are apps that someone wrote, and typically wrote poorly, and for whatever reason are no longer maintaining them. Perhaps the company fired them or they left for greener pastures. You should expect a mess that extends beyond just code quality. They may have built the wrong features or painted themselves into a corner. Maybe the software doesn’t even work. With most rescues throwing out the code and starting fresh is not an option. Thus these can be very challenging. Not only from a technical angle but a political one as well. To successfully rescue a few apps in your career can really teach you a lot about writing and maintaining software. I personally recommend everyone do at least two of these at some point.
Enterprise/big App is a broad category for software that is complex and has teams of developers involved. Things are harder when you start to get into 20 or more developers. If you add multiple groups with different leadership it ups the ante considerably. There are some thing you will learn about software, teams and leadership only when you play in this sort of space. Though I don’t think everyone needs to have this experience, you can learn an awful lot. Hopefully you won’t lose your mind in the process.
High concurrency/throughput is another kind of situation that can yield a lot of experience. I personally have never worked on an app of this nature but I have friends that do. Code that works for 95% of applications out there will simply not be good enough if you’re pushing thousands of operations per second. It’s rare that many of you will need to write code at this level but what valuable experience if you do.
The domain specific category would be something very targeted like banking, security, telecommunications or medical. The choices are incredibly numerous so I won’t bother mentioning any more. Software in these different domains can vary so you might want to try your hand in something different from your previous gigs.
The end game is what I’m referring to once you’ve got enough experience to do pretty much whatever you want. Basically you’ve been in a lot of different environments and worked on different type of projects. Maybe you haven’t ‘seen it all’ but darn close. Perhaps you’re tired of doing what you’ve been doing and something else speaks to you. At this point the question comes should you do this for yourself? This was actually what James Edward Gray was getting at on Ruby Rogues that eventually developers will want to build something for themselves, whether it’s content or their own product. Other options may appeal to you such as taking a high profile gig as a CTO or technical co-founder of a promising startup. Whatever you choose, it should be something fulfilling and makes you happy. Hopefully by this point you’ve made enough money so that others factors are more important that just cash.
I would agree with James that many of us, at some point, will want to start something of our own. In the mid game section I covered a few options that put you there. Now, there’s nothing stopping anyone from going into business for yourself from the get go. Matter of fact, Nate and Natty of Everlater decided to create the travel experience sharing service they wanted and taught themselves to program in the process. There are no rules here and if you have the passion, there’s no reason not to dive in. Let’s go over the primary choices I see.
Consulting, Content and Training
I’ve already covered these in the mid game section. Very little has changed in the here except you likely have made a name for yourself. Since that will drive business you’ll find it easier to stay busy, charge higher rates and see your business flourish. There’s no reason you can’t build an impressive business by this point. Look at Peepcode, Pragmatic Studio or Envy Labs as examples.
This is where you decide to join the leadership ranks at either an existing company or a new venture where you’re not necessarily the founder. This mirrors the traditional path that great devs go into management. This isn’t bad as there is real need for technical leadership. If you’ve had enough experience and you feel draw to lead the engineering/technical part of a business, by all means go for it. There are plenty of challenges in this direction and you can really make a difference. You don’t even have to grow pointy hair. It goes without saying that you can further your reputation by taking this sort of position and doing well. Compensation should also be there but then you’re also working for others. Also, you’ll have to deal with politics like never before.
This is where you start something new with you at the helm. Starting your own consulting, training or content business also falls in the entrepreneur category but for this part I’m just referring to building a product or service for others to use. A lot will be asked of you if you take this path. I have many friends that have gone here and it’s a lot of work. However, if you are passionate about your idea you will love it. Don’t expect riches any time soon but there’s something very satisfying about working for yourself and building something meaningful. The business you create could stay small and support you for years to come. Some call this a lifestyle business. You may also build the next Facebook too. The possibilities are endless here.
If you do go this route, I’d highly recommend trying to bootstrap and avoid taking investment. The moment other people fund your idea you will have to answer to them. This might take away a lot of the joy of doing your own thing. Additional pressures will be introduced so be prepared. I personally haven’t taken investment so this is second hand from those that have. No doubt there are plenty of businesses that would significantly benefit or require investment capital but think carefully about going in that direction.
This is an interesting direction you can take after you’ve had at least one successful venture and have more money than you can put to use. You may be tired of running companies yourself and building products. If you have the capital and you still want to stay connected, doing small angel investments might be for you. You’ll have to learn the VC/investment world but it would give you a way of keeping in touch with what’s happening and giving back to a new generation of programmers building the future.
As you can probably tell, there is a lot of ambition in some of the types of gigs. While making your own product isn’t the same as being the CTO of a high profile company, you will have to do many things developers aren’t asked to do. For many of us, we may welcome the new set of challenges while others may not wish to venture there. There are immense rewards for developers who take the risk and stretch themselves this way. Whether you’re willing to go there and wear some non-programmer hats will determine how big they’ll be. The thing is certain, you have a lot of great options. You can easily stay a developer if that’s your cup of tea and still be rewarded with a good paying, happy career.blog comments powered by Disqus