Makings of a Great Software Engineer
Many software developers call themselves “Senior Software Engineer” or “Software Architect” but are they really? Recently I’ve meet a few people who claim to be more than they were:
An upper level manager claimed to be a “Software Architect.” On a project that was responsible for distributing millions dollars. He argued, during the design phase, against a ledger. Even after discussing GAAP compliance and ledger implementations in other accounting software, he would not budge his position.
A “Senior .Net Software Engineer” claimed the best way to send an error message via services was throwing exceptions:
public bool IsValidLogin(string username, string password)
{
if (UserLogic.IsValid(username, password))
{
return true;
}
throw new Exception("Invalid credentials were provided.");
}
Imagine consuming this method — expecting a “false” but receiving an exception.
Determining someone’s level is somewhat subjective. Here is what I look for: First, do you understand the pro and cons of your solution? Second, do you know the alternatives and can you compare and contrast the two solutions. And third, can you explain the architecture, performance, scalability and maintenance implications surrounding your solution?
4 tenets of a great software engineer
- Knowing your limitations
- Continuous Learning
- Experience
- Understand the business
Knowing your limitations
Knowing when to saying “I don’t know” is the most important asset a developer can possess. Without it you will never seek more knowledge, you will never ask for help and you will never master your profession.
Are you reaching the edge of your skill set? Can you learn the needed skills and complete the project in the expected timeframe? Are you out of your league? Knowing the correct answer is the art.
Continuous learning
New processes or methods are created daily. If you are not appraised and adding them to your skill set, your career is dying. One study suggests that in the software industry, if your skill set is two years behind the curve, it is obsolete. If this is you, you’d better consider a different career; maybe teaching would your cup of tea.
Google is your friend. Know it, love it, and use it. It is the single most used source to find answers. More than likely someone’s already solved your problem.
Find your niche and master it. There are many learning resources:, from podcasts to blogs, from user groups to getting a mentor. This is the information age; you can learn anything you want. If nothing else you can connect with the people who share your passion.
Experience
Experience is tough. Many employers and recruiting agencies key on experience. You can be disqualified solely on the years listed on your resume.
Software is a craft and its artisans are Software Engineers. We tailor each solution to its problem.
Experience will partly determine the success of the software. An under experienced engineer can craft the best solution and fail.
Failed software projects cost companies millions of dollars and can doom a company.
The best software engineers are the ones who have an insatiable thirst for crafting software. They augment their experience by continuous learning.
Understanding the business
As one manager told me “Marketing’s job is to spend money.” Clearly this manager doesn’t grasp the concept or purpose of marketing.
Understand the value of a solution to the business. Know the problem domain and how the software fills the gap.
Software must ship. Sometimes it’s to fulfill maintenance contracts, other times it’s to meet shareholder’s expectations. This means sometimes corners are going to be cut. Accept it, live with it and develop other day.