iAdd MVP principle to bitreich style. - 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 1commit a9d1a41e65352022f88865d209269def59979346 /scm/bitreich-style/commit/a9d1a41e65352022f88865d209269def59979346.gph bitreich.org 70 1parent f428b125ec23c9c03c88380e2ecde62c04a943bf /scm/bitreich-style/commit/f428b125ec23c9c03c88380e2ecde62c04a943bf.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Sun, 22 Aug 2021 21:39:16 +0200 Err bitreich.org 70 i Err bitreich.org 70 iAdd MVP principle to bitreich style. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i A MVP.txt | 115 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 115 insertions(+), 0 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/MVP.txt b/MVP.txt /scm/bitreich-style/file/MVP.txt.gph bitreich.org 70 i@@ -0,0 +1,115 @@ Err bitreich.org 70 i+Original: gopher://katolaz.net/0/p/MVP.txt Err bitreich.org 70 i+ Err bitreich.org 70 i+@var title = "Minimal Viable Programs" Err bitreich.org 70 i+@var tags = "programming" Err bitreich.org 70 i+ Err bitreich.org 70 i+A minimal viable program is the smallest program that solves a Err bitreich.org 70 i+particular problem. It is small and beautiful. It has no additional Err bitreich.org 70 i+features. Err bitreich.org 70 i+ Err bitreich.org 70 i+If you removed a single feature it would be totally useless. If you Err bitreich.org 70 i+added a new feature that feature would not be essential, you could use Err bitreich.org 70 i+the program without making use of the new feature. Err bitreich.org 70 i+ Err bitreich.org 70 i+Very few of the programs I use are minimal viable programs, but some Err bitreich.org 70 i+are. I'll describe one such program. This is the ticket system that Err bitreich.org 70 i+was used in the Erlang distribution. Err bitreich.org 70 i+ Err bitreich.org 70 i+* The Erlang Ticket System Err bitreich.org 70 i+ Err bitreich.org 70 i+The Erlang ticket system was designed and implemented by Peter Högfeldt Err bitreich.org 70 i+in 1986. We needed a ticket system that was easy to use, intuitive, Err bitreich.org 70 i+reliable and we wanted it yesterday, so Peter got the job, since he Err bitreich.org 70 i+was very busy and didn't have time to take on any new jobs. Err bitreich.org 70 i+ Err bitreich.org 70 i+If you want a job done find the busiest person you know and give them Err bitreich.org 70 i+an extra job. This is because the reason they are busy is that lot's Err bitreich.org 70 i+of people want them to do things because they are good at doing things Err bitreich.org 70 i+and that's why they are busy. Err bitreich.org 70 i+ Err bitreich.org 70 i+Peter built the ticket system in a couple of hours and we've been Err bitreich.org 70 i+using it ever since. I guess the couple of hours were divided into an Err bitreich.org 70 i+hours drinking coffee and drawing things on a white board and twenty Err bitreich.org 70 i+minutes programming. Err bitreich.org 70 i+ Err bitreich.org 70 i+* The Ticket System Err bitreich.org 70 i+ Err bitreich.org 70 i+Peter's ticket system was simple in the extreme. There was one command. Err bitreich.org 70 i+You typed **newticket** in the shell and got an integer back. Like this: Err bitreich.org 70 i+ Err bitreich.org 70 i+$ new_ticket Err bitreich.org 70 i+ Err bitreich.org 70 i+ Err bitreich.org 70 i+The system had made a new file in `${HOME}/tickets/23` and the content Err bitreich.org 70 i+of the file would be: Err bitreich.org 70 i+ Err bitreich.org 70 i+ticket: 23 Err bitreich.org 70 i+responsible:joe@erix Err bitreich.org 70 i+status:open Err bitreich.org 70 i+title: ? Err bitreich.org 70 i+---- Err bitreich.org 70 i+Describe your problem here Err bitreich.org 70 i+ Err bitreich.org 70 i+This file was also checked into a global CVS archive that all project Err bitreich.org 70 i+members had access to. Today one might use GIT or SVN but any revision Err bitreich.org 70 i+control system would do. Err bitreich.org 70 i+ Err bitreich.org 70 i+The ticket system had a few simple rules: Err bitreich.org 70 i+ Err bitreich.org 70 i++ The status is open or closed Err bitreich.org 70 i++ The responsible person cannot be changed to somebody new without the permission of the new person Err bitreich.org 70 i+ Err bitreich.org 70 i+Project management wanted a reporting system. This was pretty easy, Err bitreich.org 70 i+this was done with a few simple shell scripts. For example to Err bitreich.org 70 i+find the number of open tickets a simple shell script does the job: Err bitreich.org 70 i+ Err bitreich.org 70 i+#!/bin/sh Err bitreich.org 70 i+grep 'status:open' ${HOME}/tickets/* | wc Err bitreich.org 70 i+ Err bitreich.org 70 i+The first ticket system was operational in 1985 and we have used it ever since. Err bitreich.org 70 i+ Err bitreich.org 70 i+* Adding features Err bitreich.org 70 i+ Err bitreich.org 70 i+Do we need to add additional features? The first point to note is Err bitreich.org 70 i+there is no time or dates - but wait a moment, this file is checked into Err bitreich.org 70 i+a revision control system, so the times when the file is created and modified Err bitreich.org 70 i+are in the revision control system and do not need to be added to the ticket. Err bitreich.org 70 i+ Err bitreich.org 70 i+* What happened later? Err bitreich.org 70 i+ Err bitreich.org 70 i+Feature were added - but none that broke the original spirit of the design. Err bitreich.org 70 i+ Err bitreich.org 70 i+* But we can't make money from a MVP Err bitreich.org 70 i+ Err bitreich.org 70 i+ Many companies sell ``features'' - so a MVP will be useless - a product Err bitreich.org 70 i+needs new features. But the MVP program will do exactly the same thing Err bitreich.org 70 i+in 100 years time as it did yesterday. Err bitreich.org 70 i+ Err bitreich.org 70 i+New features mean new sales opportunities, good for the company but Err bitreich.org 70 i+not good for the user. Err bitreich.org 70 i+ Err bitreich.org 70 i+New features mean new untested code, and backwards incompatibility Err bitreich.org 70 i+with earlier versions of the program. Things that are stable for a Err bitreich.org 70 i+long time are good. Err bitreich.org 70 i+ Err bitreich.org 70 i+The problem with adding features to MVP is that when we ship more Err bitreich.org 70 i+complex products like complete operating systems that are packed with Err bitreich.org 70 i+programs, the complexity of the individual programs contributes to the Err bitreich.org 70 i+complexity of the whole. Err bitreich.org 70 i+ Err bitreich.org 70 i+If a system shipped with one complex program it probably would not Err bitreich.org 70 i+matter - and it's difficult to imagine the idea of a MVP applying to Err bitreich.org 70 i+a complex program like photoshop. Err bitreich.org 70 i+ Err bitreich.org 70 i+If the individual components in a system are not MVPs we will soon be Err bitreich.org 70 i+overburdened by complexity when we start combining programs to build Err bitreich.org 70 i+larger systems. Err bitreich.org 70 i+ Err bitreich.org 70 i+If we to have any control over complexity then we should ensure that the Err bitreich.org 70 i+basic components are MVPs. Err bitreich.org 70 i+ Err bitreich.org 70 i+I really like systems that do one essential thing and do it well. Err bitreich.org 70 i+Good examples are Dropbox and Twitter. Dropbox just works. Twitter Err bitreich.org 70 i+has a no fuss 140 character tweet box. Simple, easy to understand Err bitreich.org 70 i+and minimalist. Err bitreich.org 70 i+ Err bitreich.org 70 .