name

Tahsin Iftekhar

role

Software Engineer

status

Open to remote · Dhaka, Bangladesh (GMT+6)

about

I got into software by debugging. Holding a system in your head, tracing where the actual state diverged from what you assumed. I still build things to see what breaks, and I mostly end up on the systems side: data consistency, background jobs, making sure a retried job doesn't run twice.

build
TypeScript, Node, NestJS, React, Next.js
data
PostgreSQL, Redis, Prisma, MongoDB
deliver
Docker, AWS, GitHub Actions, Jest, Playwright
  1. indetechscurrent

    Software Engineer

    Jan 2022 — Present · Remote (UK team)

    Most of what I know about enterprise software came from here. Client specs arrive half-formed, and most of the job is turning vague requirements into contracts that hold. I started on the frontend and drifted into backend work because that is where the interesting problems were.

  2. fatc

    Backend Engineer

    Jan 2025 — Mar 2025 · Remote (US contract)

    Short contract, unfamiliar codebase. I learned how much of backend work is reading, understanding what someone else built before you can add anything useful. Observability went from a checklist item to something I actually rely on.

  1. 01

    consistency before convenience

    Transactions and constraints define the boundary.

  2. 02

    retries are part of the system

    Background work must be safe to repeat.

  3. 03

    authorization belongs in the query

    Access rules should survive route-level mistakes.

1 production system · 2 case studies · 1 lab · 3 in the archive

Lynor screenshot
Production

An e-commerce platform I designed, built and run in production, where orders stay correct under concurrency, retries and failure.

  • One order engine for web checkout and staff orders: a conditional stock update in one transaction, so stock can't be oversold, with tests for 10 buyers racing for 3 units.
  • Side effects (SMS, email) go through a transactional outbox: written in the same transaction as the order, then sent by a poller with retries.
  • Runs on a server I operate: CI-built images, versioned releases with one-command rollback, hourly encrypted off-site backups.

NestJS, PostgreSQL, Prisma, Redis, Next.js, Turborepo, Docker, Caddy

Flowboard screenshot
Live demo

Shared Kanban that stays correct when two people drag cards at once.

  • Concurrent moves serialize on a parent-row lock taken in id order, so crossing moves cannot deadlock and every column stays 0..n-1.
  • Race tests cover crossing moves and a same-card stale move that must return 409; a no-locks branch shows them failing in CI.
  • Board-scoped authorization is resolved server-side for every board, column and task request.

NestJS, PostgreSQL, Prisma, Next.js, TypeScript, Docker

Ping screenshot
Live demo

Realtime chat: I built the client against someone else's API, then wrote my own.

  • Own Express, Socket.io and MongoDB backend, written to the same contract as the third-party API so the client runs against both.
  • Idempotent sends, server-assigned per-conversation order, and replay of exactly what was missed after a reconnect.

Next.js, TypeScript, TanStack Query, Express, Socket.io, MongoDB

One question: can the last pair be sold twice?

  • A reservation takes stock with one conditional UPDATE instead of SELECT … FOR UPDATE; a test with 40 buyers for 10 units asserts exactly 10 succeed and 30 get SOLD_OUT.
  • Hold expiry is a database sweeper, not an in-process timer, and a mutation check that injects eight deliberate bugs one at a time catches every one.

Node.js, Express, PostgreSQL, Sequelize, Socket.io, React, TypeScript

archive

  • A social feed built to explore the parts of feed architecture that matter: cursor pagination, self-referencing data models, and server-side visibility enforcement.

    Next.js with route handlers on the frontend, Prisma and Neon Postgres on the backend. Authentication uses JWT in httpOnly cookies, and image uploads go through Cloudinary.

    • Likes use two nullable foreign keys with a CHECK constraint. The database enforces integrity, not application code.
    • Private resources return 404 instead of 403, so the API does not leak existence.
    • The README documents the like-toggle race condition honestly, along with what a correct fix would require.
    • Cursor pagination is implemented on both posts and comments, with consistent ordering keys.

    Next.js, PostgreSQL, Prisma, Cloudinary, Zod, JWT

  • A platform for managing personal and team watchlists with realtime updates. Built on Supabase for auth, database, and realtime channels.

    The focus was on making shared lists feel live without polling. Updates propagate through realtime subscriptions, scoped per list.

    • Searchable lists that sync across clients through realtime channels. No polling.
    • Notifications on watched items, scoped per user and per list.
    • Row-level security policies in Supabase enforce list access at the database layer.

    Next.js, React, Tailwind, Supabase

  • My first real product. Built end to end for an industrial products business, with a public catalog, enquiry flow, and admin dashboard.

    This is where I learned that shipping is harder than coding, and where most of my instincts about full-stack work were formed.

    • Full-stack from scratch: REST APIs, authentication, payment integrations, admin tooling.
    • Public catalog with category filtering and product detail pages.
    • Automated enquiry workflows that cut manual processing time.
    • The codebase is not public, and the live site is no longer running.

    Next.js, Express, Node.js, PostgreSQL, Tailwind

Built on Invariant, my design languageSet in Sora, Rethink Sans and Geist Mono