graph TD haveProblem{do you have
a problem that needs
to be solved?} haveProblem-->|no|noProblem haveProblem-->|yes|wantStart noProblem[check again]; noProblem-->haveProblem wantStart{is there any way
to solve this problem
without software?}; wantStart-->|yes|dontStart wantStart-->|no|wantBuild dontStart[do that]; wantBuild{can you use software
that already exists
without firing
all your staff?} wantBuild-->|yes|dontStart wantBuild-->|no|reallyNeedFix reallyNeedFix{are you sure
you need to fix
this problem?} reallyNeedFix-->|yes|haveTeam reallyNeedFix-->|maybe not|liveWithIt liveWithIt[live with it] liveWithIt-->haveProblem haveTeam{do you have a team?} haveTeam-->|no|makeTeam haveTeam-->|yes|understand makeTeam[get a team, 1-5 people, appropriate skills
aim for diversity apart from they should all be nice] makeTeam-->understand understand{do the team understand
the problem you're trying to solve?} understand-->|no|tryUnderstand understand-->|yes|buildSkeleton tryUnderstand-->buildSkeleton tryUnderstand[team should work with users / stakeholders
until they understand the problem and vision of the solution] buildSkeleton[team build software skeleton including the build system,
test framework, CI pipeline, monitoring, etc as required] buildSkeleton-->nextFeature nextFeature{do you need to make a change
such as add a feature or improve the skeleton?} nextFeature-->|no|featureComplete nextFeature-->|yes|featureCheck featureCheck{is this the most important thing to do now?} featureCheck-->|yes|designFeature featureCheck-->|no, let me think again|nextFeature designFeature[this is where whoever is working on the feature thinks hard about it
does some design work, talks to people etc.] designFeature-->buildFeature buildFeature[do the thing. and do it properly, with tests
and appropriate documentation and whatnot.
and don't forget to refactor.] buildFeature-->bugCheck bugCheck{does the software have any bugs?} bugCheck-->|no|nextFeature bugCheck-->|yes|fixBugs fixBugs[fix 'em] fixBugs-->nextFeature featureComplete[you're done - go and find a new problem!]