remix logo

Hacker Remix

Engineering "home-cooked" software

49 points by kookiburra 4 days ago | 27 comments

ebiester 10 hours ago

This feels like someone who hasn't been in the industry long enough to know what it is like to try and design software before implementing it with groups larger than 3, and yearns for problems that aren't as complex as the ones they are dealing with.

It is easy to build "home cooked" (by his definition) software when you are building for a small number of people by a small number of people. Old Visual Basic programs built for a single version of Linux will do just fine - and that will work well for some use cases. But if you are building software that has to work on thousands to millions of machines, and fulfill their needs, you will need to build a factory to build that software.

The factory, in this case, is the infrastructure necessary to turn the R&D (you and me) into the repeatable product (that is, your app.) The factories need a lot of maintenance. If nobody is buying your product, you need to change the factory to produce outputs that people are buying. If people have bought your product (let's say... on subscription) then you need to keep the factory maintained well enough to produce the product that people are happy to buy.

Some things will be like tarsnap and change relatively little. That's great. A small shop will need less maintenance. A bigger shop that is a factory for more users with wider needs will need more complicated products and that will mean more maintenance.

But yes, if you don't need to have a return on investment, you don't need to react to customers' needs and therefore you can build a spec first and let it change little. (Or, you build something as niche and as good as Tarsnap!)

smileysteve 13 hours ago

I couldn't disagree with the premise of the sections more on development methodology

> Fast Food > Here, we develop in "agile" sprints. Working software is developed at the fastest pace possible, and all bugs are to be fixed later.

> Home Cooked > Here, things are slower, more thoughtful. More waterfall-y.

While Sprints is a term that sounds like fastest pace possible, that is not what the term means; and a key part about waterfall vs agile is that waterfall IS NOT more thoughtful, but all planned up front.

Both methodologies can create bugs, or deliver features faster than scale can be thought of and deliver features faster than can be tested.

If we remove the quotes from "agile" we actually get slower and thoughtful. A key part of that is measuring (training, interviewing, analyzing). An agile process should build a feature, release that feature, interview users, analyze system behavior, iterate by improving user's goal, adding appropriate scale, iterating by removing unexpected errors or behavior.

VyseofArcadia 12 hours ago

> An agile process should build a feature, release that feature, interview users, analyze system behavior, iterate by improving user's goal, adding appropriate scale, iterating by removing unexpected errors or behavior.

I feel like there's this no true Scotsman thing going on with agile. Whenever someone describes their actual experiences with agile, there's always at least one person who speaks up and decries it as as not real agile and what agile should be.

At this point I don't care what agile should be. I just don't want management shoving agile down my throat anymore. I've yet to see it actually improve productivity for any team I've been on. Real agile must be exceedingly rare.

thraxil 11 hours ago

> I feel like there's this no true Scotsman thing going on with agile. Whenever someone describes their actual experiences with agile, there's always at least one person who speaks up and decries it as as not real agile and what agile should be.

It's not mysterious or confusing. The original definition is at https://agilemanifesto.org/

TeMPOraL 7 hours ago

That's like pointing to https://www.kingjamesbibleonline.org/ and claiming this is one true Christianity. There are some 45 000 distinct Christian denominations on the planet, each with different beliefs and practices, doing exactly that, and each claiming they're the ones getting it right.

jimbokun 12 hours ago

In your experience, what has improved productivity?

VyseofArcadia 11 hours ago

Weekly standup to check in with devs, leave them alone otherwise. Reach out if a high priority item comes up, but 9 times out of 10 that can be an email.

I've heard that one of the benefits of agile is identifying blockers and encouraging collaboration, but I saw much better results from assuming you've hired intelligent adults with work ethic and letting them reach out and collaborate as needed. Daily standups, sprints, boards, planning, etc. are great in a low-trust environment where you can't be sure people are doing the right things. But if you've hired self-directed people, that stuff just gets in the way.

ggregoryarms 9 hours ago

There's a balance. Not every team is made up of infallible devs, even at decent companies. Human nature is never full-trust.

I've known talented devs who are great people who still need more oversight than you describe. Usually they are ~5 years off from being full-trust, yet still valuable team members. Yes they benefit from daily standups.

VyseofArcadia 5 hours ago

I'd argue they'd probably benefit more from 1-1 mentorship, and as a bonus you don't have to force your entire team to adopt agile.

mschild 15 hours ago

In the same vein, I recommend reading this post by Robin Sloan https://www.robinsloan.com/notes/home-cooked-app/

airbreather 9 hours ago

80% done, with no code.

This is often how a functional safety project works - specification is everything, no point writing any code until you know exactly what you plan to build.

Due to traceability requirements it becomes a very waterfall approach.

However one way of improving methodology and outcomes is an executable specification that can be converted to code and documenting at the very last minute, meaning you can be specifying right up until you need to deploy.

Executable specification concept comes from IEC 61499.