Finish Your Stuff (2015)
250bpm.com
250bpm.com
Except no carpenters ever gives out chairs for free let alone thousands and millions of them for free. And then they get abused for making a shoddy chair even though sometimes it is the best thing available in the market for free.
There is an amazing video editing program for Linux called shotcut. Absolutely and 100% free. It may not be finished but The commercial version of it on Windows costs anything from hundreds to thousands of dollars per month yet this is the comment I came across from a person today(1):
> It’s even named SHOTCUT so similar to SHORTCUT. The only reason i stay with it is because i only know how to edit on it. @shotcut, if you are reading this, i hope you have a bad day.
I've read similar comments on vlc, audacity, etc. The amount of complaints and lack of appreciation of OSS projects is absolutely mind boggling to me, yet we keep getting new amazing software for free.
(1) https://forum.shotcut.org/t/move-more-clips-at-a-time/10105
The free version of Da Vinci Resolve was released back when it was still a color-correction tool, before it started adding meaningful editing capabilities. So, no, I don’t think Shotcut is relevant.
But man, it would probably feel great to reply as @shotcut, "Your license to use shotcut has been revoked under section 8.3.4 of the license agreement. Please cease use of shotcut until remedies under section 8.3.4 have been made (public written apology for abusive behavior)".
I find the worst is with OSS projects that are intended to replace professional software. Software that costs hundreds or thousands of dollars.
Gimp, shotcut(and other video editors), libreCAD, libreoffice, OSM, Ardour, inkscape, Krita, even linux itself.
I've seen some of the most vitriolic and nitpicky comments towards that and other similar software, over sometimes the stupidest things like ui differences to the commercial equivalents or something equally as shallow.
Myself, I'm just happy there's so much professional quality open source software. It may not have the bells and whistles of the fairly expensive commercial equivalents, but compared to only 15 years ago or so, the amount of software these days that will let you do professional quality work at home completely free is incredible to me and the quality of OSS offerings keep getting better, while in a lot of cases, the commercial versions seem to have focused almost entirely on converting as many of their products to services as possible.
> I find the worst is with OSS projects that are intended to replace professional software. Software that costs hundreds or thousands of dollars.
The price of software isn't ever really going to be a consideration when it comes to software that is supposed to be "professional." Obviously when you have direction and strong incentives (make more money) products tend to gain capabilities and polish at a rate that an uncompensated OSS project can't match. But none of that matters to someone trying to edit a video or score a soundtrack or create illustrations or whatever else they're trying to do with their "professional" software.
> I've seen some of the most vitriolic and nitpicky comments towards that and other similar software, over sometimes the stupidest things like ui differences to the commercial equivalents or something equally as shallow.
Except user interface is extremely important for professional software. You are committing a lot of time to learning the way around an application that is extremely complex. This is why people get stuck on a particular digital audio workstation or nonlinear editor versus another. There is an extremely steep learning curve to switch. Free software should be trying to lower the barrier to entry which means replicating user interfaces of popular commercial software. UI differences aren't stupid, they're really important, especially for software that you're expected to be using day in and out every day.
> Myself, I'm just happy there's so much professional quality open source software.
I'm also thankful for it. Not everyone is a professional who can afford the high prices of commercial software and having access to such powerful tools for free is incredible. When I was a kid I pirated a lot of software. Macromedia Dreamweaver and Photoshop were really important to me at the time but nowadays exploring interests is much easier (and safer).
It's one thing to complain about software you pay for negatively.
When I used alphaCAM and Park Industry software I expected to be able to phone them any time and they'd hop on TeamViewer and help me with any and every minor problem, but alphaCAM costs $10,000/year. For that $10,000/year i have every right to complain or ask for any bit of customer service I want, for $0/Ever, I can deal with it, make a polite suggestion and hope for the best, or submit a patch.
I don't think this is really true. When choosing between say, python and Matlab, the price of a license absolutely weighs heavily into the discussion.
The haters know what to do: complain on forums, send in angry bug reports, etc.
What should we grateful ones do? I could email the author(s), if their email is available, but I worry that they don't want more spam.
There's a reason why we haven't had successful kickstarter, indegogo like platform for software; People on average just don't want to pay for intangible stuff even if it affects every aspect of their lives.
To be finished, software has to exist in a specific context, for a circumscribed purpose. But some software is inherently open-ended, because the question of how we should work is open-ended. The way we work has changed over the past decades, and the software that supports that work has also changed. IDEs aren't finished, and neither is Emacs. Compilers might have a stable interface, but their internals aren't ever finished (you can artificially freeze the optimizations you do, but you're not done, you're giving up).
Even for the cases the article starts with, I have my doubts. Is grep finished, or is it stagnant? The wow feature of ripgrep is performance, but it also provides new functionality (like ag before it).[0] Grep is finished, but the cludge of pipelines and copied shell snippets that people attach to it aren't. Eventually someone says "instead of find xargs blah, let's write a tool." Finished software makes a decision about shunting the complexity elsewhere.
[0] Amusingly enough, I don't use ripgrep or ff or many other new tools, because I am a creature of habit. But they look like something I _should_ use.
This is, by far, the reason software doesn’t get finished.
Keeping some software extremely simple and focused is surprisingly controversial. Everyone in the world wants to add just. One. More. Little. Tweak. What could it hurt? It’s not quite complete without it, right?
I do house projects and have built furniture, and when I “finish” those, there is nothing left to do. There is literally no additional work for those projects I can think of.
I’ve never shipped software that didn’t have bugs we didn’t fix, some feedback that didn’t get addressed, technical debt (test etc.) we didn’t get to, or features we wished we added.
Software is just a different beast to a lot of other things that you “finish”.
Let's not pretend that everything needs to be "finished" or monetized. Let's just not kill fun by spreading pressure to "finish" or "get it done".
> Let's just not kill fun by spreading pressure to "finish" or "get it done".
Completely agree. I have no idea why people are being shamed for walking away from projects. They aren't paying us, there's no incentive to offset the boring work. There is absolutely no obligation to finish anything. People who don't like that are more than welcome to do it themselves or pay for it.
If people want to spend time finishing and polishing a project, that is absolutely fine. However, it must happen because they wanted to do it, not because they were shamed for not doing it. Nobody has the right to tell people what to do with their valuable time.
Edit to add: ties in with my reluctance to use “should” with myself or anyone else.
I've made a rust implementation of handlebars rendering that passed all handlebars test cases (on the feature set I covered, namely everything that did not involved JS parsing and evaluation), put it in a lib, ran performance checks against other implementation (not stellar, but good enough) documented the design and common API use cases.
Yet, it was not finished in the sense that it relied on third party compiler plugin with dependencies on APIs removed on rust 1.0 release.
That experimental part was 100% what I wanted to play with, I didn't care much of the risk of being stuck in the end.
So, my goals where met, I moved on, and finished depends only on the way you look at it.
I suspect large part of stuff that get started goes stale for more or less the same circumstances: it is finished because the goal was toying from the start, even though the author might have been delusional on publishing a re-usable outcome.
Both tools are 2-3 hour jobs, running on production for years, and they meet all the requirements. OTOH, if you want to extend them, you can improve them leaps and bounds and they'd be never finished in my life.
I love this quote from DaVinci: "Art is never finished only abandoned". I also consider software as a form of art (which we can debate if you feel), and in my book, software's never finished, only abandoned.
And, to be honest, I love how software is never finished.
I've never thought of it this way, but I think I agree. Nonetheless, can you please explain this idea more? Its an interesting view.
In my book, elegance and high quality design is important, however it's expensive. A good architecture needs a lot of work to build and even more work to keep it clean, because software tends to outgrow its design during iterations as it gets more features. This is the prime cause of software rot.
An elegant architecture is easy to program and extend until you outgrow it. An elegant UI is a beauty to look at. An elegant UX has minimal mental load. OTOH, making all three happen at the same time is a very hard task. My experience is on systems side and high performance code. So I focus on architecture and UX. I try to make very performant and complicated applications very easy to use, almost making them too easy to use.
This removes burden from user, it removes friction. The user accomplishes something complicated without much effort, yet the results are precise, accurate and most importantly correct. This is what I consider art. OTOH, I make sure that all custom controls are available to the user if the user needs.
In all cases, developer and user gets joy from developing/using the application. It feels nice rather than a burden. It feels smooth, like an enjoyable road trip where you both enjoy the road and driving at the same time.
So there's a huge tradeoff between "finishing" and potential impact. I've heard of ZeroMQ. Until today I'd never heard of Libmill.
And that's okay! I'm just saying I don't think it's possible to have a project that both has a large set of users and covers a narrow enough set of functionality that it can be "finished" by a single person.
Witness what DeK did with the version numbers of TeX... Instead of counting upwards with the natural numbers, each successive version of TeX receives an added decimal digit appended on the end, which makes it approximate pi more closely. The implication is that the program is asymptotically approaching its final state, after which it will not change.
It's the final touch - it proves you can craft something and put it on display, ready for the world to see.
(Of course, there are always bigger technical challenges and new areas to explore. This doesn't apply to them.)
(I may or may not have written a blog post about it, although is was more about creative endevours https://aarontag.dev/2020/01/20/nothing-is-finished.html)
And if you have a clearly defined and (from the Unix Philosophy)narrow focus, you'll not transform your chair beyond the original purpose.the If something gets in the way of the narrow focus, you'll revert it. Really, this feels like it derives from do one thing.
I think the value of minimizing updates is in massive and adaptable systems with hundreds of iterating moving parts, not in small UNIX-like tools where the focus naturally restricts the updates.
4 years ago, https://news.ycombinator.com/item?id=15464702
6 years ago, https://news.ycombinator.com/item?id=9837915
In order to break out of that pattern I had to recognize that I had a problem and that this pattern existed in the first place. Nowadays, I usually stick to smaller project with a well-defined scope, avoid starting too many projects, etc.
That being said, as a hobbyist, you have no duty to finish anything. In my opinion, it's OK to reassess your priorities from time to time. If you started something, and it's really become too stressful, you're not really sure where it's going anymore, it's OK to put it on ice and move to something else for a while. It's one thing to keep pushing because you really believe you'll be creating something that adds value to the world, it's another thing to punish yourself because hey, you really have to finish this thing, otherwise you're a quitter.
If you're working on a startup, you definitely don't want to quit, particularly if other people depend on you, but if you already have a full-time coding job, you don't want to burn yourself out working on side-projects, which is unfortunately possible. So you also have to learn to respect and accept your limits IMO.
You're right that once you seriously commit to a project, you should generally follow it through. But then perhaps that's the problem: people aren't seriously committing to projects, just playing around with them endlessly in a strategic abyss.
In short, you learn by your mistakes.
This will help folks evaluating the project better assess how well it fits, and leaves behind a potential feature set for a new project (or fork).
In the long run, not communicating might be worse than a disappointing but clear answer.
> Imagine the carpenters were like programmers. You bought a chair.
There are volumes and volumes written about the definition of done. It's not so simple.
I can probably list 30, and point to the repos.
It's in my HN handle. I stand behind all my posts.
I've got links to a couple of dozen, in there (at least). Maybe over 30. I tend to toss one onto the pile, every now and then. I don't keep count. I don't fork other people's stuff. I'm the original author of all of it. I'm a bit...obsessive. My GH Activity Graph has been solid green, for a few years. I stay busy.
A couple of the projects are sort of "WIP," but you will note that they are also highly polished. A number of repos are legacy repos for shipping apps that have been retired.
I have been shipping software for my entire adult life, and finishing projects is my "at rest" state.
Right now, the other tab in my browser is a Confluence page, describing a project I'm developing (not open-source). It's a slog. I hate writing documentation.
But complete documentation is a big part of "finishing" software.
That project won't be done for months. I'm enhancing the documentation for an API that I wrote (the backend server), so the developer working on the dashboard can get his work done.
Closed-source games for Windows 98
It was absolutely perfect. Closed-source, no one comes and complains they cannot compile anymore when the compiler and the library headers change. Games are just done, and if there are bugs they do not really matter. And Windows 98 apps still run perfectly on Linux with WINE.