David L. Bowman
Hands-on engineering leader. Fifteen years building and rescuing production systems — architecture through deploy, one engineer or fifty.
Telehealth, payments, e-commerce, and compliance-heavy platforms. Mostly TypeScript, Effect, and functional architecture.
Austin, TX
Outcomes, with the work behind them
Building and running engineering orgs
Built a 55-person organization
Co-founded Bright Development and grew it from zero to 55 employees including 47 engineers, across domestic and overseas hiring, delivering 250+ digital products over three years.
$3M ARR from zero
Profitable year over year across three years, as a co-founded agency at scale.
Systems that outlived the engagement
Built acquisition-pipeline technology and predictive analytics as CTO of a real-estate investment firm; the system remains in production years later, unchanged.
Coached a 20-person team
Established a performance coaching framework for an acquisitions team, lifting conversion across the funnel.
Recent notes

AI Workflows That Don't Rot Your Codebase
AI is leverage only inside a disciplined loop — plan, devil's-advocate, execute, post-mortem, improve your skills. Let it push ahead unsupervised and the same tool quietly wrecks the project: drifting to mimic old code, writing docs that pass typecheck but lie, leaving half-refactors and parallel types behind. A field guide to the loop that ships and the anti-patterns that sink, with downloadable skills and a real brand-book deliverable.

Schema.Redacted Across the HttpApi Wire
Schema.Redacted and Schema.RedactedFromValue are encode-forbidden by design — so they cannot be wire fields on either side of HttpApi. The reference repo demonstrates the failure modes with four endpoints, pins the exact encoder error messages in a backend test, and shows the working pattern: plain validated wire values, Redacted.make on receipt, Redacted.value at exactly one audit boundary inside the SQL repo.

Testing Effect SQL Migrations You Can't Mock
PgMigrator.run wraps migration failures as MigrationError defects on the Cause — so a test asserting via Effect.exit + Cause.hasDies catches the bug class that mocks fundamentally cannot. Walks through the reference repo's eight tests, including a transformational split_part backfill that a V1 row survives end to end.
Questions?
Got a question about something I wrote? Send me a note.