I'm a professional engineer with two decades of experience building systems.
I've designed/built/worked on:
- Pre-Collegiate school information management systems for private institutions and charter school systems
- The first ever hospital billing analysis software; exited to R1 Healthcare.
- The dashboards, candidate search, timesheets, payroll, invoicing and ledger management features in an ATS (Applicant Tracking System)
- optimizing broker agency trading algorithms
- transcationcostanalysis.com aka Performex - a Waters award winning Transaction Cost Analysis application that provided real-time route slippage to buy-side firms
- every conceivable technology a multi-strategy hedge fund could use: portfolio management, PNL, treasury, order management, pre- and post-trade compliance, and reference data (security master, legal entity master), etc.
I've run two open source projects:
- FluentMigrator (30M+ downloads)
- RazorLight (no longer supported)
A common question I get asked is, what tools do you use for testing?
- xUnit - especially, look into Assert.Multiple! I used xUnit for years without knowing this existed.
- AutoFixture
- Moq
- AutoMoq
- Shouldly
- FluentValidation (TestHelpers)
- System.IO.Abstractions.TestingHelpers
- UI testing / headless testing: Playwright / PuppeteerSharp
- Random testing: CsCheck
- Mock HttpClient: https://github.com/richardszalay/mockhttp
- Snapshot testing: Verify https://github.com/VerifyTests/Verify
- Container testing: TestContainers
- Concurrency testing: https://github.com/microsoft/coyote
Some of these technologies can be parsimoniously combined. For example: I use AutoFixture, Moq and AutoMoq for decomposing constructing object graphs into independent, recursively called functions that generate random inputs.