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!]