In July of this year, Stack Exchange Inc. released an online tool that lets you calculate how much money you would make if you worked there. The number you get out of the tool is based on four factors. There’s a salary floor based on the position you select (e.g., Developer or Product Designer), an adjustment based on your years of professional experience, and a bonus for living in one of a few high cost cities (New York, San Francisco, or London). Finally, the tool takes into account your skills.
Having written in the past about skills for programmers, I was interested to see what Stack Exchange decided was important for success in a programming job. Here’s what I found.
Benefits of a Skill List
For the purpose of this article, I’m using the Web Developer skill list. Stack Exchange’s tool includes lists for two other types of developers (Mobile Developer and Data Science Developer), but the skills are the same other than a couple of technology-specific skills that differ between the three.
The obvious reason for this particular skill list is to calculate salaries at Stack Exchange. But there are other reasons why lists like this are valuable. First, they are a way to express what a company values in its employees. If Stack Exchange is willing to adjust someone’s salary based on good performance in a particular skill, they clearly think that skill provides some benefit to the company.
And if you accept that argument, then the second benefit of this list is to help programmers decide what to practice. Current or future Stack Exchange programmers have a direct financial incentive to prioritize the skills on the list. But it’s also valuable to any programmer as a concrete list of competencies that at least one company has decided are worth paying for.
Skill Categories
I organized my Skills for Programmers post around a set of skill categories that I came up with after some research. What categories do the Stack Exchange skills fit into?
The Web Developer skill list consists of fifteen skills. They aren’t categorized in the original list, but these are the five categories that I think best summarize the list.
Specific technical skills
These are the “hard skills” that come to mind when people think about what programmers do:
- Proficiency in languages and frameworks. For a Web Developer at Stack Exchange, that means areas like .NET, C#, MVC, CSS, JavaScript, and SQL.
- Proficiency in developer tools like IDEs, version control software, and testing tools.
It’s fashionable when writing about developer skills to minimize the impact of technical proficiency on job prospects and advancement. Maybe that’s because it seems too obvious, and people want to find a more interesting answer to the question of what makes a developer valuable to their employer. Here’s how I think about these types of skills: when employers evaluate developers on the basis of specific technical skills, they’re strict about the minimum qualifications that they’re looking for. For some of the other skills, like communication or producing public artifacts, there’s more room for negotiation about a candidate’s demonstrated ability in those areas. But specific technical skills are a core job requirement, where deficiencies have the potential to disqualify someone from a job.
General programming skills
In addition to specific technical skills, the Stack Exchange skills list identifies some general programming skills:
- Knowledge of security exploits (e.g, cross-site scripting) and how to avoid them.
- Proficiency at writing code that performs well, and knowledge of how to diagnose code that doesn’t.
- Ability to make continuous progress, and release intermediate versions of a feature that others can try out.
College students learn specific skills by completing a degree, but general skills are more likely to be learned on the job. Real-world software is exposed to attackers, so developers find out about the need for secure design and implementation. Successful web-based software attracts a lot of simultaneous users, which tends to uncover performance hot spots. And commercial software of all kinds is developed by teams of programmers, which operate best when individual team members push their changes regularly to a central repository, rather than hoarding them on their own machines.
Communication skills
Developers can get better at their job by becoming better at communicating. The Stack Exchange list covers communication skills in several areas:
- Basic team communication: keeping your team up to date with your work, while using the right communication tool for a particular purpose.
- Communicating beyond your own team and company: answering questions on Stack Overflow, writing blog posts, releasing open source software, and speaking at events.
- Working effectively with people in other disciplines, like operations and UI/UX design.
For developers, UX/UI design and operations skills fall into the communication skills category. Here’s why. While some developers may also be good designers or networking experts, a developer only needs to know enough about design and operations to have a meaningful discussion with a designer or a site reliability engineer. The same is true for discussions between developers and other specialists, like product managers. Unless a software company is very small, there are usually people who aren’t developers available to handle non-development tasks. That frees developers up to focus on their specialty.
People and project management skills
Although this skills list is for individual contributors, it includes two skills that are often associated with management roles:
- Recruiting potential new hires, mentoring them when they join, and providing ongoing education for them.
- Creating clear project plans and specifications that help teams achieve the company’s goals.
For some specialties, it’s practical to create separate disciplines and hire people to fill them, as mentioned above for UX/UI and SRE roles. Developers then just need to learn enough about these disciplines to communicate effectively with the specialists.
But for some tasks involving people and project management, it’s not advisable to delegate to a specialist. Take the interview process. Software companies have a long history of peer interviews: When you apply for a development job, you may get a quick screen from an HR professional. But most of the interviews are conducted by your potential future colleagues. They’re the ones who know what skills are necessary to succeed at the job. When new hires arrive in the office, they’re also the ones who tell them which repositories to clone, what software to install on their machines, and whether to use tabs or spaces in their code. No one else can supply that hands-on advice.
Similarly, enlightened software companies realize that the people in the best position to provide a project plan are the ones who are doing the work. An experienced project manager can help keep a project running smoothly, but the raw data for the plan has to come from developers.
Love of learning
This last skill category is more about attitude than skills. It is intended to reward developers who seek out information on topics of interest, incorporate their newfound knowledge into the software they’re building, and push their colleagues to look for better ways to build the company’s products and services.
While all of the skills on this list provide insight into company values, the ones in the love of learning category are especially values-oriented. If a company can find and keep developers who are self-motivated to continually learn new things and put them to use, many of the other skills will take care of themselves.
Demonstrating Skills
When evaluating their employees, Stack Exchange is looking for skills, not just knowledge. That’s a good way to approach your own programming practice as well. To prove that you know something, put it to use and see what happens.
(Image credit: Sir Mildred Pierce)