iMVP.txt - bitreich-style - Style guide for programmers. Err bitreich.org 70 hgit clone git://bitreich.org/bitreich-style URL:git://bitreich.org/bitreich-style bitreich.org 70 1Log /scm/bitreich-style/log.gph bitreich.org 70 1Files /scm/bitreich-style/files.gph bitreich.org 70 1Refs /scm/bitreich-style/refs.gph bitreich.org 70 1Tags /scm/bitreich-style/tag bitreich.org 70 1README /scm/bitreich-style/file/README.md.gph bitreich.org 70 1LICENSE /scm/bitreich-style/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 iMVP.txt (4190B) Err bitreich.org 70 i--- Err bitreich.org 70 i 1 Original: gopher://katolaz.net/0/p/MVP.txt Err bitreich.org 70 i 2 Err bitreich.org 70 i 3 @var title = "Minimal Viable Programs" Err bitreich.org 70 i 4 @var tags = "programming" Err bitreich.org 70 i 5 Err bitreich.org 70 i 6 A minimal viable program is the smallest program that solves a Err bitreich.org 70 i 7 particular problem. It is small and beautiful. It has no additional Err bitreich.org 70 i 8 features. Err bitreich.org 70 i 9 Err bitreich.org 70 i 10 If you removed a single feature it would be totally useless. If you Err bitreich.org 70 i 11 added a new feature that feature would not be essential, you could use Err bitreich.org 70 i 12 the program without making use of the new feature. Err bitreich.org 70 i 13 Err bitreich.org 70 i 14 Very few of the programs I use are minimal viable programs, but some Err bitreich.org 70 i 15 are. I'll describe one such program. This is the ticket system that Err bitreich.org 70 i 16 was used in the Erlang distribution. Err bitreich.org 70 i 17 Err bitreich.org 70 i 18 * The Erlang Ticket System Err bitreich.org 70 i 19 Err bitreich.org 70 i 20 The Erlang ticket system was designed and implemented by Peter Högfeldt Err bitreich.org 70 i 21 in 1986. We needed a ticket system that was easy to use, intuitive, Err bitreich.org 70 i 22 reliable and we wanted it yesterday, so Peter got the job, since he Err bitreich.org 70 i 23 was very busy and didn't have time to take on any new jobs. Err bitreich.org 70 i 24 Err bitreich.org 70 i 25 If you want a job done find the busiest person you know and give them Err bitreich.org 70 i 26 an extra job. This is because the reason they are busy is that lot's Err bitreich.org 70 i 27 of people want them to do things because they are good at doing things Err bitreich.org 70 i 28 and that's why they are busy. Err bitreich.org 70 i 29 Err bitreich.org 70 i 30 Peter built the ticket system in a couple of hours and we've been Err bitreich.org 70 i 31 using it ever since. I guess the couple of hours were divided into an Err bitreich.org 70 i 32 hours drinking coffee and drawing things on a white board and twenty Err bitreich.org 70 i 33 minutes programming. Err bitreich.org 70 i 34 Err bitreich.org 70 i 35 * The Ticket System Err bitreich.org 70 i 36 Err bitreich.org 70 i 37 Peter's ticket system was simple in the extreme. There was one command. Err bitreich.org 70 i 38 You typed **newticket** in the shell and got an integer back. Like this: Err bitreich.org 70 i 39 Err bitreich.org 70 i 40 $ new_ticket Err bitreich.org 70 i 41 Err bitreich.org 70 i 42 Err bitreich.org 70 i 43 The system had made a new file in `${HOME}/tickets/23` and the content Err bitreich.org 70 i 44 of the file would be: Err bitreich.org 70 i 45 Err bitreich.org 70 i 46 ticket: 23 Err bitreich.org 70 i 47 responsible:joe@erix Err bitreich.org 70 i 48 status:open Err bitreich.org 70 i 49 title: ? Err bitreich.org 70 i 50 ---- Err bitreich.org 70 i 51 Describe your problem here Err bitreich.org 70 i 52 Err bitreich.org 70 i 53 This file was also checked into a global CVS archive that all project Err bitreich.org 70 i 54 members had access to. Today one might use GIT or SVN but any revision Err bitreich.org 70 i 55 control system would do. Err bitreich.org 70 i 56 Err bitreich.org 70 i 57 The ticket system had a few simple rules: Err bitreich.org 70 i 58 Err bitreich.org 70 i 59 + The status is open or closed Err bitreich.org 70 i 60 + The responsible person cannot be changed to somebody new without the permission of the new person Err bitreich.org 70 i 61 Err bitreich.org 70 i 62 Project management wanted a reporting system. This was pretty easy, Err bitreich.org 70 i 63 this was done with a few simple shell scripts. For example to Err bitreich.org 70 i 64 find the number of open tickets a simple shell script does the job: Err bitreich.org 70 i 65 Err bitreich.org 70 i 66 #!/bin/sh Err bitreich.org 70 i 67 grep 'status:open' ${HOME}/tickets/* | wc Err bitreich.org 70 i 68 Err bitreich.org 70 i 69 The first ticket system was operational in 1985 and we have used it ever since. Err bitreich.org 70 i 70 Err bitreich.org 70 i 71 * Adding features Err bitreich.org 70 i 72 Err bitreich.org 70 i 73 Do we need to add additional features? The first point to note is Err bitreich.org 70 i 74 there is no time or dates - but wait a moment, this file is checked into Err bitreich.org 70 i 75 a revision control system, so the times when the file is created and modified Err bitreich.org 70 i 76 are in the revision control system and do not need to be added to the ticket. Err bitreich.org 70 i 77 Err bitreich.org 70 i 78 * What happened later? Err bitreich.org 70 i 79 Err bitreich.org 70 i 80 Feature were added - but none that broke the original spirit of the design. Err bitreich.org 70 i 81 Err bitreich.org 70 i 82 * But we can't make money from a MVP Err bitreich.org 70 i 83 Err bitreich.org 70 i 84 Many companies sell ``features'' - so a MVP will be useless - a product Err bitreich.org 70 i 85 needs new features. But the MVP program will do exactly the same thing Err bitreich.org 70 i 86 in 100 years time as it did yesterday. Err bitreich.org 70 i 87 Err bitreich.org 70 i 88 New features mean new sales opportunities, good for the company but Err bitreich.org 70 i 89 not good for the user. Err bitreich.org 70 i 90 Err bitreich.org 70 i 91 New features mean new untested code, and backwards incompatibility Err bitreich.org 70 i 92 with earlier versions of the program. Things that are stable for a Err bitreich.org 70 i 93 long time are good. Err bitreich.org 70 i 94 Err bitreich.org 70 i 95 The problem with adding features to MVP is that when we ship more Err bitreich.org 70 i 96 complex products like complete operating systems that are packed with Err bitreich.org 70 i 97 programs, the complexity of the individual programs contributes to the Err bitreich.org 70 i 98 complexity of the whole. Err bitreich.org 70 i 99 Err bitreich.org 70 i 100 If a system shipped with one complex program it probably would not Err bitreich.org 70 i 101 matter - and it's difficult to imagine the idea of a MVP applying to Err bitreich.org 70 i 102 a complex program like photoshop. Err bitreich.org 70 i 103 Err bitreich.org 70 i 104 If the individual components in a system are not MVPs we will soon be Err bitreich.org 70 i 105 overburdened by complexity when we start combining programs to build Err bitreich.org 70 i 106 larger systems. Err bitreich.org 70 i 107 Err bitreich.org 70 i 108 If we to have any control over complexity then we should ensure that the Err bitreich.org 70 i 109 basic components are MVPs. Err bitreich.org 70 i 110 Err bitreich.org 70 i 111 I really like systems that do one essential thing and do it well. Err bitreich.org 70 i 112 Good examples are Dropbox and Twitter. Dropbox just works. Twitter Err bitreich.org 70 i 113 has a no fuss 140 character tweet box. Simple, easy to understand Err bitreich.org 70 i 114 and minimalist. Err bitreich.org 70 i 115 Err bitreich.org 70 .