Whatever works
sahillavingia.com
sahillavingia.com
Ward Cunningham (http://c2.com/doc/oopsla92.html)
See also, Technical Debt (http://en.wikipedia.org/wiki/Technical_debt).
He and Jeff were talking about twitter's downtime and Joel said something along the lines of "and look at how all those other startups destroyed twitter by having more up time."
The point being is that twitter just went ahead and shipped. They were able to fix their software issues after they found out what their product actually was.
Maybe, but I don't think that has anything to do with the point that people could have easily migrated to other clones but stayed with twitter as it was the best platform, performance woes aside.
When you ship a product users build expectations about it. They use in different ways that the ones you might have expected. If during further development you understand that a feature is not desirable anymore (e.g for technical problems with some other super awesome feature) pulling support may backfire.
This was evident in each Facebook redesign, or in the new version of Final Cut Pro.
Therefore, I think that there is definitely a sweet spot and that this spot isn't "ship it as soon as it works".
"Jugaad": http://blogs.hbr.org/cs/2010/01/jugaad_a_new_growth_formula_...
but in my experience, the technical debt will be a big problem later on, if not a total deal breaker. This is a problem found a lot in html integration, and jQuery new comer that push one millions of events in the dom.ready
Unmaintainable mess = hours and hours of lost work
I find that the easiest and cleanest solution is generally the better, I always try to not over engineer my code.
This mentality is fine if you don't want to (or have to) maintain and support anything—and from looking around the author's site, it appears he makes dozens of small things and then leaves them to rot.
Things change fast in software. It's one thing if you're building the backend system behind a billion dollar bank. Obviously that's not what the author is talking about.
If you're trying to make the next Angry Birds, or Facebook, or Google, you need to get something out there now, the MVP, and iterate.
You need to Get It Done. Especially if you're dealing with consumer software, you need to get something infront of the customer, because in 6 months everything may have changed!
If you have the luxury of working on corporate software where you have loose deadlines, open budget, and no competition, well go ahead and comment all your code and research all your best practices. It might even be worthwhile, because there's a much better chance that code will still be around in 8 years. If you're a startup, forget it, your product will likely be defunct in 6 months.
You can't always predict if new features will be wanted. So unless you want to have to wait on a rewrite for each new feature you will need a rewrite.
Rewriting all your code because you might need to extend it is a bigger waste of your time than spending that 20% longer to make all your code extendible.
If you don't want to rewrite for the new feature then you contribute to the spaghetti.
Due to your bad code it'll take increasingly long to add features and you will eventually spend longer implementing the whole system (with extra features) than implementing a nice version first.
http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.htm...
Sure they will, when your app starts to crash, or become unreasonably slow due to something hacked together without a second thought as to how well it would work.
The rewritten version doesn't prove anything about the initial hack.
It's not about the code, it's about economics in the broad sense -- understanding opportunity cost, understanding what "benefit" looks like, understanding your team, and making informed trade-offs.
No one thinks duct-tape code is "good" as an art form, but it might be the right decision for a given point in time.