You can learn a lot on your commute home.
According to BrainStation 2019 Digital Skills Survey, 50 percent of executives say they will be doing the most hiring in development this year. Interestingly, though, our respondents also found development the most difficult field to hire for, and as the demand for these skills increases, it will only become more challenging.
What should companies be looking for? And how can aspiring Developers stand out when entering the market?
To start, consider the following definition, which provides a well-rounded picture of a good Developer:
“Writes working code, that has been tested for correctness, in the time allocated, following accepted best practices, in a way that can be easily maintained and enhanced, in collaboration with their team, and continuously improves their knowledge and skills throughout their career.”
Let’s take a closer look at these ideas to see what makes a good Developer.
A Good Developer Writes Working Code…
Computers are extremely precise, digital machines. The slightest deviation from what a computer expects means that code won’t compile, won’t run or will crash. The whole point of programming and building software is to write code that the computer successfully processes, producing the desired result. In other words, a good Developer has to write code that works.
He or she has a sharp eye for details and is constantly scanning code for anything that looks “off.” They write clean code that is well structured and uses tools to identify potential errors before the code runs.
That Has Been Tested for Correctness…
Just because the code works, doesn’t mean it works correctly. Getting the code to work is only the first hurdle.
Code that doesn’t work correctly is as useless as code that doesn’t work at all, and potentially more dangerous. Wrong results can have consequences, from mundane (and occasionally humorous) UI annoyances that frustrate end-users and inhibit their productivity — to the disastrous with loss of life or business revenue.
All errors missed by Developers will cause program crashes, system failure, data corruption, security breaches, or turn away users who expect reliability. These errors become increasingly expensive to fix as they find their way into production and are discovered by end-users. Just as physical structures require thorough testing to ensure they are “up to code,” software requires the same stringent standards.
A good Developer, therefore, adopts a test-driven mindset, actively imagining all scenarios where errors can occur, how they should be handled, and writing tests that prove the code is correct.
In The Time Allocated…
Computers represent the promise of efficiency and productivity. They allow users to accomplish and understand more. Developers work within this fast-paced world using computers to bring this productivity and efficiency to reality.
A side-effect of this world is the expectation of having everything done now. That pressure comes from managers, clients, users, and the business climate of getting to market first. That can create a lot of pressure, and Developers are only human.
Estimating time on projects is a difficult task, as there are many unknown and unexpected problems that come up when building complex software. There is always a temptation to underestimate and overlook the true details required to complete tasks. Yet underestimating time to delivery is dangerous, creating stress and burnout, the pressure to cut corners, and negative feelings from all stakeholders in the project.
It is important to identify all details possible for a project, have a realistic perspective of the amount of work that can be accomplished, and reasonably overestimate timelines to account for the unknown and unexpected. Communication is key when timelines start slipping and making sure that everyone is aware of difficulties ahead of time helps to handle and avoid missing deadlines.
A good Developer sets reasonable expectations, communicates openly about unexpected roadblocks, and maintains the trust of their team and other stakeholders.
Following Accepted Best Practices…
Once the code works (and works correctly), then it needs to be written in the best way possible. Whatever approach the Developer has taken in writing the code, it should be weighed against the solutions of the larger Developer community. A unique, novel approach may be an innovative solution–or it may lack considerations that other Developers have discovered over the years.
Writing software is a complex process with a rich history of many minds thinking about the best way to solve common problems. The result is numerous best practices.
Following these best practices saves time because problems don’t need to be re-solved (instead, existing solutions just need to be applied appropriately). This allows Developers to build “on the shoulders of giants.” Further, as different Developers contribute over time, there is a common understanding that any new Developer on a project can readily understand.
There are two levels of best practices: industry-wide and company-wide. Company-wide practices will generally be a subset of industry-wide practices but adapted for the specifics of a company’s software domain, and the preferences of the Developers.
A good Developer learns the best practices of their company and applies industry-wide best practices to save time and improve the overall quality of the code.
In a Way That Can Be Easily Maintained and Enhanced…
The code compiles, runs, and has been tested for correctness. Things look good, but…how easy is it to change the code in the future? What happens if a new feature needs to be added?
Engineer and Author Martin Fowler says: “Any fool can write code that a computer can understand. Good Programmers write code that humans can understand.”
While a computer can run any valid code, ultimately the code is maintained by humans. At some point, a Developer is going to have to read, understand, and modify code that may have been written by another Developer (who may no longer be part of their team or company).
Software development is a social endeavor, with many people working and relying on the codebase. Questions such as “How much is obvious from the code? How much needs to be explained? How quickly can the code be scanned and understood?” all help a Developer remember that they are not writing code for themselves.
A good Developer writes high-quality code that other Developers can easily understand and modify.
In Collaboration With Their Team…
While a Developer spends much of their time interacting with a computer, the reality of their work environment is social. It’s important to respect the team, know the roles, and responsibilities, and what’s expected. Big picture questions ensure the Developer is properly aligned to the company and their role: “What is the vision/mission/values of the company? What is the product suite offered by the company? Who are the customers? Who do problems get reported to?”
Knowing these details allows a Developer to grow within the context of their specific company or situation. A good Developer will, therefore, spend the time needed to understand the company’s best practices and standards. They will also improve the development process in ways that save time and increase productivity. Most importantly, they will have to have a positive attitude that makes the workplace more productive and supportive.
A good Developer recognizes that their career and reputation is their responsibility. They strive to be a pleasure to work with, and always find ways to make the workload of their team lighter and more efficient.
A Good Developer is Continuously Learning
Technology is always evolving, which is part of what makes it so exciting. While some principles and approaches of computer science have remained for decades, areas of software development are constantly changing. Some software domains are more stable, others are more volatile. Legacy software is entrenched with older technology that requires more maintenance with little innovation, while emerging domains may require frequent rewrites every few years as things change.
That’s not necessarily a problem if it is embraced. Knowledge in domains like data science, UX design, product management, marketing, and SEO, can strengthen a Developer’s overall understanding of technology, helping them relate and work with colleagues and clients across departments and industries.
A good Developer, in short, is a lifelong learner that is always looking to expand their knowledge and skills, year over year.