TAG
Software_Engineering
55 notes
- Software Architecturehistorical
Architecture as system-level decisions about boundaries, dependencies, deployment, data, quality attributes, and evolutionary trade-offs.
- Architecture Patternshistorical
Choosing monolith, layered, event-driven, microservice, read/write split, and domain-oriented patterns from constraints rather than fashion.
- Monolithic Architecturehistorical
A single deployable application and the trade-offs between operational simplicity, modularity, scaling, and organizational boundaries.
- Layered Architecturehistorical
Separating presentation/application/domain/infrastructure responsibilities while controlling dependency direction.
- Read/Write Separation Architecturehistorical
Separating write authority from read replicas/projections and handling replication lag, read-your-writes, routing, and failover.
- Event-Driven Architecturehistorical
Producing and reacting to events with asynchronous coupling, delivery semantics, ordering, idempotency, and observability.
- Domain-Driven Designhistorical
DDD concepts: bounded contexts, ubiquitous language, aggregates, entities, value objects, domain services, and context integration.
- Microservices Architecturehistorical
Independently deployable service boundaries with explicit data ownership and the distributed-systems/operational costs they introduce.
- OpenID Connecthistorical
Identity layer on OAuth with ID tokens, UserInfo, issuer/audience/nonce validation, and authentication sessions.
- JSON Web Token (JWT)historical
Signed token format, claims, validation, expiration, key management, and common security misconceptions.
- OAuth 2.xhistorical
Delegated authorization with resource owner, client, authorization server, resource server, scopes, access tokens, and secure redirect flows.
- Designing a Configuration Centerhistorical
Versioned configuration distribution with environments, validation, watches, rollout, caching, security, and rollback.
- Designing Load Balancinghistorical
Endpoint discovery, selection algorithms, health/outlier detection, connection reuse, locality, weighting, and overload-aware routing.
- Designing a Service Registryhistorical
Service membership registration, discovery, leases/health, staleness, replication, client caches, and failure handling.
- Designing an API Gatewayhistorical
Gateway routing and cross-cutting policy with authentication, limits, deadlines, observability, resilience, and safe ownership boundaries.
- Designing an Observability Systemhistorical
Metrics, logs, traces, events, SLOs, correlation, storage, alerting, dashboards, and cost/cardinality control.
- Designing Distributed Tracinghistorical
Trace/span context propagation, sampling, storage, causality, asynchronous work, and correlation with metrics/logs.
- Designing Resilience Componentshistorical
Timeouts, deadlines, retries, circuit breakers, bulkheads, rate limits, load shedding, fallbacks, and idempotency.
- Designing Logginghistorical
Structured logs, severity, correlation, context, sampling, retention, privacy, and operational querying.
- Designing Metrics Monitoringhistorical
Metric naming/types, labels, cardinality control, RED/USE signals, SLOs, aggregation, and alerting.
- Designing Authentication and Authorizationhistorical
Identity proof, sessions/tokens, authorization policy, least privilege, service identity, revocation, and audit.
- Entity–Relationship Diagramshistorical
Modeling entities, attributes, identifiers, and relationships for data-oriented system design.
- UMLhistorical
Using UML selectively to communicate structural and behavioral views of software systems.
- Class Diagramshistorical
Modeling types, interfaces, responsibilities, associations, inheritance, and composition.
- Sequence Diagramshistorical
Modeling time-ordered interactions, calls, asynchronous messages, branches, and failure paths between participants.
- State Diagramshistorical
Modeling finite states, transitions, events, guards, and lifecycle invariants.
- Component Diagramshistorical
Describing coarse-grained modules/components, provided interfaces, dependencies, and boundaries.
- Deployment Diagramshistorical
Mapping software artifacts and services onto runtime nodes, networks, zones, and infrastructure.
- Architecture Diagramshistorical
Communicating system boundaries, dependencies, data flows, deployment units, and operational context.
- Functional Options Patternhistorical
Configuring constructors through composable option functions, especially in Go APIs.
- Function Types as Interfaceshistorical
Using function values to satisfy small behavioral contracts and inject behavior without heavyweight objects.
- Event Sourcinghistorical
Persisting domain changes as an append-only event history and rebuilding state through replay/projections.
- Publish–Subscribe Patternhistorical
Decoupling event publishers and subscribers while handling delivery, ordering, replay, and failure semantics.
- Producer–Consumer Patternhistorical
Decoupling work generation from processing with queues, bounded capacity, backpressure, and worker concurrency.
- Open–Closed Principlehistorical
Designing stable boundaries so common extensions require less modification to trusted core code.
- Liskov Substitution Principlehistorical
Ensuring subtypes preserve the behavioral contract expected from the base abstraction.
- Dependency Inversion Principlehistorical
Keeping high-level policy independent from volatile low-level implementation details.
- Single Responsibility Principlehistorical
Grouping behavior around a coherent responsibility and a focused reason to change.
- Interface Segregation Principlehistorical
Keeping contracts focused so clients depend only on capabilities they actually use.
- Law of Demeterhistorical
Reducing knowledge of distant object structure and avoiding brittle navigation through internal collaborators.
- Composition over Inheritancehistorical
Reusing behavior through composition/delegation when subtype inheritance would create unnecessary coupling.
- Object-Oriented Design Principleshistorical
A practical view of SOLID and related principles for controlling coupling, responsibilities, and change.
- Object-Oriented Design Patternshistorical
Reusable design structures and the trade-offs behind creational, structural, and behavioral patterns.
- Singleton Patternhistorical
A single shared instance, initialization safety, lifecycle, testability, and global-state trade-offs.
- Proxy Patternhistorical
Interposing an object to control or augment access to another object while preserving its contract.
- Template Method Patternhistorical
Fixing an algorithm skeleton while allowing selected steps to vary in subclasses or callbacks.
- Factory Method Patternhistorical
Separating object creation decisions from clients that consume the created abstraction.
- State Patternhistorical
Representing state-dependent behavior with explicit state objects instead of sprawling conditionals.
- Builder Patternhistorical
Constructing complex objects step by step with readable optional configuration and validation.
- Strategy Patternhistorical
Encapsulating interchangeable algorithms or policies behind a common contract.
- Observer Patternhistorical
Notifying registered observers about subject changes and managing coupling, ordering, and lifecycle.
- Decorator Patternhistorical
Adding composable behavior around an object without changing the wrapped implementation.
- Chain of Responsibilityhistorical
Passing a request through an ordered pipeline of handlers that may process, enrich, reject, or forward it.
- Adapter Patternhistorical
Translating one interface/protocol/data model into the contract expected by a client.