Software Development Engineer

Easley Dunn Productions · Feb 2026 – Present

SafetyNet is a cross-platform React Native social app. I own much of the backend and database work, and ship features across backend and mobile, as the Node.js/Express and PostgreSQL foundation behind authentication, real-time messaging and location-aware features.

67 of 119
Merged pull requests authored
Node.js
Backend
PostgreSQL
Database
Socket.IO
Real-time

Architecture

Request path through the backend

  1. 01

    Authenticate

    JWT plus Firebase OTP

  2. 02

    Rate limit

    Tiered limits on the API

  3. 03

    Handle

    Node.js / Express over PostgreSQL

  4. 04

    Persist

    Atomic transactions for messages and notifications

  5. 05

    Deliver

    Socket.IO over authenticated WebSockets

Key decisions

  1. DECISION 01

    Integration tests against a real PostgreSQL in CI

    Logic that only works against a fake database is a risk; only third-party auth is mocked.

    → Tests exercise the real database behaviour

  2. DECISION 02

    Review the database with query plans, not by reading code

    Indexes did not match how the data was actually queried.

    → Indexes, transactions and atomic upserts corrected

  3. DECISION 03

    Fix indexing before adopting a graph database

    At the actual scale the bottleneck was indexing, not the data model.

    → Migration not justified; reasoning documented

Backend

Built the API layer with JWT plus Firebase OTP authentication, a social-graph discovery algorithm with proximity ranking, and tiered rate limiting, all on top of PostgreSQL.

Real-time messaging

Engineered messaging over Socket.IO with authenticated WebSocket handshakes, encrypted message storage, and atomic database transactions so a message and its notifications are persisted together or not at all.

Database engineering

Reviewed the database layer against a real database using query plans and index inspection rather than only reading code, then fixed what that surfaced: indexes that did not match how the data was actually queried, multi-step writes that needed transactions, and check-then-write patterns that were replaced with atomic upserts.

Set up isolated internal and production environments across the stack so changes can be exercised safely before they reach production.

Delivery

Built the deploy pipeline: changes auto-deploy to an internal environment with health checks and automatic rollback, and are promoted to production with one click. Production runs on a cloud VM with scheduled backups and a restore that has been tested, not just configured.

Testing

Wrote 453 integration tests that run against a real, non-mocked PostgreSQL instance in CI, because logic that only works against a fake database is a risk. Every pull request also has to pass 7 required checks, including a guard that blocks destructive migrations. Third-party authentication is mocked, since faking those calls is safe in a way that faking the database is not.

Engineering judgment

When a graph database was proposed for connection lookups, I measured first. At the actual scale the bottleneck was indexing in the existing database, not the data model, so I fixed the indexes and documented why the migration was not justified.

↑↓ navigate↵ openesc close