- Facility to write and execute E2E tests,
- Facility to write and execute Integration (e.g. repository) tests.
- Facility to control DB state effectively (e.g. fixtures for dev setup + tests)
- Ability to test emails
- Test reports (e.g. monitor test results over time)
- Performance / load tests (e.g. Jmeter, Gatling, PHPBench)
- Smoke tests (e.g. CMS pages) on local / int / live
- Run all tests on every push
- Feature builds
- Static analysis (e.g. PHPStan)
- CS sniff / fixing: (e.g. phpcs / phpcsfixer)
- Database Migrations (e.g. Doctrine Migrations)
- Ability to publish assets (e.g. test reports)
- Automated deployment
- Pairing
- Avoid knowledge silos
- Be prepared to talk / video call
- BDD: All new features should start with a feature file
- BDD: Feature files to be named / annotated with JIRA ticket #
- TDD: Tests before writing business code
- Use of ADRs
- Do NOT use git flow prefix.
- Do NOT enforce HTTPS for dev (complications with certificates)
- Host-independent application (should be able to run on e.g. localhost:8080)
- Consistent naming everywhere (e.g. GH repo, Confluence)
- Facility to employ feature flags
- Clean code
- Mandatory code reviews before merge
- Branch protection: disallow merging to master
- Pull requests must be merged by somebody else
- Easy, consistent, credentials: for database and application users (e.g. root/root, admin/admin)
- No SQL dumps - project should be independent of production site
- Mail catcher or similar
- If required: Docker compose or equivilent (if we can run on bare-metal, then all the better)
- XDebug
- Profiler (e.g. Tideways / Blackfire / XDebug)
- Development toolbar where applicable (e.g. Symfony profiler)
- Fully decoupled from production
- Gherkin integration (link scenarios/features to tickets)
- No pointless subtasks
- No pointless workflow stages
- Customize!