Andrei CoroveiArchitecture & engineering

A PRACTICAL COURSE FOR SOFTWARE DEVELOPERS & TECHNICAL LEADS

Software
architecture.
Grounded in practice.

Design applications that hold up in production.
Understand the infrastructure, the code, and the decisions that connect them.

Let’s talk about the course

Upcoming sessions and pricing on request.

THE COURSE, AT A GLANCE4 TECHNICAL PARTS + THE ARCHITECT IN PRACTICE
  1. 01Reliable
    foundations
    NFRs & infrastructure
  2. 02Inside the
    application
    Classes & dependencies
  3. 03Design around
    the domain
    DDD & event storming
  4. 04Distributed
    systems
    Communication & resilience
  5. 05 / FINAL CHAPTERThe architect
    in practice
    Decisions & teams

A system has to work
beyond the whiteboard.

Requirements change. Dependencies grow. Networks fail. The course explores how architecture choices play out in these situations, through practical exercises and discussions about the trade-offs.

Understand the constraints. Connect technical decisions to what the system needs to deliver.

Work through the consequences. Use code and group challenges to examine the design.

The whole architecture.
One chapter at a time.

Four technical parts, followed by how to put them into practice with teams.

01

NFRs & INFRASTRUCTURE

Build for mission-critical demands.

Start with the non-functional requirements. Understand what reliability means for your application, then make infrastructure choices that support it.

A question we’ll work through

How much downtime and data loss can the business tolerate, and what does that mean for your infrastructure?

  • Availability, fault tolerance & recovery
  • RTO, RPO, SLIs & SLOs
  • Scaling, security, latency & cost
  • Infrastructure & observability
02

CLASSES & DEPENDENCIES

Keep a growing application manageable.

Manage complexity inside the codebase. Structure responsibilities and dependencies so that changes stay understandable as the application grows.

A question we’ll work through

When a requirement changes, how much of your application needs to change with it?

  • Cohesion, coupling & responsibilities
  • Dependency inversion & explicit dependencies
  • Clean Architecture, ports & adapters
  • Refactoring & testability
03

DOMAIN-DRIVEN DESIGN

Let the business shape the system.

Explore the domain with the people who understand it. Use that knowledge to find meaningful boundaries and build models that express the business rules.

A question we’ll work through

Where should a business rule live, and which changes need to stay consistent together?

  • Ubiquitous language & bounded contexts
  • Context mapping & event storming
  • Entities, value objects & aggregates
  • Domain events & CQRS
04

DISTRIBUTED SYSTEMS

Work with the realities of the network.

Understand when distribution helps and what it costs. Design communication and failure handling so that independently running parts can work together reliably.

A question we’ll work through

What happens when a call times out, a message arrives twice, or only half of a workflow succeeds?

  • Fallacies of distributed computing
  • Synchronous calls & asynchronous messaging
  • Retries, idempotency & consistency
  • Dapr invocation, pub/sub & state
05

THE ARCHITECT IN PRACTICE

Make architecture work with teams.

Bring the technical decisions into everyday delivery. Clarify requirements with stakeholders, communicate trade-offs, and stay involved through implementation.

A question we’ll work through

How do you communicate your architecture, document the decisions behind it, and guide the team through implementation?

  • Stakeholder conversations & shared understanding
  • Architecture Decision Records & arc42
  • Planning, implementation & code reviews
  • Evaluating the design against NFRs
For developers ready to shape the system.

You should be comfortable working in an existing codebase. The practical examples use .NET and Azure; familiarity with C# will help.

Andrei
Corovei.

Software Engineer
Software Architecture Trainer

More about me on LinkedIn

The projects behind the course.

I’m a software engineer and trainer with over 15 years of experience working on warehouse automation, logistics, and intelligent document processing systems.

My interests include building infrastructure with cloud-native technologies, distributed systems, and domain-driven design. I enjoy working through architectural questions and staying close to the implementation to understand how those decisions work in practice.

I also teach software architecture, using practical exercises and examples from project experience to explore design choices and their trade-offs.

01 / LOGISTICS

Automated warehouse systems

Software for automated warehouses, bringing together domain modelling, event-driven workflows, and cloud infrastructure to support everyday operations.

02 / AI & DISTRIBUTED SERVICES

Intelligent document processing

Helping machine learning and generative AI models run across regions, with attention to reliability, response times, and how the services work together.

03 / APPLICATION DESIGN

Business applications that evolve

Working with teams on logistics and insurance applications, using Clean Architecture and shaping the design through conversations, coding, and reviews.

What people say.

“What I liked most was the broad view of software architecture. We covered a range of topics, instead of staying on just one thing, and the number of exercises felt about right.”
Radu
“The mix of solo and group exercises worked really well. The slides were visual, not just a bunch of bullet points, and that helped a lot. Andrei was an excellent tutor.”
Diana
“The examples made the concepts easy to follow. I don’t have much experience with C# or .NET, but the trainer adjusted the explanations and drew comparisons with Java. That really helped me keep up.”
Cristian
“I came away with new ways of looking at things and plenty to digest. I liked breaking into small groups for the exercises. It gave us a chance to work things out for ourselves between presentations :)”
Mihai

Tell me a little about your experience and what you’d like to learn. We can discuss the course, upcoming sessions, format, and pricing.

Loading the contact form…

Let’s talk
architecture.

Book a 30-minute call

Monday–Thursday, 19:00–21:00
Bucharest time