Minimal Viable Programs – Joe Armstrong – Erlang and Other Stuff
joearms.github.io
joearms.github.io
Love Joe Armstrong.
https://erlang.org/download/armstrong_thesis_2003.pdf
It is just as relevant today as when it was written.
Here it is on github for anyone who's interested: https://github.com/tpapastylianou/bashtickets
My tool is slightly less minimal than the one in the article, but essentially the same philosophy. Everything is a local file following a simple but fixed template, so that they can be grepped / manipulated if necessary. It plays very well with versioning, and supports milestones and 'advanced queries' as pre-made scripts. Obviously, since the tickets/milestones are simple text, it should be fairly straightforward to write your own queries if you know a bit of bash (or any other language you prefer, obviously).
In fact, this little system has worked so well, that I have recently been trying to convert it to a nice, portable, "command-based" tool, i.e. the way git works; bashtickets init (or just bt init) initialises a ticket repository, bt new ticket creates a new ticket, bt list lists open/closed tickets, or active/completed milestones etc. There's nothing wrong with the original, of course, except for the fact that it's a bit ugly to have a bag of scripts in each ticket repository you want to manage. A command-based interface simply makes it look a bit more 'modern', and clean, putting any pre-made scripts and 'template' files out of sight for peace of mind. This is still very much under development, but please see the "commandbased" branch if interested [1]. I'd be very open to feedback :)
[0] https://github.com/tpapastylianou/bashtickets
[1] https://github.com/tpapastylianou/bashtickets/tree/commandbasedHaving locally created sequential ID's seems...strange. Or you simply have so few people creating ID's (and committing them so quickly) that it's not an issue.
There are tons of ways of resolving this (such as author-prefixed ids "joe-23"). But simply calling it ticket++ in a global shared directory seems it could become a source of frustration and honestly a pretty inelegant solution to the problem. He mentions "doing one thing and doing it well" and being a "minimum viable program". One could argue that doing ONE thing reasonably when it comes to creating database records, is allowing me to create one without a conflicting ID. If the new_ticket command is actually immediately creating the entry in the central repository, retrying until it successfully allocates the next ID, then it works I suppose.
This means that in any multi-member project, it encourages users to first check that a similar/duplicate ticket has not already made it into the repository in the meantime, and commit their tickets and make them visible to all other users with an accompanyign commit (and any notification-hooks that this entails) as soon as possible.
Obviously you could also have a commit hook which reindexes tickets automatically, yes, but the focus here is all about simplicity and hackability first - and I think a behavioural solution is probably better than an automated one in this case anyway.
Rule #1 of minimum viable programs is to solve the problems you have rather than as something (number of users in this case) goes to infinity. If you're working with software developers and they can't trivially resolve a merge conflict of this nature, perhaps they are not the best at their craft.
A minimum viable product is of course possible to claim by constraining it further. No references between tickets! Just write a short note what you want and solve the problem with references when you come to it! A ticket system doesn't need cross references!
I'd say it's definitely "minimum viable" (especially considering WHEN this was) but I wouldn't say a workitems-in-repo-with-races-for-ids will be a "do one thing well" situation. It's rather a "do one thing in the simplest way possible"
https://news.ycombinator.com/item?id=21434844 - Nov 3, 2019 (72 comments)
https://news.ycombinator.com/item?id=10159545 - Sep 2, 2015 (11 comments)
I mean if you navigate to the index https://joearms.github.io/index.html#Index it says that this is actually a Quine.
Sigh, good old times... Maybe add 2014 to the title.
I have been running it for months now without any issues.