November 6th, 2009
I just completed a search for a new job. In these economic times, finding a job can be daunting, even in the software industry, which has fared better than most. (Today, it was announced that the official unemployment rate in the U.S. is 10.2%, the highest level in 25 years.) A job search can be harder if you're a software developer of a certain age (I turn the big Five-Oh in January).
Despite these obstacles, this was the easiest and most rewarding job search of my career. I had the good fortune to receive several excellent job offers. I regret that I had to turn down all but one of the opportunities. (I start at DRW Holdings after Thanksgiving.)
The job search was easy because of investments I've made in my career over the years, investments that paid dividends this Fall. Let me share some of the lessons I've learned about keeping your employment prospects bright, despite your age or experience. My remarks mostly apply to those of you who want to "stay technical", rather than move into management or other roles. However, some of the points are more broadly applicable.
The elevator pitch is this: I made myself interesting to potential employers by developing a public reputation for software craftsmanship. I kept my skills up to date. I developed a local network of colleagues through active participation in user groups and local conferences. I developed an international reputation by speaking at larger conferences, blogging, tweeting, and writing Programming Scala.
Not everyone can do all these things, so I'll offer suggestions for making the most of what opportunities you have. I owe a great debt to Object Mentor and Uncle Bob Martin, in particular, for encouraging conference participation, blogging, writing, etc. My skills as a craftsman grew enormously at Object Mentor.
Cultivate Your Skills
I've met older developers who struggle to stay employed. In particular, there are many ex-telecom developers who lost their jobs at Lucent, Motorola, etc. here in the Chicago area. Most of these guys (and they have all been guys...) wrote C++ code for many years, even decades, on telecom switches, radios, and so forth. Justified or not, they are perceived as stale by web companies and IT teams.
Our industry is evolving at an extraordinary pace. Staying current with newer technologies and development practices is difficult.
Most companies aren't willing to invest in career development for their employees. Yes, it's short sided, but easy to understand. They also make conservative technology and process choices. They avoid risking failure on ideas they think are unproven when what they know seems good enough.
So, how do you stay current? How do you avoid growing stale? How do you become expert in Ruby on Rails if you work in a Java shop, for example?
During his talk at the recent Software Craftsmanship North America conference, Uncle Bob said it's your responsibility to grow your career, not your employers. You'll have to find a way to stay current, balancing a 40-hour work week, family, and other obligations. Note that I said a "40-hour work week". If your employer isn't investing in your career, they certainly can't expect more than 40 hours of your time each week (but it's in your best interests to give them a productive 40 hours...).
Here are some ideas to help you stay current.
Keep Your Finger on the Pulse of Change
Find good sources for news and trending topics. Can you name three of the new "NoSQL" database projects?
These days, I use Twitter for keeping informed. Almost all the people I follow are other technologists. Websites like Digg and Reddit can be useful. So can blogs and trade magazines. The hard part is knowing how to drink from the fire hose of information without wasting your time.
I discuss conferences below. They are also invaluable for staying informed.
Master Something New Each Year
In The Pragmatic Programmer, Andy Hunt and Dave Thomas say a developer should learn a new language each year. It's hard to underestimate how learning a new language broadens your perspective and informs your work in whatever languages you use. Note that the new language should be very different from languages you already know. Otherwise, what's the point?
You can generalize this advice; learn a new technology or set of development practices each year. It might be Agile if you've never worked on an Agile project (or Kanban if you have). It might be Functional Programming if you know Object Oriented Programming (or vice-versa).
Because it's unlikely your employer will give you the time for learning new things (at least on a consistent basis), you'll have to do this on your own time.
Develop "Resumé Quality" Experience
It won't mean a lot to potential employers if you say you learned Rails by playing around with it at home, for example. How do you get real experience worth adding to your resumé?
- Try to use it at work: You might sometimes succeed in convincing management to adopt a new technology or set of practices. Write an objective report that analyzes the pros and cons of the idea, targeted for a particular need in the organization. For the cons, develop mitigation strategies, such as using a prototype or trial of some kind to demonstrate viability and develop confidence in the idea. Can you use the new idea in a non-production role, e.g., as a testing tool, before committing to it for production use?
- Get involved in an open-source project: Many people who work full-time on a particular open-source technology started working with it in their spare time and one or more events led to full-time work. For example, Charles Nutter and Thomas Enebo worked on JRuby in their spare time before Sun hired them to work on JRuby full time. Note that involvement in open-source not only demonstrates viable skill in that area, but it provides code samples of your work. (Of course, the potential employer has to judge whether or not you actually did that work.) Few things provide more street cred than having a key role in a successful open-source project.
When was the last time you read a technical book? If you're not reading several books each year, you're not getting the deep content that the "pulse of change" sources can't provide.
Several Things to Know
Okay, I can't list everything a software craftsman should know or be capable of doing, but here is a grab bag of items that are either historically underrepresented or they are growing in importance. I'll throw in a few general skills you should develop, too.
- SQL Databases: It seems that most developers just hate working with databases. (I've been guilty of this.) So, we write lots of boilerplate code to hide the database from our sight, often resulting in bloated and suboptimal applications, but I digress...
- Functional Programming: FP is no longer just for academics. All of us need to get good at concurrency and FP is the best foundation for it. Also, FP ideas make our code better in other ways.
- Concurrency Models: Multithreading, The Actor model, dataflow parallelism, software transactional memory, etc.
- Agile Methods: It's past time for everyone to be skilled in XP and/or other Agile methods.
- Business: This one hurts, I know. Most of us developers don't like dealing with business issues and business people, but years ago, I got tired of burning away years of hard work on projects that failed for business reasons, not technical reasons. Understand the business and you'll be less likely to get involved in bad projects.
- Writing and Public Speaking: I'm fortunate to have good writing and speaking skills, and I enjoy doing both. However, I've also worked hard to cultivate those skills. Remember my elevator pitch above? I wouldn't have the reputation I have without some ability to communicate by writing and public speaking.
- Interviewing: Have you ever choked in an interview? We all have. Interviews are artificial and not very good at determining actual value, but it's a gate through which we all must pass. Even when you're not looking, consider interviewing occasionally for the practice. Or, practice with friends. Expect to write code and perhaps pair program in the interview. If the organization doesn't have you write code, then go elsewhere. Organizations that don't test you on what you'll actually be doing let in a lot of mediocre people.
- Any Areas of Personal Weakness: We all have facets of our jobs that we do poorly or reluctantly. If you're shy or lack public-speaking skills, try doing informal talks for your team or local user group. If you don't write well, write blog posts and ask your colleagues to help you improve them. If you have trouble communicating with customers or other stakeholders, spend more time with them. A craftsman is well-rounded.
Cultivate a Reputation
A third to a half of the people who interviewed me during this job search were people I already knew! My active involvement in the Chicago tech community got me in the door and made the interviews less stressful. My experience and reputation made the interviews successful.
Here are some public speaking ideas that will cultivate your reputation:
- Conferences: Speaking at conferences is one of your best options. They are also great for networking. These days, the slides and even the videos for talks are available on the web, so the reach of a conference talk extends far beyond the physical confines of the venue and those who were there. However, it can be hard to get the opportunity to speak at a conference. You might not be working on anything that can be discussed publicly and your company might not pay for the trip, forcing you to pay and to consume limited vacation time. Look for local conferences, some of which meet on Saturdays, for inexpensive, yet often excellent alternatives to the big conferences.
- User Groups: If you live near a major metropolitan area, it's easy to get involved in the local user groups that are there. Most user groups meet once a month, so they don't consume too many evenings when your family expects you to be home. Don't be a passive participant; get involved. Talk about what you've been learning in your spare time. Help organize the group. Get to know the other people in the group. If you can't find a group that interests you, start one! Your employer might let you meet in the office. When I started the Chicago-Area Scala Enthusiasts, I had no idea if anyone else would come, but we always have 15-25 people for each meeting.
- In-Office Seminars: Organize brown-bag lunch seminars at work and speak at them occasionally. If you can't talk about your work outside the office, you don't have that limitation inside!
Post the slides for public talks. Use SlideShare if you don't have a personal site and the slides aren't publicly available from the conference or user group web site. (Even if you have your own site, you might get better traction at SlideShare.)
Writing is another way to establish a reputation with a broad audience:
- Blogging and Tweeting: Search for people who are good at writing technical blogs and tweets. Follow their examples.
- Write for Magazines, Web Sites, etc.: Many websites and magazines welcome submissions for publication. For example, Michael Swaine just posted a request for contributions for PragPub.
- Write a Book: Obviously, this is a big project to take on, but if you write well and you have expertise in a particular topic, writing a well-regarded technical book can't be beat for building your reputation.
Put yourself in the shoes of an interviewer and ask these questions:
- Why should I hire you?
- What makes you unique?
- Why are you more valuable and worth a higher salary than a fresh college graduate or someone with a few years of experience?
What's so great about a craftsman? He or she offers the wisdom that comes from a lifetime of experience. That wisdom guides strategic decision making (like design decisions for software). However, a craftsman can still create the products of his or her craft. When a craftsman mentors novices and apprentices, he or she teaches by example.
Your best position is one where you have unique, desirable skills or a unique combination of desirable skills (including maturity). The contrast between generic and exceptional is nicely captured in this presentation.
There are plenty of other developers who know more than me about various software topics and many of them are young and willing to work insane hours. What I offer is a wide range of skills and experience, combined with mature judgment (correct me if I'm wrong!! ;), that I believe are unique and compelling.
What makes you indispensable?
You'll still encounter age bias in software development shops. You'll still encounter shops that treat developers as commodities. The organizations worth pursuing know they need to work "smarter". They value experienced people with sound judgment and wisdom who can guide and mentor less experienced team members. They also want their experienced people to provide technical advice to the business team as they weigh business decisions.
If you find that you're going through the motions, that you have no passion for the career growth that will keep you employable, then you should find something else to do. Do it now, on your own terms, before a layoff forces you to pick a new career.
But if you are passionate about software, if you cultivate your career each day, there should always be a place for you in our industry, no matter what happens in the larger economy.