TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Do the simplest thing that can possibly work (2004)

226 pointsby TacoSteemersabout 2 years ago

21 comments

addaonabout 2 years ago
This write-up is too light to provide any real insight. In particular, how do you assess simplicity?<p>From an example I&#x27;m currently working through on a hobby project... do I use a RS-485 transceiver with a custom line code, or do I use a 10base-T1 PHY? Ethernet, especially one pair ethernet, is undoubtedly more &#x2F;complex&#x2F;, with echo cancellation, a complicated line code, etc; but if I use the PHY, then &#x2F;I own&#x2F; that complexity.<p>(For pure software folks, the equivalent question is internal implementation vs external dependencies. Do you implement a 1D barcode yourself, or do you import a third-party dependency for QR code reading?)<p>The problem is that answering this depends not on some objective notion of simplicity, but on a realistic assessment of &#x2F;where time will go&#x2F; during the development process. If development time dominates, then exporting complexity is a win. But if testing time dominates, and since exported complexity still needs to be fully understood during testing, then in-house simplicity wins.<p>And which of these cases dominates is very much a project-by-project and team-by-team decision.
评论 #34972258 未加载
评论 #34971970 未加载
评论 #34973703 未加载
评论 #34975827 未加载
评论 #34975607 未加载
评论 #35044092 未加载
评论 #34979621 未加载
评论 #34977570 未加载
评论 #34971168 未加载
评论 #34973947 未加载
评论 #34981124 未加载
评论 #34976937 未加载
评论 #34971797 未加载
评论 #34972683 未加载
loudmaxabout 2 years ago
Rich Hickey&#x27;s Simple Made Easy presentation is a fantastic introduction to this philosophy: <a href="https:&#x2F;&#x2F;www.infoq.com&#x2F;presentations&#x2F;Simple-Made-Easy&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.infoq.com&#x2F;presentations&#x2F;Simple-Made-Easy&#x2F;</a><p>Simple isn&#x27;t the same as easy, and it isn&#x27;t always obvious where the complexity is. One should beware of &quot;simple&quot; solutions that either hide the complexity, or shove it someplace else. The skill is to identify and minimize <i>unnecessary</i> complexity, which is another way of phrasing &quot;Do The Simplest Thing That Can Possibly Work&quot;.
评论 #34972098 未加载
评论 #34972399 未加载
Xeoncrossabout 2 years ago
I wish I could convince product teams that the MVP is often just a single feature. Like a search bar + results page.<p>Something we can ship very fast, then we can add the banners, tracking for marketing, account creation, user ratings, community forums, results commenting and sharing, image carousels and a mobile app with push notifications that the results changed. You know, the regular MVP stuff.<p>So many people think agile means waterfall using sprints.
评论 #34973687 未加载
blippageabout 2 years ago
MVP: Minimal Viable Product.<p>The greatest example of this is Unix.<p>Multics was a huge produce that failed (initially). Bell Labs washed their hands of it, and didn&#x27;t want anything to do with Operating Systems again.<p>Ken Thompson wrote an initial scrappy version of Unix in 3 weeks. Re-writing to C was a tremendous move because it meant that Unix could be ported easily to many other systems.<p>I heard someone say that the genius of Dennis Ritchie was that he knew how to get 90% of the solution using only 10% of the work.<p>I&#x27;m working my way through Unix Haters Handbook [1], and it&#x27;s a good read, even for someone like myself who really likes Unix.<p>Unix and C are the ultimate computer viruses -- Lawrence Krubner<p>[1] <a href="https:&#x2F;&#x2F;web.mit.edu&#x2F;~simsong&#x2F;www&#x2F;ugh.pdf" rel="nofollow">https:&#x2F;&#x2F;web.mit.edu&#x2F;~simsong&#x2F;www&#x2F;ugh.pdf</a>
评论 #34973739 未加载
photochemsynabout 2 years ago
As a relatively newbie software developer, I&#x27;m going to ignore this advice and just try to cobble together something that works and I&#x27;m deliberately not going to worry about whether or not there is a simpler, cleaner solution to the problem. The rationale is, if I keep searching for the simpler cleaner solution I&#x27;ll keep falling down rabbit holes and never get to the point of having a solution to the problem at hand. After the fact, if someone comes along and says, &#x27;hey, here&#x27;s a simpler solution&#x27; that&#x27;s great, but if I don&#x27;t at least have a working project, nobody will even bother to deliver that helpful input.
评论 #34979057 未加载
评论 #34977938 未加载
deathanatosabout 2 years ago
Then launch that MVP into production, and never be given an ounce of time by your PM to fix any of the shortcomings that you thought were not part of &quot;Do the Simplest Thing&quot;. Iterate on that principle for new features, too: what&#x27;s the simplest way to get this new feature out? And this one?<p>And then find yourself surrounded by tech debt an a system that was cobbled together, not designed.
评论 #34973738 未加载
评论 #34973655 未加载
gopisuvanamabout 2 years ago
Old but relevant article. Figuring out the intersection of &quot;simplest&quot; and &quot;useful&quot; features is the trick.
LAC-Techabout 2 years ago
I agree, but I&#x27;d add in the caveat of &quot;... in the context of a fleshed out bigger picture for what you&#x27;re trying to solve&quot;.<p>A lot of software lacks a clear plan. A big patchwork of local maxima commits that won&#x27;t get you where you need to go.<p>So I say go ahead and draw some pretty pictures. What&#x27;s the overall vision here?
vinkelhakeabout 2 years ago
If this is applied to programming, then just be aware that &quot;doing the simplest thing that can possibly work&quot; integrated over time typically won&#x27;t result in anything good. For any given task, the simplest thing that can possibly work will often have other effects that are hard to quantify on the spot (like increased tech debt).<p>If you&#x27;re working on things that are <i>intended</i> to be short lived, then just do whatever is needed to get the job done and move on. If you&#x27;re working with something where you know there&#x27;s a good chance it&#x27;ll be around for some time, then every once in a while, someone will have to take on the role of saying &quot;no, we&#x27;re not gonna do the simplest possible thing right now&quot;.
评论 #34972486 未加载
评论 #34973694 未加载
评论 #34973679 未加载
quickthrower2about 2 years ago
Don’t draw diagrams? Seems like not using a very valuable tool. Diagrams help you think and thinking can save you time in building the wrong thing or the wrong way. The diagram shouldn’t take ages and pencil&#x2F;paper is fine.
harpiaharpyjaabout 2 years ago
The sentiment is nice but ceases to be useful when people have trouble distinguishing what could possibly work from what appears to work for a bit and then breaks down horribly.<p>And it&#x27;s not really about the fallibility of people. Often in engineering you can be designing in a space with a lot of unknowns, that simply can&#x27;t be resolved without building out a bit to explore the space more. In such case some level of future proofing is warranted.<p>I&#x27;m kind of suspicious of adages like these that assume perfect information.
评论 #34971871 未加载
评论 #34973011 未加载
评论 #34974805 未加载
IshKebababout 2 years ago
This is effectively meaningless (and the article even recognises that) because it delegates all meaning to the definition of &quot;works&quot;.<p>Even &quot;passes all the tests&quot; isn&#x27;t a great definition. What are you testing?<p>For example think about build systems. &quot;Works&quot; could be &quot;builds everything correctly&quot; in which case the simplest thing is just a shell script with all the commands written out.<p>That&#x27;s obviously terrible, so then &quot;works&quot; becomes &quot;doesn&#x27;t unnecessarily repeat work&quot; and you end up with Make.<p>But then Make doesn&#x27;t scale to large monorepos with CI so then &quot;works&quot; becomes &quot;and doesn&#x27;t allow undeclared dependencies&quot; and you come up with Bazel.<p>So the same meaningless advice can justify wildly different solutions.<p>I think better advice is just &quot;try to keep things simple where possible&quot;. It&#x27;s vague because it requires experience and design skill.
readthenotes1about 2 years ago
I far prefer the original question &quot;What is the simplest thing that could possibly work?&quot;<p>It is far more active than the imperative version.<p>One might say the interrogative is the simplest thing that could possibly work...
irrationalabout 2 years ago
I&#x27;ve learned that when I ignore things, they often go away. That is the kind of simplicity that has served me well for decades as a developer.
bob1029about 2 years ago
I feel like this advice works really well in some places and really poorly in others.<p>I think those using safe languages and broad frameworks have a much greater ability to execute on &quot;keep it simple&quot; than those who use something like C and build 100% of their code in-house.
mynameishereabout 2 years ago
Yes, the old days<p><a href="https:&#x2F;&#x2F;c2.com&#x2F;xp&#x2F;DoTheSimplestThingThatCouldPossiblyWork.html" rel="nofollow">https:&#x2F;&#x2F;c2.com&#x2F;xp&#x2F;DoTheSimplestThingThatCouldPossiblyWork.ht...</a><p>&quot;XP&quot; almost, but not quite, became a real cult.
TacoSteemersabout 2 years ago
I think we can&#x27;t avoid all difficulty, and the difficulty then becomes determining exactly which bits we do need.<p>But it is a nice counter to some people&#x27;s decisions to go for overly complex or risky (unproven?) technologies or designs.
buescherabout 2 years ago
What I frequently see is &quot;the simplest thing that could plausibly work&quot;
tpoacherabout 2 years ago
In practice, in most situations, the simplest thing would be to cheat.<p>So, grain of salt, and all that.
yargabout 2 years ago
Sometimes.<p>Othertimes do simplest thing that will most simplify similar tasks in the future.
joebuffalopeabout 2 years ago
The acronym should be simpler. KISS<p>Keep It Simple Stupid