aristocratjnr@portfolio:~/check
$ ./check-display.sh
Detected viewport
~ Narrow layout — some features optimized for desktop
$ cat ./contact-info
Obuobi Ayim David — Software Engineer & QA
$ ./resume --brief
aristocratjnrportfolio|available for work|0%|contact||

/playbook

$ Engineering principles and workflows I've refined over the years.
$ Press / to filter · j/k or ↑/↓ to navigate · Enter to expand · c to copy

← Back home
TESTING

TDD for critical paths

Write the test first. Watch it fail. Make it pass. Refactor. Only for code that matters — business logic, auth, payments.

TESTING

Integration over unit for business logic

Unit tests verify functions. Integration tests verify behavior. The latter catches the bugs that actually reach users.

TESTING

E2E for user journeys, not states

One Playwright test per critical user journey. Not one per screen, not one per button state. Journey = signup → verify → onboard → first-value.

TESTING

80% coverage — diminishing returns after

Enforce 80% in CI. Below that, you're guessing. Above it, you're theater. The last 20% is usually generated code, DTOs, and framework glue.

REVIEW

PRs under 400 lines — larger needs justification

Small PRs review faster, merge faster, revert cleaner. Over 400 lines? Split it. Or write a design doc first.

REVIEW

Review SLA: 24h or reassign

Unreviewed PRs rot. 24h SLA. If you can't review, reassign. If no one can, the PR is too big or the team is overloaded.

REVIEW

Every PR needs tests or a 'why not'

New code without tests is a liability. The PR template has a 'Testing' section. Fill it with: unit/integration/E2E added, or 'N/A: config change / refactor / spike'.

REVIEW

No silent pushes to main

Branch → PR → review → merge commit. Always. Fast-forward merges erase history. Rebase locally, but merge commits preserve the 'why'.

SHIPPING

Ship small, ship often — deploy Friday is a myth

Batch size correlates with failure rate. Deploy 10 times daily with 50-line changes, not once weekly with 5000. Friday deploys fail because context is low, not because it's Friday.

SHIPPING

Feature flags for risky changes, gradual rollout

Wrap new behavior in a flag. Ship to 5% → 25% → 100%. Monitor error rates at each step. Kill switch in < 30s.

SHIPPING

Watch errors for 30min after every deploy

Deploy → start timer → watch Sentry/Datadog for 30min. No alerts? Good. Spike? Rollback in 2 clicks. This is non-negotiable.

SHIPPING

Rollback plan ready before every release

If you can't rollback in 60 seconds, you're not ready to deploy. Database migrations need down scripts. Schema changes need backward compatibility.

ARCHITECTURE

Prefer composition over inheritance

Inheritance couples. Composition configures. A class hierarchy is a liability. A set of focused, composable functions is an asset.

ARCHITECTURE

Separate side effects from business logic

Pure functions are testable, cacheable, parallelizable. Side effects (DB, HTTP, time, random) belong at the edges. The core is a pure state machine.

ARCHITECTURE

Data flows one direction — server → client

Client renders server state. Mutations go to server → server responds with new state → client re-renders. No client-side caches that diverge.

ARCHITECTURE

APIs should be stateless where possible

Session affinity is a scaling trap. JWT in cookies, or token in header. The request carries all auth context. Any instance can handle any request.

CULTURE

Blameless postmortems — always

Incident happens. Write the timeline. Ask 'what failed in the system?' not 'who failed?'. Action items = process fixes, not 'be more careful'.

CULTURE

On-call rotation with fair escalation

Week-long rotations. Primary + secondary. Escalation path documented. PagerDuty/Opsgenie. Compensate for out-of-hours. No hero culture.

CULTURE

20% tech debt budget every sprint

Not 'when we have time'. Scheduled. 1 day per 5-day sprint. Refactor the hot path. Upgrade the dependency. Fix the flaky test. Delete the dead code.

CULTURE

Write it down — ADRs, runbooks, decisions

If it's not written, it doesn't exist. Architecture Decision Records for choices. Runbooks for incidents. READMEs for services. Onboarding docs for humans.