Python · Java · React · Fintech data integrity
Neeraj Sharma
Software Engineer II, Serrala — Alevate AR & CashApp
I ship features end to end where the numbers have to be right — ingestion pipelines, relational schema, REST contracts, and the React grids those APIs serve.
- 6 yrsbuilding production backends
- 4+ GB/dayof log spam eliminated
- 40%lower API latency at peak
- 30%faster enterprise Java apps
- 25%query latency cut
- 100K+active users served
Deduction ingestion
Alevate AR · Python · PostgreSQL · AWS S3 · multi-tenant
A financial record that imports twice is worse than one that fails to import.
I rebuilt the deduction CSV path end to end: stream the file straight from S3, key each row on a deterministic hash, normalize the hot fields out of the key-value store into indexed columns, and record every field change — so an import is auditable from upload to grid.
boto3 rather than the web tier's FileStorage, so an import outlives the HTTP request that started it and the uploaded file is retained for audit. Each row is keyed on a deterministic hash of (Reference, Class, Cheque, Date), which stops the same deduction landing twice across re-uploads. Class and Account Manager were promoted out of the polymorphic custom-fields store into dedicated indexed PostgreSQL columns — API and UI contracts unchanged — so filtering happens in the database instead of in memory. Every modified field emits an old/new audit row, including on the bulk-update path the ORM lifecycle hooks never see.Known limit, stated plainly: legitimate line items can still collide on those four fields. I found the collision, specified a CSV row-number extension to the key, and it is not built yet — so this path is deduplicated, not yet collision-free.
What I own
Two stacks and the surface they serve. Python on the accounts-receivable application, Java/Spring on the cash-application microservices, React on the grids in front of both.
- S3-native CSV ingestion Deduction imports stream directly from AWS S3 via
boto3, dropping the web-tierFileStoragedependency and retaining uploaded files for audit — which decouples an import from the lifetime of the HTTP request that triggered it. - Deterministic record hashing Standardized the deduction key on
(Reference, Class, Cheque, Date)so re-uploads stop creating duplicates — then found legitimate line items colliding on exactly those fields and specified a CSV row-number extension to the key rather than leaving the collision undocumented. - EAV → relational normalization I had earlier extended the polymorphic custom-fields store to cover deduction types and statuses. When filtering became the bottleneck I promoted
ClassandAccount Managerback out of it into dedicated indexed PostgreSQL columns, preserving API and UI compatibility — enabling database-level filtering a key-value model cannot support. - Field-level audit history Exact old/new values for every modified field, plus record-creation events, across deduction and dispute entities. Built on ORM lifecycle hooks, with explicit emission on the bulk-update path those hooks do not intercept — the gap that would otherwise have made the trail quietly incomplete.
- Aurora failover resilience open Production
MySQL --read-only (1290)write failures on AWS Aurora: pooled connections survive a reader/writer failover and then break Stripe customer-ID updates and user-settings writes. I am driving the fix — separating read and write engines, adding pool liveness checks and retry-on-failover. - The deductions module, API through React grid Restored bidirectional sorting across five columns, fixed composite multi-filter aggregation, added min/max amount range search, shipped CSV export, resolved a column-chooser crash in the listing view, and corrected source-date and negative-amount handling for accounting accuracy. Both sides of the contract are mine, and so is the module's regression suite.
- A 4+ GB/day logging leak A recursive role-update loop in
create_or_update_user_role_for_ar_repwas emitting over 4 GB of Loggly error spam a day. Traceback analysis to the recursion, set-based identity comparison to break it — usable log signal back, ingestion cost down. - Java/Spring CashApp modernization Replaced hand-written
RestTemplatecalls with OpenAPI-generated typed clients, retired duplicated model classes for shared DTOs, removed a proxy controller that coupled PostingRuleService to ConditionsService, and capped@CacheableTTLs at two minutes so financial reads cannot go stale.
Build & deploy hygiene The unglamorous half of owning two repos in two languages — 27 Lombok constant-case compilation failures fixed, formatting and lint made non-negotiable at commit time, dead CI migrated, and a service's memory limits actually sized.
- pre-commit gates
- Black
- Flake8
- isort
- Spotless Palantir
- Lombok constant-case
- Maven
- OpenAPI codegen
- GitHub Actions migration
- ArgoCD
- Kubernetes memory limits
- Currency Service tuning
- SonarQube
- end-to-end regression suite
- Loggly
- incident response
Experience
-
SSerralaSep 2025 — now
Software Engineer II (SDE II), Alevate AR & CashApp — Toronto, ON. Across both stacks daily: a Python accounts-receivable application and a Java/Spring cash-application microservice suite. I own the deduction ingestion path, the deductions API and grid query layer, field-level audit history, and the module's regression suite — and I am the one who takes the production incidents escalated by named enterprise tenants.
-
DDailzerNov 2022 — Sep 2025
Software Engineer. Built Python microservices for automated expense categorization and spending recommendations, putting LLM models behind REST interfaces the core platform consumed. Led backend and AI integration for a GPT-powered expense tracker in Java and Spring Boot — the feature set behind a 30% increase in user engagement.
Designed a microservices architecture decoupling ingestion from processing with Kafka and Docker, cutting API latency 40% under peak traffic, and secured the services with Spring Security and JWT. Applied CAP trade-offs across PostgreSQL and a NoSQL store on read-heavy paths to reduce query latency 25%. Automated deployments with Docker Compose and CI/CD, and mentored 2 junior engineers.
-
L&TLarsen & Toubro Technology ServicesApr 2018 — Dec 2019
Software Development Engineer. Delivered enterprise Java/Spring Boot applications supporting 100K+ active users, leading a team of 4 engineers. Improved performance 30% and cut latency 40% through multithreading, JVM garbage-collection tuning and query optimization; built the Jenkins CI/CD that enabled bi-weekly releases with zero rollbacks.
How I work
What the bullet points above look like from the inside.
-
I own the module, not the ticket
The deductions API and grid query layer are mine end to end — sorting, composite filters, range search, CSV export, negative-amount and source-date correctness — and so is the regression suite that keeps them honest. Owning the tests is what makes owning the module mean anything.
-
I take the incident to the root cause
A 4+ GB/day flood of Loggly errors was not a logging problem; it was a recursive role update, found by reading the traceback and fixed with a set-based identity comparison. The Aurora
--read-only (1290)write failures are not a transient blip; they are pooled connections outliving a reader/writer failover. Both took tracing the symptom back to the mechanism before touching code. -
I say so when the fix is a spec change
Deterministic hashing stopped duplicate deductions — and then I found real line items colliding on the same four fields. That is not a bug to patch quietly; it is a key that needs a row-number component. I wrote the collision up and specified the extension instead of letting "deduplicated" be read as "collision-free".
-
I leave the schema better than the deadline required
I extended the polymorphic custom-fields store when that was the fast path, and I promoted
ClassandAccount Managerback out of it into indexed columns when filtering made the key-value model the wrong answer — without breaking a single API or UI contract. Knowing which direction to move is the job. -
I have led the people, not only the code
A team of 4 engineers at L&T delivering to 100K+ active users, and 2 junior engineers mentored at Dailzer alongside the backend and AI integration work. Code review, design review and peak-load readiness are habits from there, not from a process document.
Stack
Education
- Master of Management York University, Toronto 2022
- PG Diploma, Advanced Computing C-DAC 2018
- B.Tech KIIT University 2017
Where I'm strongest
The work I would want to be judged on.
- Data integrity Imports that can be trusted twicedeterministic keys, idempotent ingestion, and an audit trail that covers the bulk path as well as the happy one
- Query layer Filtering in the database, not in memoryschema evolution, indexing, EAV-to-relational normalization, and multi-filter aggregation that stays correct as columns are added
- Incidents Production escalations from named tenantsconnection-pool and failover diagnosis, traceback-level root causing, and the discipline to keep a bug open until it is actually closed
- Contracts API surfaces that survive refactorsOpenAPI-generated clients, shared DTOs over duplicated models, service decoupling, and cache TTLs chosen for financial reads
- End to end The API and the grid that consumes itserver-side query compilation behind React data grids, list-view engineering, and component state debugging when the bug turns out to be on the other side of the contract