When faced with a new challenge, I tend to jump directly into vim and hack away. That's great for personal projects, but for something more long term, I use this checklist to make sure I think through all aspects of a problem space.
This is a starting list, and it is by no means conclusive but rather a starting point for discussion with developers, PMs, designers, etc.
- What is the high-level feature?
- Who are the users?
- What are the high level flows?
- How many users/how often are they hitting the feature/system?
- Third Party Dependencies
- Security/Privacy/Legal Requirements
What are the dependencies to this feature?
- Cloud Services
For each dependency:
- What happens if the application fails
- What are your isolation boundaries?
- Is there a degraded experience possible?
What's the monitoring approach?
- Backup/restore strategy?
- Downtime requirements
- Storage/Retrieval requirements
- Performance Requirements (data structure/indexes)
- Error/Loading States
- Does your team have all the knowledge it needs to accomplish the task?
- Who are the right resources to reach out to for questions/concerns?
- How is this tested?
- What's the rollout like (feature flags? beta users?)
- What is the support story? (Support tools? Documentation?)
- What is the monitoring story? (Production Monitors, Alerts, Etc.)