What Makes a Great Software Engineer?

Excellent developers are the lifeblood of software companies.

Therefore, organizations and HR teams must think hard about the values that make an individual the best fit for their teams.

Different organizations follow different practices and working styles, and have unique preferences regarding a good candidate. However, there are a few qualities that we believe everyone can agree on – qualities that developers should strive to embody as they navigate these roles and attempt to make a difference.

Here’s an outline of the post so you can easily navigate or skip ahead: 

{Quality #1}: Experience and Intuition

Broad Technical Experience

When HR teams evaluate software engineers through their CVs, the industry technical experience section is perhaps the first yardstick of their competence. You could be a topper in grad school, well versed with all major CS subjects, a rank-holder on LeetCode, but there are aspects of real-world development experience that you only learn through experience. 

We learn who we are in practice, not in theory. - David Epstein, Range

How long has the individual been into software development? What companies has he/she/they worked for? What roles has the individual been assigned to in the past? What are the projects the individual has worked on? How many programming languages and frameworks is the individual familiar with? 

These questions reveal a picture of the individuals who’ve been in the thick of brainstorming product features, common development and deployment issues, meeting deadlines, witnessing how applications are maintained, scaled, or built.

This first-hand experience with the ins and outs of software development speaks about how comfortable the individual is likely to be when filling a new position. Apart from programming and development skills, new talent provides a fresh perspective into existing processes and how to solve or avoid common issues in the first place.

Full-stack Knowledge

The requirements criteria of experience can sometimes vary across different roles, but there’s one constant that will always be valuable to possess. And that is a holistic understanding of full-stack development. 

Full-stack here doesn’t refer to being aware of all the workings of your code - in and out. It means knowing all aspects of your application from the front-end code files to the server serving them, from the databases connected to fetch data and the deployment pipeline, along with everything else encompassing the software development lifecycle.

The idea is for engineers to know where their work fits into the scope of the entire application. This overview enables them to make better decisions in their local expertise domain to drive the organization’s growth as a whole.

Intuition

Intuition image

Truly successful decision-making relies on a balance between deliberate and instinctive thinking. - Malcolm Gladwell

A primary virtue of an experienced individual is a developed intuition. This involves having a hunch about where and what might have gone wrong in the application’s infrastructure and ways of making amends. This feeling about things (plans, ideas, code implementations, performance metrics, etc.) sounding or not sounding right based on years of experience can prove extremely valuable to a company when making critical decisions in the face of uncertainty. It isn’t always possible to logically evaluate or foresee the consequences of future decisions and courses of action. Therefore, it becomes imperative for teams to have individuals who can let their sound intuitions call the shots.

Why It’s Important

Broader experience directly translates to a well-rounded understanding of the nature of development lifecycles and a more accurate intuition about potential events. It is significantly beneficial for the following reasons –

{Quality #2} Attention to Detail

Attention to detail is a skill that seems to be on the decline these days. Abstractions over abstractions of code make it convenient for developers to write programs. However, it often comes at the cost of missing out on a fine-grained understanding of the system’s internals.

Writing software is complex. So many things have to work just right to get the whole thing to run smoothly. But all it takes is one unhandled (even unimaginable) edge case to bring the entire thing down. Sometimes it will fail for much less than that. Being meticulous and thorough when building software, therefore, becomes a highly valued quality. 

In covering software across its breadth (trying to learn more modules, frameworks, technologies, and languages), amateur developers can lose touch with the depths of things. They are likely to get done with whatever work they are assigned cursorily and even declare completion a bit too early. This puts them at a disadvantage when something internal breaks down a little later; for then, they need to dive into it from scratch again. Exceptional software engineers, however, will go deep from the word go, get a better grasp of the internals, and, therefore, are likely to do a more foolproof job the first time itself. And if some issue were to come up with this part in the future, their strong foundational understanding will reduce the amount of time required to fix things.

Here are some of the traits common to outstanding software engineers who are attentive to detail –

However, you also wouldn’t want to miss the forest for the trees completely. It’s essential to strike the right balance.

“You’ve (also) got to think about the big things while you’re doing small things so that all the small things go in the right direction. —Alvin Toffler”

Ideally, a balanced mix of attention to detail and big picture thinking — the ability to envision the future and the scope of a feature or the whole project is the mark of a great software engineer.

Why It’s Important

Below are the key advantages of a detail attentive engineer –

{Quality #3} Quick Self-Learning, Flexibility, and Adaptability

The software industry moves fast. New technologies rise to the top just as quickly as old ones depreciate. Developers need to be on their toes and ready to adapt to whatever technology comes their way. This also enables them to blend in better in different teams with different preferences, practices, and processes.

In any software job, there are times when you need to deep dive into codebases and understand the roots, and then there are times where you just need to learn enough to get the work done within a narrow time frame. This agility in adapting to something outside of their comfort zone is an indispensable quality for an engineer. It requires flexibility and proficiency in self-learning.

Self-learning is the skill of treading uncharted waters and being just as comfortable because of the right set of resources, talking to the relevant groups, persistence, and experience. Experienced engineers consequently can grasp new concepts by quickly processing new information and making connections with their existing mental models.

This quick-wittedness, willingness to learn, adapt, and morph into what’s expected of them stems from a sense of curiosity and a love of learning — another essential quality we’ll touch on later.

Why It’s Important

Knowing and being good at everything is impossible, but what is possible is to master the skills of self-learning, flexibility, and adaptability and work through anything that comes your way. Below are its advantages —

{Quality #4} Productivity, Planning and Time Management

Time management and planning are methodical skills that have never been as crucial as they have been in the last year and a half. As people juggled between their work and personal lives, it became even more essential to have systems to ensure that teams are in sync, collaboration is effective, people’s private lives are undisturbed, and operations occur smoothly. This naturally complemented the modi operandi of productive engineers and helped them navigate remote work easily.

Nevertheless, remote work or not, exceptional software engineers will always thrive because they prefer to pick more organized and structured approaches over ad hoc ones. This knack of planning, decomposing big chunks of work into smaller, more manageable and trackable tasks, blocking distinct blocks of time for deep work and relaxation, and being more intelligent about managing their time and energy plays a pivotal role in their success. Here are some of the traits of a productive engineer —

These traits can often be easy to spot in new hires with easy questions like “What does your daily routine look like?” and “Are you a planner or do you like to go with the flow?”.

Why It’s Important

The benefits of productive work habits compound over time. The following are the reasons–

{Quality #5} Curiosity and Love of Learning

“Curiosity is the wick in the candle of learning.” - William Arthur Ward

The most successful software engineers are curious to understand how things operate to their very core. This internal drive to observe, investigate, and learn goes a long way in determining an individual’s success. 

When you focus on learning the mechanics of any concept, process or implementation, instead of just completing the assigned tasks and getting stuff done, you are automatically in a better position. The depth and breadth of understanding achieved this way is extremely valuable in uncovering insights that can improve the company’s products. Consequently, this also shows in the outputs — decisions and operations are well researched and carefully analyzed, stacking the odds of success in your favor.

A crucial aspect of learning is being open-minded and flexible — not rigidly tied to predated notions of doing things. This is also where humility comes in. A top engineer will always be humble about how much more there is to know about everything and be willing to unlearn out-of-date methods. With this kind of temperament, the path only goes onwards and upwards. You could be the most experienced developer on your team, but if you aren’t willing to explore new technologies and stay up to date, you will not do so well for long.

Why It’s Important

Most other incentives and motivators are external for software engineers, but curiosity is internal, and therefore perhaps most important.

{Quality #6} Business Sense

Intending to become the best software engineer there is (i.e. learning the most number of frameworks, programming languages, algorithms, etc.), amateur developers often miss out on their software’s business side. Engineers who are willing to get out of their comfort zones and venture into the financial realms to make more intelligent and informed software decisions are ultimately a boon to any company.

To have a sense of the business dynamics of your company, you don’t need to be a business whiz or require an MBA degree; just a keen mind will do. Engineers with such a propensity towards the business and its finances will focus more on acquiring user feedback, planning and building features, keeping the end-user in mind, scrutinizing business models, and interface with the business teams to keep themselves updated.

The idea is to leverage your technical understanding of the product’s roots (something that the business team might lack) and use that to develop strategies. This fresh perspective can generate insights that can be pretty valuable for the organization.

The more context the engineering teams have about how their software plays out and how it impacts the business, the better decisions they can make on their end. This is why a competent software engineer, while focusing on his expertise, would always have an eye on business strategies and improving financial performance.

Why It’s Important

Business acumen is an excellent bonus quality for the following reasons –

{Quality #7} Social Skills and a Positive Attitude

In the last year and a half, social interaction among team members has greatly suffered due to the transition to remote workspaces. Several reports have also suggested a decline in collaborative productivity in the work-from-home era. This only highlights the significant role of interpersonal interactions and team bonding in creating an environment of collaboration and getting things done.

It is no surprise that individuals with outstanding interpersonal skills shine in remote setups as well – making the most of the video meetings, putting themselves out there, helping others, being an encouraging influence, taking time outside of meetings to connect with colleagues, and more. These individuals can make work fun, build strong relationships with teammates, elevate team morale, and get things done. Imagine how much good they can do in physical office spaces.

As offices seem to be opening up in most countries worldwide and office dynamics seem to evolve into some hybrid of remote and on-site work, these are the engineers organizations want on their team.

Communication

The Pyramid of Most Useful Social Skills in Teams

If there were a pyramid diagram of the most valuable social skills in a software company, communication would be the easy choice for a foundation. Whether it be for discussing project requirements, getting ideas across, receiving feedback, assigning responsibilities, or resolving conflicts between colleagues, personable communication skills serve as an indispensable tool for a software engineer.

Moreover, this skill set benefits on two fronts – communication with clients and fellow teammates – including technical and non-technical staff. As far as clients are concerned, more transparency in project requirements, no mismatches between expectations and possibilities, and the harmonious sync from clear communication do a world of good to the end goal.

As for intra-team dynamics, better communication skills facilitate creative expression of ideas, allow everyone to be on the same page about the task at hand, improves the group’s grasp of project challenges and technical concepts, and make room for better problem-solving. It also saves people from digging into lengthy documentation or specification files, thanks to equally useful summaries and help from colleagues.

Moreover, a cogent presentation of ideas can convey information transparently and creates an impact, influences important decisions, and ensures that the best ideas don’t get lost behind long lists of unread emails. This is the kind of impact that successful engineers end up making wherever they go.

Now let’s look at one of the primary advantages of effective communication.

Collaboration

The popular notion of a solo developer building a product from scratch and doing everything all by himself is a gravely inaccurate and unhealthy one. Collaborative efforts towards a project are beneficial for the project itself and equally important (if not more) for the engineers themselves. Developers can't become better in isolation. The kin collectively shines and grows.

The best software engineers foster values like honesty, trust, transparency, humility, reliability, and open-mindedness in the groups that they work with. They cultivate solid bonds and build relationships with their peers that positively influence the quality of work they put out.

The first step towards nurturing such healthy collaborative relationships is to be a team player — to help others when they are stuck, share tips and tricks that have helped you in the past, teach them skills you’re good at, and most importantly, be willing to take the first step and reach out. 

Positive Attitude

Software development is not easy. A relatively significant portion of your time goes into troubleshooting, debugging, fixing issues, and putting out fires all over. It’s therefore difficult to keep your chin up all the time. But the silver lining is that usually, there’s always a solution. And that’s what exceptional software engineers focus on — because they believe in the shared goal of the company and the product.

Such an optimistic lookout and positive attitude can be contagious – and can even transmit across a distance of more than 6 feet. It can spread through Zoom meetings, audio calls, and even just regular emails. It motivates other team members, drives them to focus on the bright side of things, and look at the bigger picture.

Why It’s Important

A positive attitude with proficiency in social skills like communication and collaboration has several benefits —

{Quality #8} Discipline, Commitment, and Punctuality

“Success is nothing more than a few simple disciplines, practiced every day.” – Jim Rohn

It takes discipline to follow rigorous coding standards laid by the organization for ensuring top-notch code quality. They require you to adhere to established software process models, best practices, programming principles, unit testing, documentation, and more. Amateur developers might not be as meticulous about complying with these standards, but successful software engineers will because they understand what is best for their application and their company. Writing clean code and building performant software is an art. And art requires discipline.

Successful developers are driven by a steadfast commitment to the organization and product. They show up, put in the hard work, take responsibility, and make amends when things go wrong. This attitude of putting the organization’s requirements above one’s own is highly valued in the market today.

It is one thing to commit to something, but a whole other to deliver on it. Ultimately what matters is shipping out quality code on time — being punctual in completing tasks and meeting deadlines. This consistency, regularity, and punctuality in getting things done make a great software engineer stand out from a group of good ones.

Why It’s Important

Discipline, commitment, and punctuality speak volumes of an engineer’s work ethic. They are of crucial importance for the following reasons –

Closing Thoughts

Here’s an exercise for you all. If you are just starting as an engineer yourself, make a note of these, and think about how you could embody them. However, if you are an experienced software engineer, think about how many of these qualities would you give yourself a full score for and where you could do better?

This self-evaluation should present a good picture of the importance these values hold in your view and help you align them accordingly. If you are interested in learning from more such articles around software and web development, subscribe to our newsletter, and check out our blog

One last thing we forgot to mention about intelligent software engineers is they make sure to use Application Performance Monitoring tools like Scout APM to identify bottlenecks and gain actionable application performance insights.