About

I started as an administrative assistant to an IT director. I write software now. In between came the help desk, product support, website maintenance, SCORM QA, and project management, mostly overlapping rather than replacing each other, because it's a small company and everyone wears several hats.

I learned the stack on my own time by building something that would touch on every part of the stack. I enjoyed that project and found a real use-case for it so continued long after the basic learning project it was. MyBooks is six ASP.NET Core services behind an Angular front end, and every part of it is mine, from the schema to the Playwright suite. I write code professionally now, but my own repositories are the work I can actually hand you.

QA left me with an instinct about how things go wrong quietly. I build things that speak up when they're wrong. For example, I've run fifty thousand dice rolls through a chi-squared test, because a physics engine won't tell you when its dice are loaded.

I have made a practice of constantly updating any decisions I've made about my code. I paused MyBooks rather than rebuild the same ingest path a fourth time around a provider that kept moving it, and I cut PDF conversion instead of shipping it at half quality. I will also look for new and better ways to do things. Sometimes that's a tool, which is where Automation Assist came from. Taking over our CRM turned into a real evaluation of what else was out there, open source included.

Outside of work I'm a geek to the core. I write fiction and play tabletop games. I also read a good deal more than I have shelf space for, which is how the ebook catalog got started.

Building with
C#, ASP.NET Core, Angular, TypeScript, Python, SQL Server, Entity Framework
Verifying with
pytest, Playwright, Postman, static analysis, runtime instrumentation
Titles held
Developer, Technical Product Owner, Project Manager, QA, Product Support, Help Desk
Currently learning
Godot, Unity
Based in
Savannah, Georgia area · looking for remote

Skills

Roughly grouped. Dashed outlines are things I'm still learning rather than shipping with.

Languages

  • C#
  • JavaScript
  • TypeScript
  • SQL
  • HTML
  • CSS
  • Python
  • GDScript

Frameworks & platforms

  • ASP.NET Core
  • Angular
  • Entity Framework
  • LINQ
  • Bootstrap
  • Power Apps
  • SharePoint
  • PySide6 / Qt
  • Godot
  • Unity

Data

  • SQL Server
  • MySQL
  • SQLite
  • Database schemas
  • Data-driven design
  • SSMS
  • Azure Data Studio

Testing & QA

  • Manual QA
  • Regression testing
  • Playwright
  • xUnit
  • pytest
  • Test automation tooling
  • End-to-end testing
  • Unit testing
  • Integration testing
  • API testing
  • Cross-browser testing
  • Bug triage
  • Postman

Security

  • OWASP
  • Secure coding
  • Threat modeling
  • Authentication
  • Authorization
  • Security awareness

Build & deploy

  • Git
  • Git workflows
  • GitHub
  • Azure DevOps
  • Hangfire
  • CI/CD pipelines
  • Release management
  • Docker
  • AWS
  • Visual Studio
  • VS Code
  • GitHub Pages
  • Cloudflare

Design & architecture

  • Software architecture
  • Modular applications
  • REST APIs
  • JSON APIs
  • Dependency injection
  • UI/UX
  • Responsive design
  • Localization systems
  • SCORM 2004

Product & process

  • Product ownership
  • Requirements gathering
  • Acceptance criteria
  • Agile/Scrum
  • Stakeholder coordination
  • Documentation
  • Technical writing
  • User training

Contact

Email is fastest. I answer everything that isn't a recruiter template.