Hacker Read top | best | new | newcomments | leaders | about | bookmarklet login

You say "It adds nothing to my description to call my projects incomplete", but "incomplete" isn't really what's at stake. I agree with you that software is basically never complete. But some software is "production-ready" in some sense that I consider meaningful. And I think that

> Sortix is a small self-hosting Unix-like operating system developed since 2011 aiming to be a clean and modern POSIX implementation.

makes it clear (or at least strongly hints) that Sortix is not production-ready, while

> Sortix is a clean and modern POSIX implementation.

pretends that Sortix is production-ready, and I consider that to be disrespectful.



sort by: page size:

"... software is not considered complete when it's first released."

The author was probably meaning "finished" instead of "complete", which gives a different meaning more in line with the article.


> I know of almost no software that's ever finished.

I know of quite a lot of software that is "finished" as far as I'm concerned. Developers tend not to think it is, though.


Do you believe that a software can be complete at all?

There's no such thing as finished software.

Software always is and always will be unfinished.

"Finished software" is a myth.

From the blog post: "Except for some basic UNIX tools, like grep or make, it's almost impossible to find anything that's truly finished, not simply abandoned."

Now, granted, must of us on anything Unix-like is on a BSD or Linux, not on a UNIX, but grep and make are still being patched, here and there. Even 'ls' gets commits. We could get into a pedantic discussion on when something can be classified "finished," but that doesn't seem fruitful. I think we just need to realize that despite following the Unix philosophy (or something similar), which is mainly about modularity and composability, not a single part (modular piece, service, etc.) of modern systems can be left unmaintained, it can never be in a "truly finished state."


My pet peeve with this question is that sometimes it’s completely fair to call a piece of software "finished".

Who's to say that the projects are incomplete if you have achieved what you wanted from them? Sounds very much complete to me, even though the final result might not be useful to anyone else.

agreed. your software isn’t finished when it passes final qa. it isn’t finished when you deploy it to production. it isn’t finished when it has no known bugs. it’s only finished when your last user is dead.

> assuming the software is functionally done, finished and no longer maintained

This ties in very well with a discussion that happened a couple days ago about whether the concept of "finished software" even exists:

https://news.ycombinator.com/item?id=36877363


> And not being complete means not being finished - since being complete is pre-requisite for being finished. And doesn't that mean, that a piece of software which does NOT get new features, can't stay "finished" when things change and new requirements emerge? Doesn't a piece of software have to get new features so it can stay (close to) finished - and doesn't revert back to being incomplete?

That's a really interesting question. I guess some of it comes down to whose perspective we're looking at the software from. I'd tend to look at it from the author/mountaineer's point of view: If Bram Moolenaar had declared that Vim was complete with version 7 and would never add major features like async/JSON support, I'd probably say that the program was "finished", even if it lacked certain features that I'd like it to have. (Those missing features might cause me to use a different piece of software, but I don't think they'd give me cause to complain that the hypothetical Vim was "incomplete")

(And, indeed, there was a period ~5 years ago where it looked like Moolenaar might go that route, especially with respect to async support. My understanding is that his initial unwillingness to add async support/other new features was a big part of the impetus for Neovim.)

> The only way a piece of software could ever stay "finished" without getting new features is, if it was used for something that no longer sees any change happen or any new requirements emerge - it basically has to be a completely non-evolving field of work with static, unchanging requirements.

I'm not sure that the entire _field_ needs to be static. For example, Quake strikes me as a finished piece of software – that doesn't mean that video games (or even first person shooters) aren't evolving. It just means that Quake carved out a narrow section of that field and finished delivering on its design goals within that narrow slice.


And even when you think it's "finished", is that really true? I'm pretty sure no software is ever 100% finished / to spec, esp when the spec is ambiguous like most specs are.

As someone who has shipped some of the biggest products at one of the biggest companies, I don’t think software is “finished” in a manner we ascribe to most products.

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”.


I would not call a working and usable piece of software "abandoned".

We should call it "completed".


Correct. Not an actual complete project, but the boilerplate required to begin implementing & delivering features.

Totally! I referenced that near the end:

> Sometimes finishing is just the beginning: You release the library, the package, the SaaS product, and your work is really just beginning. Users have issues, customers have feedback, and dependencies need upgrading. In some sense, there is no finished software; there is only released software.


> it's almost impossible to find anyting that's truly finished, not simply abandoned.

This goes far beyond programming. "completeness" is nice but is highly subjective. For work that can be infinitely revised, refactored, recut, "finished" is an idea you impose from the outside, in relation to specific criteria.

The author seems to be saying that there is value in creating smaller, independent modules of things that can be said to be "finished" when they do their thing and no further functionality is added or expected to be added. Further functionality, if needed, would come from connecting "finished" things together, I suppose, or making new things- not over extending a component to handle all cases.

This moves the complexity around a bit and maybe it's more efficient and easier to handle this way.

Artists have a similar problem. It's hard to know when a poem or a song is "functionally complete" but eventually you have to let them go or you never get anything out there.

I'm all for conscientiously abandoning work, especially if the state of the work is well documented so that somebody else could, in theory, pick it up.


Many great software projects are never finished. All un-great project remain unfinished.
next

Legal | privacy