Software Development and Design
Domain 1 tests the decisions you make before and around code: which SDLC model fits, how you branch and integrate in Git, how you design a stable API contract, how you test, and how you represent data. The exam favors explicit trade-offs over dogma.
Core rules
- Favor modular components with clear interfaces; keep business logic out of controllers and transport code. MVC separates model, view, and controller; a repository hides persistence details.
- Git: feature branches isolate work.
mergepreserves history and is safe on shared branches;rebaserewrites commits and is for local cleanup;cherry-pickcopies a commit, such as a hotfix, onto another branch;revertadds an inverse commit to undo shared history;reset --harddiscards local work. - Treat the API contract as a product. OpenAPI describes paths, methods, schemas, status codes, and security. Additive changes such as a new optional field or endpoint are usually non-breaking. Renaming or removing fields, changing types, or tightening validation is breaking.
- Version explicitly, commonly in the path such as
/v1/..., and publish a deprecation policy. Use consistent error bodies, pagination, and idempotency for retried writes. - Test at levels: unit tests isolate logic with mocks; integration tests exercise real dependencies; contract tests verify provider and consumer compatibility. TDD is red, green, refactor.
- Use JSON for API payloads, YAML for human-edited configuration, XML where legacy systems require it, and YANG for model-driven network configuration.
Worked example
A mobile client uses GET /v1/devices. A team wants to add location and rename name to hostname. Reasoning: adding an optional location field is backward compatible, so it can ship in v1. Renaming name breaks existing decoders. Keep name, add hostname as an alias if needed, and schedule removal only in /v2. Update the OpenAPI schema, add a contract test that asserts name still exists, and document the deprecation date.
Traps
- Using HTTP 200 with an error body instead of 4xx or 5xx.
- Rebasing a branch that others are using.
- Making a breaking schema change without a version or migration window.
- Testing only the happy path.
- Assuming YAML indentation is forgiving; it is structural.