A software engineer’s primary responsibility involves solving problems. For each problem encountered, there’s a set of real or artificially imposed constraints that make the solution difficult. It is critical for an engineer to use analytics, logic, and reason to draw meaningful conclusions from ambiguous data. Constraints are imposed from a wide variety of sources. They may be in the form of cost, performance, customer, deadline, quality, environmental, etc.
The problem solving process involves the following steps. Each step is associated with ancillary competencies that an engineer leverages while proceeding through the process.
Accurately defining the problem is a key step in the problem-solving process. This requires an engineer to possess great context-awareness. They must understand the constraints imposed by their environment, the complexity of the problem statement, and the precise nature of what the customer is trying to accomplish.
Generating solution alternatives involves an engineer’s aptitude for creative thought and their ability to draw meaningful conclusions from prior engineering experiences. It is important that an engineer possess great technical awareness, as this allows them to understand which frameworks and technologies should be considered, even if they don’t have specific experience with the alternatives under consideration.
The process of evaluating and selecting the appropriate alternative requires analytical, judgment, and decision-making skills. An engineer must weigh the customer needs against the constraints and potential solutions. In some cases, speed-to-market may require an engineer to sacrifice technical excellence. In other scenarios, the technical design may be so critical that a product launch is delayed until the architecture is just right. An engineer needs to make pragmatic decisions based on the entire product context, not just evaluating a single facet of the problem or solution.
The final step of the problem-solving process requires an engineer to leverage their technology-specific skills to create a working solution to the problem. Depending on the scope of the solution, an engineer may be required to exhibit political-savvy and influence, as well as project management competencies.
Engineers encounter resistance to their solutions for a variety of reason. Many are political in nature. The solution may encroach on the domain of another team’s product. The organization may be unfamiliar with the particular technology and reluctant to adopt it. A successful implementation often requires an engineer to leverage their sphere of influence to create a critical mass of support.
Tell me the most difficult problem you’ve encountered, and describe how you solved it. This should be a conversation about the depth of the problem, the difficulties encountered in solving it, and the ingenuity required to come up with a solution.
Show me the code you’ve written that you’re the most proud of. There is no more-telling proof than a candidate demonstrating what they’re most proud of. In some cases, there will be challenges, because the code they’re most proud of will be owned by their employer. However, if they don’t have any code in public repos that they can share, they may not have a passion for coding. Many organizations also use a case study or coding exercise as part of the problem-solving assessment during the interview process.
If you had the choice to use technology [A] or technology [B] for problem [X], what would you choose? Why? This question is about making sure a candidate understands the choices and the associated tradeoffs, the context of the problem, and they are able to make appropriate decisions based on the constraints and the desired outcomes. An alternative form of this question may be ‘How would you design a system that solves problem [X]?’
Attention all leaders of software teams! Are you interested in discovering a consistent framework for evaluating software engineering talent?
The most important responsibility for a leader of a software development team is to hire the right talent. Hiring the right team will make you look good, regardless of whether you have any faults and weakness. However, if you lack the ability to properly assess engineering talent, it is highly likely that you will fail.
This book will help you conduct a complete talent assessment of interviewees without focusing too heavily on a candidate's skills and knowledge and will help you to:
It doesn't matter if you are the best leader in every other way, the universal truth in software engineering is that you can't lead poor talent to do great things!
But with this book you can eliminate having poor talent in the first place and make sure that only the best people work for you. Every time