I am an engineer. I really like to solve problems. To do that, I like to know as much as I can about the problem. I think a lot of engineers really feel the same way, but it can be hard sometimes to gather all the information you need to create a good solution to the problem.
Recently I have been thinking a lot about what I would love to have in an engineering task. A really effective task is one that gives the engineer a strong base to start with, and hopefully most of what they need to dig into and execute a task.
In an ideal situation a good team is comprised of an engineer, a user experience or design team member and project manager or stakeholder. Preferably, each team meets quickly and often to:
- Define the problem
- Think through solutions
- Agree to a proposed solution
Once the problem is clearly defined, you can work toward finding a solution.
On thinking about the solution:
1. Define the happy path and error case(s)
— What should happen?
— What if something goes wrong?
2. Run through alternative flows
— What happens if a user of X type visits this page?
— When a user enters an invalid state, should X happen?
3. Discover the known unknowns
— What information is missing?
— Is there documentation of this feature?
Once the solution is agreed on, it is time to nail down some of the requirements. This is a key phase that lays down a strong grounding for the engineers to estimate and deliver the feature.
- Links to the pages that will be affected, alternatively screenshots can help here as well.
- A strong description of the current behavior is a great.
- Clear definition of user types and how they are affected.
Desired behavior :
- List of the pages you want the new behavior on
- Wireframes for user experience flow
- Comps for detailed visual treatment
- Detailed account of the assumed behavior
- Detailed user stories covering each role
- A clear solution for out what happens if there is an error
Teams should be able to follow the approach outlined above before starting work on all features, but even just making a template for all the aspects of the work can help a team fill in the gaps and keep them communicating with each other. Producing clear, executable specifications is a huge help to getting work done and stronger communication builds stronger teams.