A public learning portfolio for practicing senior-level software engineering fundamentals in C# and TypeScript: testability, SOLID, refactoring, design patterns, architecture trade-offs, reliability, and technical communication.
This repository is intentionally not a single polished product. It is a structured engineering lab that shows how I practice diagnosing code smells, improving design under constraints, and documenting trade-offs.
| Area | Evidence in this repo |
|---|---|
| Testable design | Injected dependencies, test doubles, characterization tests, and focused unit tests |
| SOLID and OOP | DIP, SRP, encapsulation, interfaces, polymorphism, and composition exercises |
| Refactoring discipline | Small behavior-preserving changes using established refactoring katas |
| Architecture thinking | API boundaries, DDD basics, reliability topics, and ADR-style decision notes |
| Technical communication | Roadmap, checklist, coverage matrix, and session notes that explain decisions |
- Refactored Tire Pressure Monitoring examples in C# and TypeScript to depend on abstractions instead of concrete sensors.
- Practiced constructor injection, test doubles, and behavior-focused tests.
- Refactored HTML text conversion code toward clearer responsibility boundaries.
- Built a 4-week roadmap that maps 119 engineering concepts to hands-on practice, mini-labs, clinics, and real-system review prompts.
- Vendored well-known kata repositories so the training material is reproducible from this repo.
| Path | Purpose |
|---|---|
roadmap.md |
4-week curriculum, session prompts, progress tracker, and coverage matrix |
checklist.md |
119-concept self-assessment checklist |
coverage.md |
One-to-one mapping from concepts to exercises |
Training.Exercises/ |
Small C# exercises and original practice code |
phases/02-solid/ |
SOLID and OOP refactoring katas |
phases/03-refactoring-katas/ |
Legacy refactoring katas including Gilded Rose and Theatrical Players |
phases/notes/ |
Learning notes and standalone TypeScript exercises |
| Session | Status | Evidence |
|---|---|---|
| W1.S1 Testing Baseline And Test Doubles | Partial | TirePressure C# and TypeScript work completed |
| W1.S2 Encapsulation, Invariants, And Fail Fast | Partial | WeatherApp value-object exercise completed |
| W1.S3 Responsibilities And Boundaries | Partial | HtmlTextConverter responsibility split practiced |
| W1.S4 Abstractions And Dependency Wiring | Partial | DIP, interfaces, constructor injection, and structural typing practiced |
| W1.S5 Data Structures And Complexity | Not Started | Next untouched Week 1 topic |
| Skill | Evidence |
|---|---|
| Dependency Inversion | ISensor, injected dependencies, Weather API abstractions |
| Test doubles | Stubbed sensors and behavior-focused unit tests |
| Encapsulation | Value objects with constructor validation |
| Fail fast validation | Guard clauses and invalid-state prevention |
| SRP / separation of concerns | HTML conversion separated from file/text source responsibilities |
| C# and TypeScript comparison | Same design ideas practiced in nominal and structural type systems |
dotnet build Training.sln
dotnet run --project Training.Exercisescd phases/02-solid/Racing-Car-Katas/CSharp
dotnet test TDDMicroExercises.sln --filter "TirePressureMonitoringSystem"cd phases/02-solid/Racing-Car-Katas/TypeScript
npm install
npm testI use this repository to make engineering growth visible. The goal is not to memorize acronyms, but to practice the judgment behind them:
- when to introduce an abstraction and when to keep code simple;
- how to make code easier to test without over-engineering it;
- how to refactor legacy code safely;
- how to explain trade-offs clearly enough for a team to act on them.
This repo includes public refactoring kata material from well-known open-source training repositories, vendored under phases/ for convenience. Original licenses and README files are preserved inside those kata folders.