“The best engineers are not just the people who can solve a problem; they are the people who can work out which problem is worth solving.”
When I first joined JPMorganChase at 18 through a scholarship program, I did not fully understand the scale of the firm I was entering. I remember arriving in Canary Wharf for my first interview, nervous enough to get lost, and then being struck by the size of the building in front of me. Since then, I have completed two internships within the Commercial & Investment Bank, rolled off the Software Engineer Program, and grown into an Associate Software Engineer in Asset & Wealth Management Technology in London.
Looking back, my expectations of software engineering have changed a lot in the past seven years. As a student, I imagined the role as mostly independent: sitting at a desk, writing code, solving technical problems and moving on to the next task. What I have learned is that engineering in a large organization is much more collaborative and contextual. Code still matters, but it must sit within a wider ecosystem of platforms, controls, users, data flows, architecture and security. It’s not just about implementing a solution; I have learned that a good engineer must explain trade-offs, ask the right questions, reduce ambiguity and help their team make better decisions.
My growth has come through a ladder of small steps that compounded: my first bug fix, first pull request, first release, first feature, first chances to support others. When I look into the future, I don’t see those small steps as clearly mapped out for the next generation. Those future engineers will be defined by more than how well they write code.
For me, this can be summarised in five key skills that I believe will serve software engineers for years to come:
- Judgment: AI can generate ideas and solutions quickly, but engineers still need to decide what is appropriate. Judgment helps us know when to reuse, when to simplify, when to challenge a requirement and when the fastest answer is not necessarily the right one.
- Problem framing: The best solutions start with a clearly understood problem. Problem framing means turning ambiguity from users into clear goals, constraints, assumptions, risks, success criteria and a delivery plan. It helps teams avoid rework and focus on the outcomes, not just the request.
- Learning velocity: Tools, platforms, and expectations are changing quickly. The most valuable engineers are those who can learn responsibly, ask focused questions, test their understanding, and quickly deliver impact in new areas.
- Domain knowledge: Understanding business context helps engineers know why a system exists, not just how it works. It improves prioritization, makes technical decisions more relevant and helps engineers build solutions that solve real user problems.
- Architecture and security principles: AI-generated code can look polished while still missing important considerations. Engineers need to think about security, resilience, testing, observability, maintainability and architecture from the start, so what we build is not just fast, but safe and sustainable.
For engineers, that means we must start using AI deliberately, documenting decisions, building reusable patterns and building closer relationships with our users and stakeholders. We should stop measuring value only by lines of code, accepting requirements without understanding the “why,” and treating AI output as automatically correct. We should continue strengthening fundamentals, asking thoughtful questions, using code reviews as learning moments while prioritising security, resilience, and maintainability of our code.
We must also champion engineers across different levels by giving them context, not just tickets. Invite them into design discussions. Let them see trade-offs being made. Use code reviews to explain reasoning, not only to request changes. Give them meaningful ownership at the right level, expose them to business users and teach AI usage as an engineering skill.