Skill area
Cohesive code, dependency management, behavioral contracts, application boundaries, and proportionate design decisions.
Practice items tagged with Software Design.
Separates hiding implementation complexity from controlling access to state, with practical examples where both ideas work together.
Uses public, internal, protected, private, and protected internal deliberately to control API surface and inheritance exposure.
Separates application composition in AppHost from reusable in-process defaults for telemetry, health, resilience, and service discovery.
Chooses contracts and shared implementation based on substitutability, state ownership, evolution, and inheritance constraints.
Chooses a type shape from identity, value semantics, mutation, copy cost, default values, and serialization boundaries.
Creates valid objects with clear intent while choosing construction patterns proportionally to optional data, validation, and lifecycle complexity.