JPMorgan Chase & Co.
Tech Stack
- Java
- C++ for trading/high-performance systems
- C#/.NET for internal applications
- Oracle / SQL databases
- Linux servers
- Spring
Month 6 - The FINAL Project
My apprenticeship is almost over. For the final month I was given a small internal project: build a dashboard that visualises system metrics for one of our services. It pulls data from logs and displays response times, error counts, and transaction volumes.
Nothing revolutionary but it solves a real problem for the team. When I presented it during our review session, one of the senior engineers said something that stuck with me: “Good engineering isn’t about writing brilliant code. It’s about making systems easier for everyone else to understand.”
Six months ago I came in thinking software engineering was about algorithms and solutions, now I see it differently. It’s about trust. Trust that the system will run tonight, tomorrow, and ten years from now. And if it doesn’t, someone will read the logs, trace the code, and quietly fix the problem.
Month 5 - Logs, Logs, and More Logs
If someone asked me what I’ve learned most about software engineering this month, the answer would be simple: logs tell stories.
I spent several days tracing a performance issue where a service suddenly slowed during peak hours. The culprit wasn’t obvious. CPU looked fine and DB queries seemed normal.
Eventually the team discovered an inefficient query triggered only when a certain dataset exceeded a threshold. A rare edge case.
I helped rewrite part of the query and add monitoring so we’d catch it earlier next time. This kind of work feels like detective work like I am patiently following clues through thousands of lines of logs until the system tells you what went wrong.
Month 4 - Inside the Machine
This month I started joining the team’s sprint meetings.
It’s fascinating watching engineers and business analysts talk about software in terms of risk, compliance, and performance rather than just features.
One small change to a transaction processing service triggers conversations about audit logs, regulatory implications, and system resilience.
I’m now writing small modules within a larger Java application. Nothing so mission-critical, but enough that I have to think about edge cases.
The biggest lesson this month: production systems behave differently from university projects.
In the real world, systems run 24 hours a day, process enormous volumes of data, and must recover gracefully when something inevitably breaks.
Engineering here feels less like coding and more like maintaining a living organism.
Month 3 - First Real Bug Fix
Today I fixed my first production issue.
Well, “fixed” might be generous. A small bug in an internal reporting tool was causing incorrect totals to appear in a dashboard.
The problem turned out to be a database query that wasn’t handling null values correctly. Classic SQL, why does it always have to be an Excel or SQL issue with me!
I remember staring at the log files for almost an hour before the pattern clicked.
After pushing the fix and watching it deploy to staging, the system ran clean. No errors. Correct totals.
It wasn’t dramatic, atleast I got a nod from my mentor and a note in the ticket system saying the issue was resolved.
Still, going home this evening felt different, something I wrote had quietly corrected a financial reporting error. That’s a strange kind of responsibility.
Month 2 - Hello World, but Corporate
This month I finally started writing code.
Not anything glamorous. Small scripts with tiny fixes, its work sitting quietly in the background but keeps systems running smoothly.
My first task was debugging a training module that intentionally had broken logic, so the point wasn’t the bug, it was learning the workflow: pull the repository, replicate the issue, fix it, push a commit, wait for code review.
Code reviews here are serious business. Every line gets questioned. Not aggressively, but thoughtfully. Why this variable name? Why this query structure? Could this break under load?
It’s like an apprenticeship in thinking, not just coding.
Somewhere in the process I realised something else: software engineering inside a bank is less about cleverness and more about reliability.
Nobody's applauding your flashy code. They respect code that's never failing.
Month 1 - The Quiet Shock of Scale
Day one inside JPMorgan Chase & Co. and I’m already realising something: nothing in textbooks prepares you for the sheer scale of enterprise systems.
The first week has been mostly orientation. Security briefings, compliance policies, and an introduction to internal systems that look like they’ve evolved layer by layer over decades. It’s a strange mix of old and new. A Java service speaking to an Oracle database here, a C++ component quietly doing heavy lifting somewhere deeper in the stack.
My workstation setup alone took two days. Internal repositories, access permissions, VPN tunnels, build tools. Banking software doesn’t trust you until you prove you deserve the access.
I spent most of this week shadowing a senior engineer reading through code that processes transactions. Not writing anything yet, just observing how everything connects.
It’s oddly comforting. Like being allowed to walk through the engine room before anyone expects you to steer the ship.
Written in 2009 · edited in arb moments for clarity · Darshani Persadh