pages tagged developmentyakkinghttp://yakking.branchable.com/tags/development/yakkingikiwiki2017-06-14T12:00:14ZPiecemeal developmenthttp://yakking.branchable.com/posts/the-way-of-the-yak/Richard Maw2017-06-14T12:00:14Z2017-06-14T12:00:07Z
<p>Daniel recently discussed the <a href="https://en.wikipedia.org/wiki/Minimum_viable_product">Minimum Viable Product</a> development approach.</p>
<p>As discussed in his article it has the disadvantage
that it results in a lot of code that will be thrown away
after being deemed to be insufficient.</p>
<p>An alternative approach is to do some analysis up-front
and determine the full set of functionality
and split the work into sub-projects,
so that each component is a project of value by itself.</p>
<p>For example, you may be writing a daemon in python
which needs to be able to safely create and read PID files.</p>
<p>You would then need to investigate which projects exist for doing so,
evaluate whether they are sufficient,
and if not either develop a replacement or contribute to an existing project.</p>
<p>For an ambitious project this can provide more good in the short term,
since while it will take a while before the project's main goal is achieved,
some of the component parts are already of value.</p>
<p>This can be better for motivation than the <a href="https://en.wikipedia.org/wiki/Minimum_viable_product">Minimum Viable Product</a> approach
if the developers involved tend towards obsessing over minutiae
and having the "correct" solution for every little part of the project.</p>
<p>However it is particularly vulnerable to losing motivation
from introspection of the current state of the project compared to its goal,
since it takes longer to get to something demonstrable
if feedback on the individual components is not readily available.</p>
<p>This may be viewed as an <a href="https://en.wikipedia.org/wiki/Agile_software_development">agile</a> vs. <a href="https://en.wikipedia.org/wiki/Waterfall_model">waterfall</a> development methodology,
since it requires a large amount of analysis up-front
to determine which components are required
and which should be split out into separate projects,
but those individual components may be reusable.</p>
<p>Similarly, if it turns out that the goal of the project was bad,
then at least the component parts of the project are salvageable.</p>
<p>If the project does eventually fail,
then at least lessons will have been learned for future attempts.</p>