This is a companion article to one I wrote on May 31 about Tips For Recent Graduates Entering The Tech Job Market. This post isn’t about developing technical skills. Technical skills are obviously important but job specific. This post is about the qualities employers and development teams are looking for in a good software developer.
It is important to me that you understand there is no single master guide to this situation. I wrote this based on my own experience. You must consider the position and company to which you are applying and adapt these ideas to your situation. My intention is to help people starting their careers in this field.
As a senior in college looking to start a career in software engineering, I wasn’t entirely sure what qualities employers were looking for in a good software engineer. I had been programming for about 9 years and I had not considered everything employers were looking for. At the time, I thought the best way to beat the competition was a long list of technical skills, team project experience, and good communication skills.
Upon graduation, I was fortunate to have about 50 weeks of experiences from various co-ops, and a large senior project involving a team of five. With these experiences, I felt like I was just as qualified as anyone with five years of experience. I can assure you it wasn’t even close.
Today (July 21, 2013), it has been about ten years since college graduation and with this post I intend to help new graduates better understand what qualities employers are looking for in a software developer. I have served on interview committees, been involved in the hiring process on many occasions, and I want to help you understand what employers are looking for after you satisfy the technical requirements.
Employers are looking for the same general qualities in both experienced developers and recent graduates. Since everyone who sticks to this career intends to be an experienced developer, I will start by listing the qualities necessary for all developers. Then I will discuss how recent graduates fit in the equation.
Qualities For All Candidates
- Problem Solving and Implementation
- Communication Skills
- Emotional Intelligence
- Productive Critical Analysis
- Strategic Thinker
- Transferable Skills
- Language Agnostic
- Design And Coding Skills
Problem Solving and Implementation To be blunt, the two most important skills in this field (aside from being able to program) are problem solving and implementing a solution. You must be able to be given a task and find a viable solution.
Keep in mind, not all problems you run into are going to be directly related to writing software. For example, you may be involved in troubleshooting customer problems and tasked with finding a workaround at a customers site while the software is being updated to handle some unforeseen situation.
When you are being evaluated by a team during an interview they need to know you can help them get things done. They also need to know you won’t be a burden on the team. If you can’t convince them of these two ideas, they are unlikely to hire you.
If you show your aptitude with problem solving and implementation, I think it is quite often the case employers are willing to let the lack of some technical skills slide if have equivalent experience and are a self-learner.
Communication Skills Excellent written and verbal skills, along with interpersonal skills are mandatory in this field. This job is reading, writing, and meetings all day long.
You will read and write code, code comments, design documents, bug reports, requirements, emails, and API documentation just to name a few. If you aren’t reading and writing, you will be in meetings discussing one of these items and that is one of the many places requiring excellent interpersonal skills.
Many software applications require a team of developers, who can work well together. These members need to be able to communicate effectively with each other. In some situations these group members might not be in the same physical location, nor have the same native language. This is where a tool such as UML can help with effective communication.
Emotional Intelligence This is how you deal with yourself and others when emotions are involved. This topic is often of interest to good leaders in a company but unknown to many developers. You will be judged by your peers and managers on these skills even if none of you know what emotional intelligence is. I can’t do this topic justice in just a few paragraphs. I highly suggest you read up on this topic. Look into Daniel Goleman’s books on emotional intelligence.
Productive Critical Analysis You need to show that you are capable of providing critical analysis that is also productive. The ability to analyze a colleagues work is important. You will learn from the process and colleagues will be able to learn from you. The delivery of that analysis is equally important. There are many ways to deliver that information. It is up to you to figure out the most appropriate way for each situation that you encounter. Emotional intelligence plays a big role in the delivery of this analysis.
There is a second side to this quality. You need to be able to take criticism of your own work. Keep in mind, you only get to control how you act in this situation, so make sure you keep the situation productive.
Self-Learner When I was in high-school I read the newspaper to see what skills were listed in the developer job postings. At that time I often saw Visual C++, Pascal, Cobol, and Assembly. By the time I got out of college, Java, .NET, HTML/CSS, and server-side tools were all the rage.
Ten years later many applications have moved to the web and mobile devices. If you want to survive and prosper in this field, you need to be able to learn on your own. Employers won’t always have the time or money to send you to formal training. You will often need to spend time learning outside of work.
To be efficient, split the learning up among your team and teach each other. It’s a great way to get your team up to speed quickly on a new technology. This is referred to as Jigsaw learning.
Projects require balancing many variables to deliver a product on time. You need to be able to learn from previous mistakes and provide ideas for improvement to the current situation.
There is a learning curve at every new place of employment. At an interview you should already have a plan in place for how you can get yourself up to speed quickly when you get the job. Just to get you started thinking, you need to understand their organizational layout, products, software development process, codebase, coding standards, code review process, server layout, and database layout, bug tracking software, just to name a few.
Transferable Skills By transferable skills I mean what skills do you posses that could fill other roles at the company? You may be hired as a developer, but do you have what it takes to fill in for you manager while he is out? Could you mentor a group of interns? Could you give a pitch to investors in a small startup? Can you work one on one with the customers providing tech support for your product?
You may be hired as a software developer, but situations may arise that require you to take on other responsibilities for a short or long period of time. The job description may leave out other roles, but you may be able to show you have these skills and put yourself ahead of the other candidates by being well-rounded.
Creativity You may instead consider this quality to be thinking outside the box. However you look at it, employers want someone who can up with non-obvious elegant solutions to a problem. It is important that you are able to come up with multiple solutions to any given problem.
Language Agnostic A programming language is just a tool you use to get customers what they want. For non-developer customers, they typically don’t care how things are implemented, because they use it at such a high-level. As long as they can do what they need to efficiently, they are usually happy.
You should understand the ideas that back your favorite language. Most frameworks provided with a language implement many standard data types and algorithms. These concepts span multiple languages, so it is more important to understand the concepts, and when to choose what data type, than it is to understand every single nuance of a specific language.
You should be able to regurgitate the basic concepts from your educational setting, binary/hex/decimal, recursion, procedural programming, oop concepts, algorithms, etc. If you aren’t able to articulate the basics you probably aren’t going to get the job. You should additionally be able to discuss the basics of all the tools and skills that you list on your résumé.
Design And Coding Skills As a developer it important to have both design and coding skills. You need to be able to design and implement a solution. You also need to be plan out and estimate your project and communicate that information with management and the rest of your team.
I feel a mix of computer science and software engineering will make you a better candidate. A “hardcore coder” is not useful to the team if no one can fix the bugs in their overly complex, uncommented code. A person who spends too much time on design work and can’t deliver on time is equally difficult to work with.
Recent graduates differ from everyone else because they have experiences, not experience. By that I mean they completed class projects, and maybe have a few internships under their belt, but they haven’t had the chance to make a living as a software developer.
They haven’t seen a large project with 30 developers succeed, or seen what it took to make it succeed. They haven’t been burned by scope creep and changing requirements. They haven’t had to compete with a competitors time line in hopes of keeping themselves employed. They haven’t had to clean up someone else’s mess after they left. They haven’t sat down in front of hundreds of thousands of lines of uncommented legacy code in hopes of fixing a critical bug before the day ends.
It is through experience that you realize the importance of the qualities I listed above. As a recent graduate you need to show that you either posses or are working on the qualities I listed above. Working on these qualities will help you get ahead of the crowd of recent graduates and put you ahead in the long run. Keep in mind these qualities go hand in hand with the technical skills required for the job. If you don’t have the technical skills, you will have a hard time getting an interview where you get to show off these qualities.
In an interview there is no need to apologize for being green. You should not advertise your deficits. Everyone knows it, just emphasize what you do know and what you are planning to learn next.
If you are wondering why college projects are not equivalent to working in the real world it is because college projects are not typically representative of the the situation you will enter upon graduation. In college, you often work individually or on a team and work on a project from start to finish. That is a great experience and very necessary, but you aren’t likely to find a new project where you get to work from the ground up right out of school. You will likely be dropped into the middle of a project schedule and you need to find a way to hit the ground running. That isn’t something that you learn in college, but it is something you will have to be good at when you enter the work force.
Think for yourself and do what you feel is right in your situation. If you feel I am missing some important non-technical qualities feel free to leave a list in the comments below. Good luck with your job search!
If you buy into the 10,000 hour rule, it will take 5 years at 40 hours a week and 50 weeks a year to reach that 10,000 hours. Consider that when you are wondering where you fit in with experienced developers.
If you are an employer or ever need to sit on an interview committee I recommend reading Blink by Malcolm Gladwell. There is a great section of that book that discusses unconscious bias.