News for hackers. Stuff that matters.
Re:Minimal Viable Programs (2014) by branweb on Sunday November 03, 2019 @12:06PM (#21435084)
This is a useful concept. I also thought these lines were insightful:

New features mean new sales opportunities, good for the company but not good for the user.

The problem with adding features to MVP is that when we ship more complex products like complete operating systems that are packed with programs, the complexity of the individual programs contributes to the complexity of the whole.

Not sure how to solve that particular problem though.

This made me think of a blogpost linked on Hacker News when Joe passed away: https://github.com/lukego/blog/issues/32. This part seems relevant here:

Joe wrote amazingly simple programs and he did so in a peculiar way. First he wrote down the program any old way just to get it out of his head. Then once it worked he would then immediately create a new directory program2 and write it again. He would repeat this process five or six times (program5, program6, ...) and each time he would understand the problem a little better and sense which parts of the program were essential enough to re-type. He thought this was the most natural thing in the world: of course you throw away the first few implementations, you didn't understand the problem when you wrote those!

Re:Minimal Viable Programs (2014) by nemaar on Sunday November 03, 2019 @12:28PM (#21435211)
I really believe this is the only way you can write good software. It's mind blowing to me that most people try to "figure out" the problems before seeing what it actually is. I always feel strange when someone is writing a "study" by reading the documentation of some API or even worse, by reading someone's feature request. The writer of a feature request usually knows even less about the whole thing and really did not think things through. We need tools and programming languages where you can create really dirty but working solutions and make it iteratively better. You need to find all the edge cases and pitfalls and for that you need to fail. Of course you need to fail fast, this method does not work if the iteration is slow and the thing is in production when you find out that it barely works.
Re:Minimal Viable Programs (2014) by mike_hock on Sunday November 03, 2019 @06:53PM (#21437650)
Where do I go to get paid to actually put in the TIME and effort required to produce something elegant and high quality?
Re:Minimal Viable Programs (2014) by nothrabannosir on Sunday November 03, 2019 @08:25PM (#21438172)
As a contractor working on project basis, who can leverage this technique to produce code of such high quality that a commensurate price can be commanded.

You’d need to find a niche that values this level of quality, but if that exists, and if the theory is true, then there’s your gold.

Re:Minimal Viable Programs (2014) by splittingTimes on Monday November 04, 2019 @04:21AM (#21440040)
Love to see that magical place.

I come to think that the whole concept of MVP/prototype became a bane to software development when the management/business side got aware of its existence. Architecture and design sessions can be skipped because we just build a prototype.

I have yet to see a prototype that did not end in production. It's "good enough software", let's move to the next feature.

When you are really lucky you can revisit your prototype a year or two later and try to improve it's design now that you got some data on its actual usage, but you have to figure out again, what the heck you actually did...

Re:Minimal Viable Programs (2014) by oftenwrong on Sunday November 03, 2019 @01:11PM (#21435506)
"Plan to Throw One Away" is a classic bit of Fred Brooks advice.

https://course.ccs.neu.edu/cs5500f14/Notes/Prototyping1/plan...

Re:Minimal Viable Programs (2014) by klyrs on Sunday November 03, 2019 @12:18PM (#21435144)
Neat. That's essentially how I program, too. Early history in some of my git repos has the pattern

  git add program
  ...
  ... #first implementation works; time to rewrite
  git add newprogram
  ...
  ... #second implementation works; bury the first
  git rm program; git mv newprogram program
  ...
This keeps my directory relatively clean, as I only have my previous attempt and the current refactor around at any given time. It also keeps the git history clean for the living files, and keeps the diffs nice and tidy.
Re:Minimal Viable Programs (2014) by newnewpdro on Sunday November 03, 2019 @02:06PM (#21435857)
Except that way there's basically zero semantic continuity between the commits of the old program and rewrite.

It's preferable to work in branches and rewrite and refactor incrementally whenever possible, merging the new code in as things progress at convenient milestones.

Then the history documents which functionalities in the old implementation became what files and lines in the new implementation.

That information can be very helpful when the rewrite breaks previously working functionality and customers are upset, especially if the rewrite authors aren't even around anymore.

Re:Minimal Viable Programs (2014) by klyrs on Sunday November 03, 2019 @02:27PM (#21435986)
> Except that way there's basically zero semantic continuity between the commits of the old program and rewrite.

That's the goal of this practice. Throw it all out and rewrite from scratch.

> That information can be very helpful when the rewrite breaks previously working functionality and customers are upset, especially if the rewrite authors aren't even around anymore.

I'm talking about writing non-releases. The entire structure of the code, algorithms, data structures, API / CLI must not be preserved. Anything that stays constant between non-releases is either (a) a good idea or (b) a stone unturned. Rename variables, split and join modules, violently reorder function arguments... nothing is off-limits. After I've been through a few rounds of this, the first release should be entirely free of inessential warts (and maintenance is typically quite easy at this stage).

After the first release, I'm a stickler about backwards-compatibility and my development pattern is closer to what you're suggesting.

Among folks who know me, I've got a reputation for writing clean, optimized code. It isn't because I'm good at writing clean code; it's because I'm good at throwing away ugly code and I'm very reluctant to share code that doesn't meet the bar.

Re:Minimal Viable Programs (2014) by newnewpdro on Sunday November 03, 2019 @04:09PM (#21436614)
Sure, that's perfectly fine if it's for what amounts to entirely private development iterating on something nobody has ever seen.

In my experience my MVPs often end up in production and that utopia of iterating in isolation is fairly short-lived.

Re:Minimal Viable Programs (2014) by ryanbrunner on Monday November 04, 2019 @07:59AM (#21441185)
That's true, but it's also something you have some degree of influence and control over. Don't allow prototypes or first awkward stabs to get into the hands of users without them being explicitly told this is a preview and their data will be destroyed.
Re:Minimal Viable Programs (2014) by Pamar on Sunday November 03, 2019 @03:02PM (#21436198)
Sorry to sound cynical but... have you ever been introduced to the concept of "deadline"?
Re:Minimal Viable Programs (2014) by jodrellblank on Sunday November 03, 2019 @03:37PM (#21436412)
I really want a way to filter out comments which boil down to a snarky “SOME people can’t do this”.

Yes yes, have points, well done, but it’s a boring low effort class of comments that applies to nigh every single idea ever, and skips the interesting or important bits - in this case whether it produces better software or helps understand things - in favour of a cheap vote grab. “It’s not universally applicable” - no, nothing is.

and you don’t sound cynical you sound like you’re trying to dismiss and status grab, like someone talking about the “out here in the real world”.

Re:Minimal Viable Programs (2014) by Pamar on Sunday November 03, 2019 @04:02PM (#21436568)
I know it sounds snarky, and I am sorry (I even tried to apologize preventively, but I was in a hurry and this probably was taken as extra sarcasm on my part).

Still, my point stands: I am not sure if this is really a matter of “SOME people can’t do this”, I suspect it is the other way around: “SOME people can do this... because they are working on free software, on their own personal project, on programs or systems that do not have any TTM aspect”.

And it is not just a matter of "deadlines" either: if your code is part of some bigger system you may not have the chance to reimplement things from scratch not because you don't have time, but because you could impact someone else using your library/module/API.

In other words, this approach is eminently laudable, but in my experience does not scale in most cases.

Re:Minimal Viable Programs (2014) by TeMPOraL on Sunday November 03, 2019 @04:41PM (#21436825)
It does work somewhat under light pressure. Under high deadline pressure it obviously can't, but I'd argue that if a company is slave-driving programmers, code is going to be garbage and development will start slowing down due to accumulated technical debt.

> if your code is part of some bigger system you may not have the chance to reimplement things from scratch not because you don't have time, but because you could impact someone else using your library/module/API.

In this case, if your code is used by someone else, you can't do that. The trick is not releasing your code "out there" until after you've done several rewriting passes on it. In the cases I've done that in professional context, I worked on a feature branch. I would occasionally rebase it on top of master, to stay current with rest of the product, but nobody ever looked at my feature branch until I've done a few rounds on the code, declared it's ready for integration, and issued a merge request.

Re:Minimal Viable Programs (2014) by Pamar on Monday November 04, 2019 @06:32AM (#21440661)
I got 3 downvotes to my original (terse) post and 3 upvotes to the more articulate answer to you.

I suppose this should teach me to wait until I have time enough to write a proper post, next time.

Re:Minimal Viable Programs (2014) by klyrs on Sunday November 03, 2019 @04:22PM (#21436703)
Hahaha, nice one. Cynical answer: I wish we could ask Ken that.

My situation isn't typical. To put it in common parlance, this is how I nucleate my 20% projects, and personal projects. Which, once released, almost never require significant maintenance because of the care and attention spent upfront.

I'm more than capable of whipping out a prototype that will do the job and incur technical debt. And I'm upfront about tradeoffs in planning, and meticulous about the rare deadline I get saddled with.

Re:Minimal Viable Programs (2014) by dragonwriter on Sunday November 03, 2019 @01:07PM (#21435473)
> Not sure how to solve that particular problem though.

I think it is less a problem to be solved than a fundamental trade-off that comes with the scale of systems: the more components a system is going to have, the greater the cost of not minimizing complexity of individual components.

Re:Minimal Viable Programs (2014) by olskool on Sunday November 03, 2019 @11:37PM (#21439084)
Knuth once wrote that you should plan to throw away the first version of any program because you will anyway.
Re:Minimal Viable Programs (2014) by papln on Monday November 04, 2019 @11:39AM (#21443305)
That was Fred Brooks in The Mythical Man-Month