Software Engineering Principles
Engineering practices, design principles, CI/CD, and DevOps culture
SOLID PrinciplesSingle responsibility, open/closed, Liskov, interface segregation, dependency inversion›Clean CodeMeaningful names, small functions, DRY, YAGNI, KISS; code smells and refactoring›Design Patterns (GoF)Creational, structural, behavioral patterns with real-world examples›DDD TacticsEntities, value objects, aggregates, repositories, domain services, domain events›Twelve-Factor AppAll 12 factors with practical application guidance›CI/CD PipelinesBuild, test, security scan, publish, deploy stages; GitHub Actions, GitLab CI›Deployment StrategiesBlue-green, canary, rolling, recreate, feature flags, dark launches›Testing StrategyUnit, integration, contract, E2E, performance, chaos; test pyramid vs trophy›TDDRed-green-refactor cycle, mock vs stub vs spy, test doubles›Branching StrategiesGitFlow, trunk-based development, GitHub Flow, release branching›Feature FlagsDecoupling deployment from release, gradual rollout, kill switches›DevOps CultureShared ownership, shift-left, blameless postmortems, psychological safety›SRE PrinciplesError budgets, SLIs/SLOs/SLAs, toil elimination, reliability as a feature›Technical DebtDebt quadrant, boy scout rule, refactoring safely, ADRs for decisions›Code Quality & GovernanceStatic analysis (SonarQube), coverage gates, peer review standards›API VersioningURI versioning, header versioning, backward compatibility, deprecation policy›