I work on the open-source .NET libraries that power OData APIs, including Microsoft Graph, and I build AI agents that make engineers faster.
Most of my day job is making APIs faster, safer and easier to ship: profiling hot paths in a JSON reader, closing resource-exhaustion holes before attackers find them, and running releases for packages used across the .NET ecosystem. The rest is building documentation-grounded AI agents that turn incidents, docs and tribal knowledge into answers and pull requests.
Before Microsoft, I helped scale M-PESA, one of the world's largest mobile-money platforms, to 2,600+ transactions per second.
| commits to odata.net & AspNetCoreOData since 2024 | pull requests merged across the OData .NET stack | M-PESA upgrade downtime, cut on platforms built for 99.99% availability | less manual processing from privacy-telemetry ETL pipelines |
Live download counts of packages I help build and release.
π‘οΈ Security hardening: closing denial-of-service and data-exposure paths in ASP.NET Core OData
- Bounded
MaxReceivedMessageSizedefault to stop unbounded allocation (CWE-770) - Property restrictions and query limits for
$apply/$compute - Configurable timeout for
matchesPatternto defuse regex-based slowdowns - Opt-in diagnostic logging for query-validation failures
- Fixes for paging bypass via
Prefer: maxpagesize=0(CWE-1284), nestedDelta<T>allow-lists, and EDM-boundary checks for open types
β‘ Performance: fewer allocations on the hottest paths
- Vectorized whitespace skipping in the JSON reader
- Avoid double string allocation in
JsonReaderandReadOnlySpan/ReadOnlyMemoryrefactors ODataNullValuesingleton to remove repeated allocations- Built-in
Encoding.CreateTranscodingStreamreplacing a custom stream
π§± Modernizing the API surface: moving OData onto modern .NET
- Replace
Edm.Date/Edm.TimeOfDaywithSystem.DateOnly/System.TimeOnlyin ODL and ASP.NET Core OData for the 10.x line - Async APIs for
CsdlWriterandSchemaWriter ShouldReadPropertyAsStreamAPI for streaming with property annotations- Enums as keys in the OData client, plus
IAsyncEnumerablesupport andTryValidatefor query options
π Release engineering: shipping 7.x, 8.x, 9.x and the 10.0 previews
- Drove version releases across four supported major lines
- Built nightly vs. release publishing modes, internal feed publishing and symbol pushing
- Automated stable OData dependency updates and package-version validation in CI
- Adopted NuGet Central Package Management; ported large legacy test suites to modern E2E tests
| AI agents & RAG | Documentation-grounded agents and reusable skills that answer engineering questions, turn incidents into work items, plan implementations and check PRs, with human review gates for security and breaking changes. |
| Platform self-service | Azure DevOps automation for pipeline permissions and repo migration using workload identity federation, ownership checks, dry-run mode and full audit trails. |
| API reliability | Schema-contract and workload compatibility validation for Microsoft Graph onboarding, backed by telemetry, monitors and alerts. |
| Payments at scale | M-PESA Payment Gateway and API upgrades connecting banks, SACCOs, fintechs and merchants. |
timeline
2018 : Microsoft AppFactory intern
: Mawingu Networks, IoT and billing
2019 : Techno Brain, Microsoft Engineering Center
: Privacy telemetry pipelines
2022 : Safaricom, M-PESA
: 2,600+ TPS payment platform
2024 : Microsoft
: OData, Microsoft Graph, AI agents
π BSc Microprocessor Technology & Instrumentation, University of Nairobi
C# performance Β· API design Β· OData Β· security hardening Β· building AI agents that people actually use Β· or the best cycling routes around Nairobi π΄


