Location: Long Island, NY (NYC metro). Authorized to work in the US.
Remote: Open to remote, hybrid, or onsite (NYC metro).
Willing to relocate: For the right role
Technologies: Go, TypeScript, NestJS/Node, React, React Native, Angular, PostgreSQL/PostGIS, Redis, C#/ASP.NET Core, Python, OpenAI/Gemini APIs, C, Docker, Terraform, AWS
Résumé/CV: https://seanerfan.us/resume.pdf
Code: https://github.com/Shameed4/Discord-Kittens (distributed Go game server), https://github.com/Shameed4/USG_Chatbot (agentic RAG over bylaws and meeting minutes)
Email: seanerfan@gmail.com
Backend/full-stack engineer, about 18 months out of Stony Brook, CS and applied math. Right now I'm the only engineer on a healthcare product, so I do all of the frontend, backend, and database work myself. It was a ColdFusion and AngularJS prototype when I got there. It's a NestJS API with an Angular web app and a React Native app on Postgres now.
Before that I was at a defense electronics manufacturer. I built an Android app for warehouse picking that queued failed requests on the device, since the Wi-Fi drops in the aisles. The picking transactions ran at Serializable isolation so several people could work the same order without corrupting the inventory counts. I also shipped a Python service that reads hardware spec PDFs and drafts the verification test procedures from them with Gemini.
On my own time I made a Go game server that runs across several nodes, coordinated through Redis. Each lobby is leased to one node. A node renews its lease with a Lua script that checks it still holds it first, since a blind EXPIRE can re-extend a lease you've already lost. Every lease carries an epoch that goes up by one each time it changes hands. A node that pauses past its TTL, gets replaced, and wakes up still thinking it owns the lobby gets rejected the moment it writes. Acquiring a lease also hands back the dead owner's state snapshot, so taking over and picking up the in-flight game happen at the same time. Clients number their own moves, so a move can't get applied twice across a reconnect.
Then I killed a node mid-game to see what would happen. 60 bots on 3 nodes behind nginx, one node killed outright, and all 16 games kept running. 164 reconnects, no move applied twice, p99 action latency 4.5ms, and clients were back in their seats in about 12s. It took that long because nobody can adopt a lobby until the dead owner's 15s lease runs out, which is the tradeoff between failing over fast and more heartbeat traffic.
I'm looking for backend or full-stack work somewhere with engineers more senior than me, which is the one thing I can't get right now. Distributed systems is what I'd most like to do, but AI work and regular product backend both interest me too.