I'm Adam Bates, a senior software engineer working on backend systems, integrations, and developer tooling.
At Capital One, I came into an ATM system I hadn't worked with before. I learned how its application, vendor platform, host, and hardware behaved together, then used that understanding to lead the interface modernization team's technical work and independently design and build a Python validation platform.
That platform gave engineers, product, legal, and hardware teams a shared way to inspect implemented customer journeys, test evidence, and remediation reports. I also worked across those system boundaries to trace production problems, including a reboot loop. The larger modernization was still in progress when I left.
At JPMorgan Chase, I independently implemented Kafka messaging for trade routing, built Java/Spring Boot order-management services, and built an audit system that made bugs easier to identify. I also led a database migration to AWS, including data validation and a team-reviewed cutover.
The connection between those roles is the kind of work I want to keep doing: understanding how a system behaves, following problems across its boundaries, and building software that makes it easier for other people to work with.
Core stack: Java, Spring Boot, Kafka, SQL, Python, and AWS. My M.S. in Applied Physics and Computer Science also informs how I compare alternatives and test what a result actually supports.
- Capital One: learning the system and making its behavior visible
- JPMorgan Chase: order routing, diagnostic evidence, and migration
Download the professional portfolio (PDF).
These accounts separate my contribution, the team's work, and the limits of the result. I'm happy to walk through the decisions behind either one. Connect with me on LinkedIn.
These projects show how I investigate failures, make design decisions, and verify results. They are independent implementations, separate from employer systems.
Reliable command processing requires more than receiving a message. I built separate service and simulated-device processes with durable journals to explore duplicate delivery, lost completion responses, and recovery. The service inspects journal evidence before deciding whether to retry; unresolved physical outcomes require inspection. This is a simulation, not a claim of exactly-once physical execution or power-loss safety.
Explore the recorded timeline · Read the code and run it locally · Inspect the crash tests
I compare greedy placement and seeded genetic search against exhaustive enumeration under shared capacity, deadline, and cost constraints. The experiments expose assignments and the gap from the optimum, so the result can be assessed against its configuration and search budget.
This is an independent October 2026 implementation. My 2022 master's thesis addressed a richer fog-network placement problem; it is separate research. Read my thesis note.
Explore the recorded experiments · Read the model and run it locally · Inspect the measurements
Both viewers show recorded output from local runs. Each repository also starts
with python run.py for fresh experiments without a cloud account. I use AI
assistance and verify the work through explicit behavior contracts, tests,
and reproducible experiments. How the illustrations are made.
