Roadmap · Foundations
Software design and clean code (C#)
Opens with creditsFor students and early-career engineers who can make code work in Java, Python, TypeScript or C# and now want it to stay easy to read, test and change. By the end you can structure classes with OOP and SOLID, use the 23 classic design patterns with judgement, refactor safely, sketch a design in UML and take a small system from requirements to working code.
By the end, you will be able to
- Model a problem with classes that protect their own rules, prefer composition over inheritance, and explain each choice in plain words
- Spot SOLID violations and code smells in your own and other people's code, and fix them with named refactorings in small steps behind tests
- Recognise when each of the 23 Gang of Four patterns fits, write it in your language, and say when a plain function is the better answer
- Take a small system such as a parking lot, a rate limiter or an expense splitter from requirements to a class diagram and working, tested code, which is also what a design coding round asks for
- Give code review comments people act on, and turn the comments you receive into a checklist that improves every change you send
The path
10 stages, in the order to learn them. Open one to start.
1Object-oriented programming properlyGo beyond the textbook definitions: use classes to protect rules, interfaces to hide change, polymorphism to remove type checks and composition instead of deep inheritance, in your language's modern style.8 topics · ~3 weeks
- 1Classes, objects and responsibilitiesA class is a blueprint that keeps some data (fields) together with the code allowed to change it (methods).
- 2Encapsulation and invariantsEncapsulation means hiding an object's internal state behind a small set of methods.
- 3Abstraction and interfacesAbstraction means showing callers what something does while hiding how.
- 4Inheritance, used sparinglyInheritance lets a subclass take on the fields and methods of a parent class and add to or override them.
- 5Polymorphism instead of type checksPolymorphism means one call works on many types, and each type answers in its own way.
- 6Composition over inheritanceComposition means building a class by holding other objects and passing work to them, a has-a relationship, instead of extending a parent.
- 7Value objects and immutabilityA value object is defined by its values rather than an identity.
- 8Modern C#: properties, records and primary constructorsC# gives you properties instead of Java-style getters and setters, with
initfor values that can only be set when the object is created.
8 in this stageOpen this stage2SOLID with before and after codeLearn the five SOLID principles as questions to ask of a design, see each one as a before and after refactoring in your language, and learn dependency injection, the technique that makes them practical.7 topics · ~3 weeks
- 1Single responsibilityThe single responsibility principle says a class should have one reason to change.
- 2Open for extension, closed for modificationThe open/closed principle says you should be able to add behaviour by adding new code, not by editing code that already works.
- 3Liskov substitutionThe Liskov substitution principle says a subtype must work anywhere its parent is expected, without surprising the caller.
- 4Interface segregationThe interface segregation principle says clients should not depend on methods they do not use.
- 5Dependency inversionThe dependency inversion principle says high-level policy, such as "when an order is placed, notify the customer", should not depend on low-level details,…
- 6Dependency injection in practiceDependency injection is the everyday technique behind dependency inversion: instead of an object creating the things it needs, you pass them in, usually…
- 7DRY, KISS and YAGNI: the counterweightsSOLID can be overdone, and three short principles keep it honest.
7 in this stageOpen this stage- Clean code: naming, functions and errorsPractise the small decisions you make hundreds of times a day: names, function size, arguments, comments, guard clauses and error handling, with your language's style guide and tools enforcing the rest.8 topics · ~2 weeksOpens with credits
- Creational patternsLearn what a design pattern is and is not, then the five creational patterns: Singleton, Factory Method, Abstract Factory, Builder and Prototype, with when each one earns its place.6 topics · ~2 weeksOpens with credits
- Structural patternsLearn the seven structural patterns, Adapter, Bridge, Composite, Decorator, Facade, Flyweight and Proxy, which describe how objects are composed, and how to tell the look-alike ones apart.7 topics · ~2 weeksOpens with credits
- Behavioural patternsLearn the eleven behavioural patterns, which describe how objects share work and talk to each other, starting with the everyday ones, Strategy, Observer, Command and State, and ending with Visitor and Interpreter.9 topics · ~3 weeksOpens with credits
- UML and class diagrams you actually needLearn the small part of UML engineers really draw: class diagrams with the five relationship arrows and multiplicity, sequence diagrams and state diagrams, sketched by hand or written as code with PlantUML or Mermaid.6 topics · ~2 weeksOpens with credits
- Refactoring and code smellsLearn to change the structure of code without changing what it does: name the smells, pin behaviour with tests, then improve code in small, automated, reversible steps, practised on a real legacy kata.6 topics · ~3 weeksOpens with credits
- Designing small systems end to endPut everything together with low level design: take a short problem statement, such as a parking lot, a library, a rate limiter or an expense splitter, to requirements, classes, a diagram and working, tested code.8 topics · ~4 weeksOpens with credits
- Code review: giving and taking itUse code review as the place design skill is taught every day: what to look for and in what order, how to write comments people act on, how to keep changes small, and how to learn from the comments you receive.6 topics · ~2 weeksOpens with credits
8 more stages, 56 more topics, free with an account.
You have seen the open stages of the Software design and clean code roadmap. Every topic it covers is listed above, and an account opens the rest: what each topic means, a question to check yourself, the courses, the practice and Tauseef's advice for every stage. Early access is open: sign up and your account is active shortly after.
Everything here is free to learn from. A few things, like adding a roadmap, keeping a cheat sheet or asking Tauseef a question, use credits. You get 15 when you join, your first roadmap is free, and if you are learning seriously and run out, you can ask for more. Credits only make sure the platform goes to people who are actually learning.
Build a project
A finished project proves more than a certificate.
- Start with this oneintermediate2 semesters · 3 studentsApproval Workflow Engine with Escalations for Small Offices
State, Strategy, Observer and Chain of Responsibility working together in one system people would use
- TypeScript with Node.js
- PostgreSQL
- React with a form builder
- Job queue (BullMQ or pg-boss)
- Email and webhook integrations
Related on Sefism
Picked from the other libraries by shared topics.
Best practices
See all- Python Best PracticesWrite Python that stays maintainable: supported versions, pyproject and lockfiles, Ruff, type hints, errors, logging, concurrency, pytest and security.
- TypeScript Best PracticesModern TypeScript best practices for 2026: strict settings, TypeScript 7, modeling data with unions, safe narrowing, runtime validation, generics and typed linting.
- Secure Coding Best PracticesWrite code that resists attack: untrusted input, validation, parameterized queries, output encoding, safe parsing, uploads, SSRF and errors that fail closed.
Checklists
See all- Pull Request Checklist: Before You Open a PRA pull request checklist to run before you ask for review: scope and size, a clean diff, tests, a clear description, safe releases and a tidy branch, each with a way to verify it.
- Career Switch into Tech ChecklistMove into software from another field step by step: choose a direction, follow a learning plan, build proof of skill, use your previous domain, network, plan your runway and target a first role.
Project structures
See all- Python package and CLI project structureA command line tool published to PyPI, laid out the way the Python Packaging User Guide and uv recommend: a src layout, one pyproject.toml for metadata and every tool, a thin Typer CLI over plain, testable modules, and releases uploaded by GitHub Actions with trusted publishing. The example is mdlinks, a tool that finds broken links in Markdown files. For students who have written Python scripts and want to ship one that strangers can
pip install. - TypeScript npm library project structureA small, typed npm package (a retry helper) built the way modern libraries ship in 2026: TypeScript source in
src, bundled by tsdown intodistwith type declarations and anexportsmap, tested with Vitest, checked with publint and Are the Types Wrong, versioned with Changesets and published from CI with npm provenance. For students who want to publish their first package, and for anyone whose package works locally but breaks for users. - Flutter project structureFor anyone building one Dart app for Android, iOS and the web. The tree starts from what flutter create gives you and grows into a feature-first lib/ folder, where each feature keeps its own data, domain and presentation code, then adds tests at every level, flavors, release signing, crash reporting and, for large teams, a melos workspace of local packages.
Career questions
See all- What should I learn first to become a software engineer in 2026?Learn one language properly, then Git, the command line, how the web works and basic SQL, and build small things with them from week one. AI tools change how you write code, not what you need to understand. Pick a direction only after the foundations feel boring.
- Should I learn Python or JavaScript first?Choose based on what you want to build. JavaScript if you want web development, since it runs in every browser. Python if you are drawn to data, AI, automation or backend scripting. Both are excellent first languages, and the second one is far easier once you know the first well.
- I understand tutorials but cannot build anything myself. Why does coding feel so different when I am alone?Tutorials train recognition, not production. When you follow along, someone else makes every decision. Building alone requires you to break a problem down and make choices, which is a separate skill. Build it with small projects, planning on paper first, and a rule to struggle before you look anything up.
Cheat sheets
See all- Design Patterns cheat sheetAll 23 Gang of Four patterns with intent, when to use and a TypeScript sketch, plus SOLID, related principles and a problem to pattern map.
- Programming foundations cheat sheetFirst language, Git, CS basics.
- TypeScript cheat sheetTypes, inference, narrowing, generics, type-level tools and strict configuration for real TypeScript codebases.
Stuck on something specific?
Writing only gets you so far. If you want an answer to your situation rather than the general case, book a session and we will work through it together. Sessions are free for approved Sefism members, and a few slots open each week.
- 1:1 Mentorship
- Fresh Graduate Mentorship
- Career Guidance
Brand deals, promos and partnerships: tauseeffayyaz@gmail.com