Farooq Khan · Senior Software Engineer

I build the whole path — click, API, database, and everything that fails in between.

Eight years shipping products end to end: React and TypeScript on the front, Python and Node.js behind them, on Azure and AWS. I also take the messy edges — the third-party APIs and integrations that decide whether any of it actually works.

8+ years React · TypeScript Python · FastAPI Node.js Azure · AWS Chennai · GMT+5:30
request path · live
third-party APIs payments · SIS · LMS retry · backoff UI React · TS API FastAPI · Node typed · observable DATA Postgres · Redis request persist

typed end to end · retried and rate-limited at every external edge · every write audited

What I actually do

I'm most useful when one person carries a feature the whole way — designing the API, building the screen it lives in, shipping it, and being the one who gets paged when it breaks. Eight years of that, across five teams.

Frontend

Interfaces

React and TypeScript. Component systems, state that doesn't fight back, and screens that stay usable on a bad connection.

Backend

APIs & services

Python with FastAPI, SQLAlchemy and Pydantic; Node.js where it fits. REST, GraphQL, webhooks and message queues.

Cloud

Ship & run

Azure and AWS, Docker, Postgres and Redis, CI/CD that deploys on merge. Getting it to production is part of building it.

Edges

Integrations

SIS ↔ LMS connectors, payment gateways and third-party APIs — the part of the stack that fails on someone else's schedule.

Now building

A native OneRoster service in Python, with a React console on top. Rostering that speaks the standard directly instead of translating into it — and a UI that lets you watch it run instead of guessing.

How I keep things boring

Any feature is only as good as its worst day. Whichever layer it lives in, these five go in before it ships.

Retries with backoff
Transient failures get another attempt on a widening delay. Permanent ones stop immediately and say why.
Idempotency
Every write carries a key. Replay the same event a hundred times and the target still ends up with one record.
Rate limiting
Respect the other side's budget, so your nightly sync is never the reason they start throttling you.
Audit logging
Every record written is traceable back to what caused it, which is the only way to answer "why did this change, and who changed it?"
Observability
Metrics and traces per connector, so "the sync is broken" turns into a specific call, a specific payload, a specific line.

Stack

Grouped by where it sits, not by how well I know it.

Frontend

  • React
  • TypeScript
  • JavaScript
  • Redux
  • Next.js
  • Angular
  • Material UI
  • HTML · CSS

Backend & APIs

  • Python
  • FastAPI
  • SQLAlchemy
  • Pydantic
  • Node.js
  • GraphQL
  • REST
  • Webhooks
  • Message queues
  • .NET
  • PHP · Laravel

Cloud & delivery

  • Azure
  • AWS
  • Docker
  • Kubernetes
  • Jenkins
  • GitHub Actions
  • Firebase
  • Linux
  • Postman

Data

  • PostgreSQL
  • MySQL
  • MongoDB
  • Redis

Where I've been

  • Aug 2022 — present Senior Software Engineer Blackboard · Chennai, India
  • Nov 2020 — Jul 2022 Senior UI Engineer Xerago · Chennai, India
  • Jul 2019 — Oct 2020 Full Stack Developer Vamo Systems · Chennai, India
  • Feb 2019 — Jun 2019 PHP Developer Creators Web India · Chennai, India
  • Feb 2018 — Jan 2019 Associate Web Developer Wideva Systems · Chennai, India

Education

  • 2014 — 2017 B.E. Computer Science & Engineering Anna University College of Engineering · Villupuram
  • 2011 — 2014 Diploma in Computer Engineering SS Polytechnic College · Arcot, Vellore

Writing

Notes from the job, published on DEV. Pulled live from their API.

Loading posts from dev.to…

Code & answers

Public repositories and Stack Overflow activity, read from the GitHub and Stack Exchange APIs when the page loads.

Public repos
GitHub followers
SO reputation
SO badges g/s/b

Loading repositories from GitHub…

Let's talk

Open to full-stack and backend roles, React work, integration and API challenges, AI developer tooling and open source. Remote is fine.