Codewars CEO Jake Hoffner provides 10 valuable traits he looks for in a software engineer.
So, you want to be a software engineer. You did the work, put in the time, and are ready to pursue one of the most in-demand jobs on the market.
You may be wondering how to get a job as a software engineer or if you have what it takes to get hired. Aside from impressive technical skills and nailing the developer interview questions1, there are several other traits employers, myself included, seek out when hiring for software engineering positions. Hiring the right software engineers is critical to a company's success. While testing a potential hire's coding ability should be the first step in assessing fit, technical skill is only one requisite of the job. There are other skill sets in high demand.
Aside from strong computer programming fundamentals and a promising professional portfolio, job seekers need to possess a range of soft skills to succeed in software engineering roles. From the perspective of an employer, here are skills employers look for when hiring a 10 software engineer.
A software engineer who is passionate about their work will be 10x more effective than someone who is in it just for the paycheck.
A passionate programmer may not necessarily consider software development both their job and their hobby, but they often do. They like to explore new technologies and concepts, and are constantly pushing their limits, not because they have to, but because they enjoy the challenge. They will often spend much of their personal time learning technologies they are excited about, and because of this, exhibit steady growth in the work place.
State of the art of programming is constantly evolving. Software engineers need to demonstrate that they can pick up new technologies, techniques, and best practices quickly. Once a developer understands the core concepts of programming, they should be able to build off of that knowledge. If a software engineer can't pick up new programming skills, they aren't going to last long in the industry. Staying up to date with cutting edge technology is pertinent to a company's advancement, innovation, and success.
A software engineer who understands why they’re doing what they’re doing will stay focused and on task. They are able to prioritize and take time management seriously while working on multiple projects at once.
Like mentioned above, a software engineer should be generally passionate about their field, but also have the discipline to stay focused on short and long term goals. Hiring managers don't want software engineers who find themselves on tangents, trying to implement unnecessary technology into the codebase or trying to over-optimize things they're personally interested but aren't a high priority for the team.
Most companies are not hiring "generalists".
Generalists are developers who have a solid foundation in computer science and a broad knowledge across different types of technologies and computer systems, often with one domain that they know best. For example you may have a generalist web developer who can do both front-end (UI) and back-end (business logic) development.
Of course, it's still incredibly important for a software engineer to have solid fundamentals and a strong understanding of their domain, but they should also be an expert on the specific technology subdomain they are being considered for. A web specialist would likely know much more than a web generalist about front-end development, but little to nothing about back-end development.
While generalists are great utility players, they typically won’t be an expert in niche subject matter. Most companies are looking for specialized talent to fill a certain software engineering role . Advances in development are happening so rapidly that it’s becoming increasingly difficult to be a generalist while also staying on top of the latest developments within a specific domain.
A software engineer can have exceptional talent, but if they don't know how to work within a team, they'll have a hard time keeping a job.
Programming is a form of reproducible logic and thought, therefore developers will invariably have their own style. When presented with a complex problem, you’ll rarely see two software engineers come up with the same exact solution, or even the same general approach.
When looking to hire a new software engineer, I watch their code writing process to gauge adaptability and to understand if their unique approach will fit into the team’s collective approach.
Software engineers should write documentation that helps their colleagues understand their work, and they should be able to present their thoughts and take constructive feedback without taking personal offense. Things like clean code, readable documentation, and using consistent concepts are key parts of being a good team player.
That being said, software engineers need to show that they can adapt to the standards of a team and write code that everyone can understand. Code should be written in a way that makes logical sense and isn't overly specific to the programmer's own unique style of organization and thought. With this, new software engineers need to be able to understand how an existing codebase works and how to responsibly add to the collective work of the team.
Effective communicators are consistently sought after in every position – this isn’t unique to software engineering. That's because miscommunications are expensive and time consuming.
Software engineers need to be great communicators to reduce errors, increase efficiency, and save money. Miscommunicated product goals are detrimental the company, clients, or users. What do those three things all directly impact? The bottom line.
Additionally, many companies work with the Agile framework. Within Agile, professional software engineers are expected to participate in scrum meetings, whiteboards, and pair programming. It's hard to have productive sessions with poor communication.
Having employable communication skills doesn’t mean you need to be an extrovert. Good communication skills boil down to your ability to explain the projects you're working on, ask for help, brainstorm ideas, collaborate with teammates, listen well, and accept constructive criticism.
Effective communicators aren’t afraid to respectfully speak their minds and engage in problem-solving discussions. Thesae are traits that stand out to a hiring manager and will positively impact your job search.
Problem solving is at the core of software engineering. This involves a few things .
First, software developers need to be able to prove that they can quickly identify the cause of an issue. Next, they need to show determination and efficiency in solving it. This might be a bug with an existing set of code, a scalability problem when there’s an increased demand of a product, a maintainability matter when dealing with increasing complexity of code, etc. Not only does the problem need to be identified efficiently, but the developer must also be able to solve it in a clear and concise way.
Great programmers take pride in their craft. They write efficient code that is well thought out and well tested. They sweat the details, while still aware that they need to deliver on time. Craftsmanship is all about the quality of the product.
There is a big difference between simply being skilled, and executing that skill with creativity and dexterity. Potential employers get excited when an applicant genuinely cares about the craft of software engineering.
A good software engineer doesn't shy away from ownership. Software engineers that show ownership take responsibility for a project while showing confidence in their abilities. The ability to “own” an assignment means that a software engineer is proactive and needs little supervision.
Ownership won’t always result in perfection. When things go wrong, software engineers who show strong ownership skills are accountable and take pride in problem solving. Other signs of ownership include showing interest in volunteering for new responsibilities, willingness to gain experience, taking initiative, setting the team up for success, and having growth-oriented career goals.
Business acumen is the ability to understand and operate within the business context of your company.
A software engineer with a working foundation of good business sense knows how their work affects the bottom line and can make decisions accordingly. They are able to see the big picture, identify trends, and articulate the impact of technology decisions on business goals.
While this skill is more likely to be expected and utilized in more senior positions, it is valuable for all software engineering levels. A software developer who understands the trade-offs between perfect code and business impact will be a huge asset to a company. Pursuit of perfect code costs time and additional expenses. In software development, you need to focus on delivering the product. Work to improve it can come later. The priority should always fall on software solutions that strike a balance between speed, performance, maintainability, and cost.
Having technical skills is incredibly important to land a job as a software engineer. The software engineer job market is competitive. However, technical skills alone won’t promise a lucrative career path. If you want to be a stand-out software engineer candidate, make sure you consider all of the in demand skills to set you apart from other engineers.
Ten out of ten times, an employer would rather hire a software engineer who works well with their team, learns quickly, and is ready to hit the ground running than a candidate who is highly skilled but uninterested in adapting, communicates poorly, and shows little interest in the craft.