Skip to main content
Welcome. This site supports keyboard navigation and screen readers. Press ? at any time for keyboard shortcuts. Press [ to focus the sidebar, ] to focus the content. High-contrast themes are available via the toolbar.
serard@dev00:~/cv

Stéphane ERARD

Software Architect — Platform & Developer Tooling

I turn ideas into products.

I turn recurring engineering rules into typed models, reusable tools and automated checks.

I'm a self-taught architect and hands-on developer with 20+ years of experience. I work across C#, .NET, TypeScript and PHP, connecting application development to the tools a team uses to build, test and deliver.

Creator of Requirement-as-code ~ PumpMe ~ QuietCli

Nice, France · French & English · Available for full-time remote work

The Problem I Work On

As projects, tool versions and environments multiply, the same decisions appear in scripts, configuration files and setup instructions. A change has to reach every place that depends on it.

I build shared models and tools that make those relationships explicit: a command has typed options, configuration has a reusable model, and a check states which behavior it verifies.

How I Work

Anything-as-Code turns recurring concepts into typed, versioned models, reducing the distance between intent, implementation and verification.

Model → Generate → Verify. I start with the simplest design that meets the need and introduce shared abstractions when recurring work justifies them.

AI proposes. Tooling checks. People decide.

New need: requirements → implementation → verification.

Existing system — experimental: code and tests → candidate requirements → human review → controlled change.

Selected Work

These professional projects show how I have turned recurring needs into shared tooling. They each have their own implementation and history.

Qwant · 2015–2017 · Developer infrastructure

Qwapp: a shared software factory

Project · Branch · Environment · Configuration Repeatable setup and service operations VMs · PowerDNS · GitLab · Jenkins build agents

Problem. Repeated setup and configuration across projects and environments.

Contribution. Designed and built Qwapp around a common model, provisioning commands and shared engineering services.

Result. Reproducible development environments and reusable workflows for development, testing and delivery.

Vagrant · Docker Compose · Puppet · PowerDNS · GitLab · Jenkins

BIM&CO · 2020–2025 · Product and developer tooling

PfDev, generated clients and testable workflows

Core Feature indexing ~2 days → 20 min V4/XML → V5/JSON & async processing

Contribution. Built PfDev for workstation and project lifecycle operations, generated C# and TypeScript clients, and reusable tools for testing application workflows.

Result. Faster indexing, around 800 existing tests restored to a runnable suite, and repeatable setup operations.

C# · .NET · PowerShell · OpenAPI · Workers · Testing

Schneider Electric · 2025 · Developer tooling

Versioned workstations and IDE tooling

PowerShell + winget + Git Scripted developer onboarding Setup documentation · Build feedback · IDE features

Contribution. Delivered a scripted Windows workstation bootstrap, onboarding documentation and improvements to build tooling and an IEC 61499 IDE.

Result. Versioned setup steps and tooling maintained alongside the development workflow.

PowerShell · TypeScript · C# · IEC 61499 · Git

The System at a Glance

Diagram
A shared engineering pattern. The implementation and verification steps depend on the component.

FrenchExDev is the ecosystem behind this approach. Requirements-as-Code applies it to software intent and verification. Diem extends it to applications and their environment, toward a HomeLab described and controlled from a C# project. Machines, services, configuration and operations become part of that description. The building blocks exist; their complete integration is still in development.

Open the component map and current implementation boundaries →

See BinaryWrapper in Practice

Versioned CLI description → generated C# API → argument array → verification.

BinaryWrapper turns collected CLI descriptions into command types. In the Dotnet wrapper, a test constructs a generated DotnetBuildCommand with directory with spaces/project.csproj as its project path. It compares the complete argument array and checks that the path reaches a simulated process as one argument.

The test specifies argument construction and forwarding. Running the underlying SDK is a separate integration check.

Follow the input, generated API, expected output and test →

Volunteer Work

Independent projects, reusable tools and experiments I develop outside my professional roles.

FrenchExDev · Integration in development

Diem CMF .NET Lab

Anything-as-Code · Applications & infrastructure C# → Typed models → HomeLab Existing building blocks · Integration in development

Problem. Infrastructure tools, configuration formats and project environments each need their own integration.

Contribution. Building reusable wrappers and Bundles, using C# as the language for describing machines, services and configuration.

Result. Typed APIs and configuration models, working toward a reproducible HomeLab described and controlled from a C# project.

C# · Roslyn · Packer · Vagrant · Docker Compose · Traefik

Requirements-as-Code · TypeScript used in this site

Connect intent to verification

Forward Requirement → Feature → Acceptance Criterion → Test → Evidence Reverse · experimental Code + Tests → AI proposals → Candidate Requirements + ACs → Human review

Problem. Requirements, implementation and tests can drift apart.

Contribution. Built typed requirement models and explicit test bindings. Source analysis inspects traceability; test execution provides separate behavioral evidence.

I am also exploring the reverse workflow: AI-assisted recovery of candidate requirements and acceptance criteria from existing code and tests, followed by human review before the approved model guides refactoring or redesign.

Result. Requirements, acceptance criteria and tests become explicit, inspectable relationships.

Status. The TypeScript implementation is used by this site. C# provides declarations and registry generation; its coverage analyzer is still in development.

TypeScript · C# · Roslyn · Coverage · Mutation testing

serard.dev · Live project

A publishing system you can explore

Markdown + metadata Build → HTML Search · Navigation · Interactive diagrams

Problem. Make a growing body of experience, projects and writing easy to navigate.

Contribution. Built a Markdown publishing pipeline, static rendering and browser interactions, supported by automated checks.

Result. The site you're using: searchable content, keyboard navigation, themes and explorable diagrams.

TypeScript · HTML/CSS · Markdown · Mermaid

Explore all independent projects →

Get in Touch

Stéphane Erard

I'm looking for a full-time remote role where I can contribute to platform engineering, developer tooling and application architecture. I work in French and English, based in Nice, France.

Email me · Call +33 643 617 931

⬇ Download