Imagine that you’re a hiring manager at a tech team. You hired a backend developer, Mark, recently. While brilliant technically, he struggles to collaborate cross-functionally and often misses deadlines without telling anyone about this. Your project manager Jen constantly complaines and says that his lack of communication and time management undermines the work of the whole team. We’re all different, and as characters of RPG games were better at some things and not as good at others.
Knowing what combination of skills and traits you look for in developers in your specific situation is extremely important. Sure, you need someone technically proficient to produce high-quality code. But well-rounded engineers with human skills, business acumen, and the right cultural fit build so much more — they design entire systems, lead initiatives, and steer products to success.
I’ve looked at hundreds of software engineering resumes over the years. We’re constantly looking for great people to expand the team and I over time we’ve crafted an optimal blend of technical skills and human-centered abilities we look for to thrive on our team. This post is the aim to describe them. It’s still work in progress, but I hope it will help you if you’re new to hiring engineers.
For software engineers, technical skills are the essential tools of the trade that allow them to thrive in their craft. Just as a chef masters culinary techniques or a violinist perfects musical scales, engineers devote themselves to perfecting their technical capabilities.
Fluency in programming languages and frameworks provides the basic foundation. Whether an engineer prefers expressive languages like Ruby or JS, they need to intricately understand the syntax, data structures, basic concepts like object-oriented design and language specific things like meta programming in Ruby closures in JS. Languages are the raw material for crafting applications.
Once they have coding basics down, engineers never stop expanding their knowledge. They eagerly learn new frameworks to stay relevant and build more dynamic apps. They read articles about design patterns like MVC or DDD, and apply them to write clean, well-organized code. Debugging skills allow them to methodically squash bugs that creep into systems. Testing skills ensure code performs as expected.
Software engineering is as much about hard science as creativity. Having strong computer science fundamentals, while not required, opens up a world of optimizations like more efficient algorithms and data modeling that are hard to find on Google and StackOverflow. Engineers apply analytical thinking to make systems scale elegantly.
For senior engineers, architectural skills become critical. They envision how all the parts of complex systems interact, planning for reliability and security from the ground up. Their deep expertise allows them to make critical technical decisions.
There’s always more to learn — application security, machine learning, new DevOps tools. Mastering technical skills never stops. Passionate engineers are lifelong students who find reward in continuously expanding their abilities. Technical excellence allows them to build amazing solutions and progress in their careers. The best engineers are technical experts, creative artists, and perpetual learners all in one.
Software engineering demands both technical expertise and human collaboration. While programming languages and database skills give engineers the power to build systems, soft skills make them truly effective professionals and teammates.
Communication abilities enable explaining complex solutions and articulating design tradeoffs. Engineers need to convey ideas clearly to colleagues with diverse backgrounds. Written specs and verbal discussions require translating technical details for broad audiences. Collaboration skills allow constructively critiquing peers’ code and reconciling disagreements. Brainstorming and creative problem solving leads to innovative solutions when tackling challenges. Emotional intelligence fosters understanding teammates’ motivations and staying cool under pressure. Mentoring newer engineers, contributing leadership, and supporting colleagues leads to shared success.
Soft skills complement technical skills to unlock an engineer’s full potential. Mastering human collaboration, communication, and emotional competencies accelerates an engineering career. Leadership and teamwork skills take work to another level. While coding proficiency is always foundational, good soft skills make technical abilities shine. They enable thriving in fast-paced, cross-functional software teams as they are today. Soft skills open doors that mastery of coding alone can’t. They help build robust solutions through relationships with colleagues across an organization, because there’s only so much you can do alone.
A software engineer’s personal traits amplify the soft skills and technical abilities. Key qualities like attention to detail, curiosity, and passion deeply affect professional success.
Meticulous attention to detail reduces mistakes and enables helps produce quality work through careful code reviews and precise requirement verification. Having an initiative solves problems proactively when engineers eagerly improve skills without waiting for direction. Strong focus and concentration boost productivity by entering deep flow states. Organizational skills like consistent naming and documentation facilitate collaboration. Patience and perseverance conquer complex debugging challenges that test the character. Intellectual curiosity via continuous learning keeps skills sharp by eagerly mastering new technologies. Passion for programming fuels engagement, with engineers who geek out on coding often delivering their best work.
Personal traits boost technical skills to unlock full potential. Qualities like curiosity, passion, and organization complement programming expertise. Professional engineers blend skills, personality, and vision to produce amazing results. Careful attention ensures mistakes don’t slip through the cracks. Patience breaks through stubborn bugs. Consistent organization reduces team chaos. Passionate curiosity enables continuous improvement. Personal mastery gives meaning and fuller expression to an engineer’s technical abilities. With amazing soft skills multiplying coding ability, one thrives in leadership roles and maximizes positive impact. Well-developed personal strengths unlock doors that technical ability alone cannot. They enable flourishing in roles demanding both engineering excellence and collaborative leadership.
Methodologies give structure and efficiency to engineering teams, amplifying their productivity. Understanding these methods helps engineers work collaboratively to deliver high-quality applications.
Time management skills like estimating tasks, no matter how we hate this, and prioritizing backlogs helps focus efforts on the most critical work. Breaking projects into sprints with actionable steps improves follow-through. Agile methodologies that embrace evolving requirements keep projects running through constant iteration. Running disciplined sprints and retrospectives prevents scope creep. A product mindset focuses on solving user needs rather than just writing features, ensuring the result is relevant.
Methodology mastery improves engineering effectiveness. Adopting project management techniques gives order to activities without relying solely on project and product managers. Agile frameworks promote flexibility and feedback. A user-centered perspective grounds decisions in real value. Methodical approaches prevent wasted effort and accelerate progress.
Knowledge of software methodologies complements an engineer’s technical coding skills. Understanding time-tested techniques helps technology efforts smoothly align with business objectives. A structured methodology guides team priorities and decision making. Cross-functional collaboration becomes streamlined. Tools like sprints and tickets coordinate diverse roles. Engineers gain focus on iteratively delivering products that solve real user needs. With coding excellence now bolstered by methodology, engineers can consistently execute and provide even more value. Technical and methodological mastery together enables engineers to thrive as senior technical leaders and strategists.
Domain knowledge enables developers to build relevant solutions tailored to company or client needs. Understanding the business context and requirements is crucial for delivering value through technology.
Engineers familiar with the industry, market, and competitors can evaluate how software impacts operations and strategy. This insight informs critical technical decisions. Knowledge of the problem space and required capabilities guides designs. Deep requirements gathering via stakeholder collaboration ensures user needs are satisfied.
Domain fluency focuses engineering efforts for maximum benefit. Features maps to tangible business goals. Technical tradeoffs weigh business impact. Systems align with required use cases. Developers can and need to be able to quantify potential technical debt versus value to prioritize work.
Mastering domain concepts is as essential as coding skills. Technical excellence without domain knowledge risks elegant but useless software. Developers who immerse themselves in business operations, needs, and challenges can target development for meaningful solutions.
Domain mastery combined with coding prowess enables engineers to thrive as true partners in business strategy. They apply technology carefully to create systems that provide competitive advantage while spending the least needed effort. Knowing what matters most to the company makes technical talent shine bright.
A strong culture fit allows software engineers to collaborate smoothly and contribute meaningfully within teams. Aligning values and working styles with company culture accelerates success.
Engineers who share organizational values like transparency or user-centric designs inherently work in harmony with company goals. Willingness to mentor newcomers propagates institutional knowledge. An openness to collaborate builds relationships and amplifies results.
Compatibility with prevailing working styles also facilitates effectiveness. In small companies like ours, comfort with ambiguity and wearing multiple hats prevents frustration. At large enterprises, methodical analysis and communication may be highly valued. Cultural alignment ensures engineers complement existing strengths.
Culture often defines acceptable tactics. In many firms, us included, heated technical debates may be encouraged. More consensus-driven workplaces rely on compromise. Cultural fit promotes using appropriate strategies.
Technical wizardry alone cannot guarantee an engineer thrives. Aligning values, styles, and norms with company culture is crucial. A strong match empowers working in sync with organizational rhythms and values. It allows fully applying skills within accepted channels. Soft skills cement culture fit. When engineers feel at home in company culture, technical prowess transforms into optimal contributions.
Assembling a dream team of developers requires evaluating both technical competence and human abilities. It’s important for those who are responsible for hiring in companies, to at least be able to recognise what skills and traits a person possesses and make an informed decision.
Some things are less important depending on a situation — if you have a good project manager who was time and energy to coach someone with soft skills that are far from perfect, or you’re hiring a junior engineer, you can focus only on technical ability. If you’re looking for a CTO, you probably want to check as many boxes as possible as he’ll be the one coaching the whole team.
Originally posted on Medium.com