Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I wonder how the author thinks about this now, 8 years later.

Way back in 2016/2017 I saw this video on prototyping where the programmer whipped up a snake clone in around 4 minutes. I deliberately practised programming in this way: how fast can I go from idea to working prototype? Code style, organization, testing, best practices be damned: you have about how long it takes to run a load of laundry, how much can you get done?

I did this for a few months. I focused on games. I roughly tracked how much time it took to get from empty file to the first interaction with the game. I tried to focus my practice on getting to that first interaction. And the overall time I spent and how far I got with the idea.

The thing with going that fast is... the code sucks. You're not writing it for an audience, for your future self, to make it possible to extend and compose; when you want to go fast and prototype in this way you're deliberately not going to use this code for anything later on. You just want to get the idea out there to see, "is this even fun? Would it even work at all?"

... before you go ahead and spend the next 6 - 12 months spending your limited time on something. Because finding out your game isn't actually fun after all of that effort is demotivating.

In this sense speed is useful. It's useful in certain contexts when doing programming on the job. Especially at startups where the runway is limited and you don't know if you even have customers yet.

However!

Be prepared to throw it out. Once you find some traction for a feature or process; throw out the prototype/MVP code. Make sure it's cheap to do that: you can write software that is loosely coupled, you can write a better API that uses the MVP code underneath, write good tests against the new interface, remove the old code paths piece by piece, etc. If it's a core part of the product and there are customers for it get rid of that prototype/MVP code some how (it's easier to plan for this and not get too attached to the first iteration if you do it intentionally).



Hmm I had a similar experience but with different results. I took fairly hard but common problems that I had to do and started timing myself.

First time it would be like 2 hours, then I'd get it down to 1.25 hours. Then 45 mins. Then finally I got it down to 18 minutes and couldn't get it any faster. I learned so many tricks and it really burned into my brain all the different faster ways of doing things.

I noticed at work I got way, way faster. I ended up outperforming my entire team, by myself. I think mostly because A) I now had a habit of working fast B) I viewed it as a competition, so no water cooler talking C) I didn't have to think about how to do it, I just knew, and I knew how to do it quickly.

It literally took me from making 75k to 400k in 2 years. I just applied that to everything I could, so when doing interviews I was able to just flood the interviewer with the depth of my knowledge and how fast I worked.

Now I really put in a tremendous effort into this, not just a few hours, it was an obsession for me. But once I did it I got those skills for life. Even now that I'm rusty I still go really fast.

Also, my code quality itself is quite good, because I'll write it as fast as I can (frequently only takes 15 mins), then refactor like crazy (5 to 10 mins) and still be an hour faster than everyone else.


Could you elaborate? What kinds of problems are solvable within say 2 hours?


Build a basic site with 4 pages and controllers, implement a database for each and a form for each ith validation, etc.

Something like that.

Or write 5 different algo implementations.

Just whatever domain you work in or need to get better at you just work on and get faster until it's automatic.


Fair enough. Deliberate practice helps a lot, especially as you find new patterns.

I seem to have landed on doing the same thing, just scraping something completely and using the lessons learned to build something better.


Agreed - There's a certain thing about greenfield development in particular(which is quite fully the realm of startup coding) where you have to approach the first, second, maybe third iteration as one that will be thrown away, so when it does get thrown away, you make it easy to do so. And that leads towards some pretty dumb code, often "copy-paste-modify, sort it out later" code.

A lot of "best practice" ideas that get made into blogposts impose a structure that hinders disposability in favor of a certain aesthetic goal: to do the thing with less repetition and slightly cleaner abstractions. The goal is often not unreasonable, but it conflicts with the action of rapid iteration.

So I tend to write now with an eye towards trying to keep the code disposable until I face a certain class of error to eliminate, that needs the more abstract method. Often part of the disposability is in not actually solving the entire problem, but cheating and returning a wrong answer, e.g:

Instead of fancyAlgorithm() being written in a way that creates any dependencies I write a skeleton "function fancyAlgorithm() {return true;}" and then later upgrade it to a lookup table, and then to the algorithm. Because most of the code that matters to the app won't be in the algorithm, but in how all the other data is being passed around. The sooner I can get that piece to return a wrong answer with known error, the sooner I can arrive at a complete but wrong app, which can be corrected into a higher quality one. When not all the pieces of the app are there, it's not clear what error you need to be solving for, which leads to squeezing effort onto code that isn't important.




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: