Re:Minimal Viable Programs – Joe Armstrong – Erlang and Othe...
by sodapopcan on Sunday January 16, 2022 @08:48PM
(#29962488)
> If you want a job done find the busiest person you know and give them an extra job. This is because the reason they are busy is that lot's of people want them to do things because they are good at doing things and that's why they are busy.
Re:Minimal Viable Programs – Joe Armstrong – Erlang and Othe...
by mbrodersen on Monday January 17, 2022 @09:31PM
(#29974291)
Or perhaps find the most competent person who isn’t busy? Incompetent people tend to be busy all the time because they don’t know how to work effectively. A bad developer will add as many bugs as new features and will therefore be busy all the time, always falling behind. A great developer will introduce very few new bugs and can therefore easily add new features, not falling behind.
Re:Minimal Viable Programs – Joe Armstrong – Erlang and Othe...
by dpeck on Sunday January 16, 2022 @08:38PM
(#29962435)
Gone too soon. I hope that Joe’s influence continues to expand outside of the erlang community over time. His thoughts, writings, and presentations have a lot of value for almost anyone in computing. Much of it advocating for “human scale” software that is reasonable to work with from a developer and end user perspective.
Re:Minimal Viable Programs – Joe Armstrong – Erlang and Othe...
by tpoacher on Monday January 17, 2022 @06:42AM
(#29965597)
I created something similar when I had to work in an extremely resource-constrained project (we could only work by ssh'ing to a server with no graphical utilities, and no internet access other than ssh). It has worked like a charm, and I would find it difficult to go back to anything else for ticket management now. I use this for 'in-project tickets/milestones' and leave stuff like github issues for 'external' issues by users.
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 :)
Re:Minimal Viable Programs – Joe Armstrong – Erlang and Othe...
by alkonaut on Monday January 17, 2022 @04:54AM
(#29964952)
> This file was also checked into a global CVS archive that all project members had access to. Today one might use GIT or SVN but any revision control system would do.
Having 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.
Re:Minimal Viable Programs – Joe Armstrong – Erlang and Othe...
by tpoacher on Monday January 17, 2022 @06:50AM
(#29965643)
Having made a similar project (see comment above: https://news.ycombinator.com/item?id=29965597 ) there's a (predictable? unexpected?) benefit to keeping a numerical index. It forces the ticket opener to commit as soon as possible, or risk having to re-index their tickets due to conflicts.
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.
Re:Minimal Viable Programs – Joe Armstrong – Erlang and Othe...
by bachmeier on Monday January 17, 2022 @07:45AM
(#29965989)
> Or you simply have so few people creating ID's (and committing them so quickly) that it's not an issue.
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.
Re:Minimal Viable Programs – Joe Armstrong – Erlang and Othe...
by alkonaut on Monday January 17, 2022 @08:52AM
(#29966526)
That's indeed true - but it does require some thinking ahead. You need to effectively commit and reserve the ID before you use it elsewhere. If you plan on writing two tickets where one references the other, you need to consider whether you should quickly reserve two ids then fill in the tickets, for example. Otherwise the conflict isn't trivial as you also have to resolve non-conflicted lines with textual references between the work items.
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"
Re:Minimal Viable Programs – Joe Armstrong – Erlang and Othe...
by CRConrad on Wednesday January 19, 2022 @05:31AM
(#29991953)
Yeah, from his WP link quines are, among other descriptions, "self-replicating programs". And in the same blog header he also says it's a TiddlyWiki. That's one of many kinds of TinyWikis, and a rather interesting one in that it's self-contained: The entire source code for its Wikifying is contained as JavaScript within the actual HTML page itself. I guess that's what he means; TiddlyWiki pages are kind of "self-replicating" and therefore kind of quines.
Re:Minimal Viable Programs – Joe Armstrong – Erlang and Othe...
by hydrox24 on Monday January 17, 2022 @12:40AM
(#29963667)
If you're looking for an open-source replacement, I have been really impressed with Syncthing. It is decentralised (and directly device-to-device), but if you can afford the space on your phone or an always-on computer at home, it is basically a drop-in replacement for Dropbox. It only worries about syncing files. Nothing else.
Re:Minimal Viable Programs – Joe Armstrong – Erlang and Othe...
by danieldk on Monday January 17, 2022 @01:51AM
(#29964016)
Or if you want Dropbox, because you need it for work or because it makes it's easier to share with family and friends, there is an awesome open source Dropbox client:
Love Joe Armstrong.
https://quoteinvestigator.com/2018/01/30/busy/
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 :)
Having 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.
https://syncthing.net/
https://maestral.app
I have been running it for months now without any issues.