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.

Ask HN: How to Create “Boring” Software?

15 pointsby sandwichbopover 3 years ago
I started reading <i>Learning Go</i> by Jon Bodner, and in the preface, it introduces the idea of &quot;boring code.&quot;<p>&gt; <i>When it comes to building things that last, being boring is great. No one wants to be the first person to drive their car over a bridge built with untested techniques that the engineer thought were cool. The modern world depends on software as much as it depends on bridges, perhaps more so. Yet many programming languages add features without thinking about their impact on the maintainability of the codebase. Go is intended for building programs that last, programs that are modified by dozens of developers over dozens of years.</i><p>I&#x27;m graduating soon and noticed on campus a sense of impatience. My peers are building projects with short lifespans to get into the industry, which works to get a job, but feels like starting a bad habit. &quot;Boring&quot; seems fundamental for long-lasting software.<p>How can I learn more about &quot;boring&quot; code? Perhaps even lessons from outside software, to create things that last?

8 comments

carlos_rpnover 3 years ago
I interpret it as not writing &quot;clever&quot; code, as in, code that uses obscure features or otherwise not obvious logic for no good reason, making it less readable. I wish I could give you some examples of what I mean, but I can&#x27;t think of anything right now.
评论 #28572290 未加载
评论 #28570333 未加载
bluGillover 3 years ago
Check for the error returns on everything. Spend time in a profiler, and optimize only the parts that matter. (boring code tends to run on limited systems so optimization is important!)
评论 #28575959 未加载
type0over 3 years ago
In my mind it is related to KISS and suckless philosophy <a href="https:&#x2F;&#x2F;suckless.org&#x2F;philosophy&#x2F;" rel="nofollow">https:&#x2F;&#x2F;suckless.org&#x2F;philosophy&#x2F;</a><p>Well also the long lasting bit, use the building blocks that are sound and principles that aren&#x27;t newfangled for your particular language of choice.
ironmagmaover 3 years ago
1. Pick vetted and proven technologies to build with.<p>2. Principle of least astonishment<p>3. Use colloquialisms in your code. Every pattern should be easy to find (or close to) examples of elsewhere.<p>4. Use a linter&#x2F;typechecker if not automatically provided.
mdp2021over 3 years ago
&#x27;Boring&#x27; here seems to mean &quot;reliable and easily understandable&quot;. You could search material about software testing, modularity programming, and in general best practices in coding.
mdp2021over 3 years ago
&gt; durable products<p>An example emerges in the discussion within a parallel thread, <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=28574624" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=28574624</a> , about extending the syscalls in Linux kernel. Unfortunately, some interpreted in the past &quot;unallocated&quot; with &quot;available&quot;, so now syscall numbers in some customizations of the kernel vs the official one have conflicting uses.
fiftyacornover 3 years ago
I think it&#x27;s a big thing at Google as it&#x27;s in the are book<p><a href="https:&#x2F;&#x2F;sre.google&#x2F;sre-book&#x2F;simplicity&#x2F;" rel="nofollow">https:&#x2F;&#x2F;sre.google&#x2F;sre-book&#x2F;simplicity&#x2F;</a><p>Your basically not adopting faddy ideas and keeping code simple
shooover 3 years ago
adding to mdp2021&#x27;s interpretation:<p>&gt; Boring here seems to mean &quot;reliable and easily understandable&quot;<p>Another way to think about this is to consider the context that the software is used in, from the perspectives of users, operators, managers. Users want the software to be reliable, support their current browser, help them do the task at hand, and not corrupt their messages &#x2F; lose their rent payment &#x2F; leak their credit card numbers. Operators want to get a good night&#x27;s sleep without getting paged because the site has fallen over again, and when things go wrong, want to be able to draw on an existing body of technical knowledge (documentation, bug reports, known workarounds) from the community about the known failure modes and shortcomings of the technologies that are being used. Managers want it to be relatively easy and cheap to hire new people to maintain the software when the original designers and developers of the system quit for better jobs &#x2F; retire &#x2F; are promoted away, want the system to be relatively cheap to operate, and want the system to be relatively flexible and modifiable so it can be bent to accommodate new requirements.<p>&gt; My peers are building projects with short lifespans to get into the industry, which works to get a job, but feels like starting a bad habit.<p>Your peers are pragmatic. When I interview people for software engineering roles, I am mainly looking for problem solving skills, some fluency with basic data structures, ability to translate idea for a solution into simple working algorithmic code. We also really want capable and experienced engineers who know how to build and operate real systems, but do not expect grads to have any such experience -- this can be learned over time on the job once someone is working in industry, especially when supervised by senior engineers. Ability with the basics &amp; potential to learn and become a lot more valuable gets you in the door as a junior.<p>A (the?) classic talk on the subject of boring technology is Dan McKinley&#x27;s <a href="http:&#x2F;&#x2F;boringtechnology.club&#x2F;" rel="nofollow">http:&#x2F;&#x2F;boringtechnology.club&#x2F;</a><p>Another interesting read is Nygard&#x27;s book &quot;Release It!&quot; about designing and building reliable systems, although it might be hard to understand the importance of some of these topics without first spending a few years in an organisation maintaining and operating systems and services that need to be available. <a href="https:&#x2F;&#x2F;pragprog.com&#x2F;titles&#x2F;mnee2&#x2F;release-it-second-edition&#x2F;" rel="nofollow">https:&#x2F;&#x2F;pragprog.com&#x2F;titles&#x2F;mnee2&#x2F;release-it-second-edition&#x2F;</a><p>In terms of getting better at this without working in industry, perhaps one way could be to identify an existing open project that is relatively old and regarded as being well-engineered, stable and boring, and try to figure out how you can contribute to it.<p>Another way to build intuition about the importance of boring software is to gain experience maintaining and operating systems. E.g. set up your own services that run 24&#x2F;7 providing value to yourself and others, then figure out what it takes to keep those services running enough of the time. Do this for enough years, every now again again some surprising failure mode will occur, and you may gain wisdom while trying to fix it or prevent it from ever reoccurring. I&#x27;ve personally written many useless short-term toy software projects to explore different ideas, but the hobby project that provided the best lessons in terms of building reliable software is a project that is actually continually useful to me (as a user, not as a hobbyist) so I am willing to invest ongoing time and energy operating and maintaining the software (web application hosted at home) -- over the years you need to deal with: operating system upgrades, database version upgrades, schema changes, external API changes, rare failure modes in your application code, hardware failures.<p>It&#x27;s also quite likely that different industries &amp; different contexts value different kinds of boringness. E.g. large organisations running web services that need to be available (popular websites, ecommerce, banking) might value technologies that increase service availability, make it cheaper to hire and train engineers to maintain, and that can be deployed onto commodity hardware. Other organisations that ship software to embedded devices that are not connected to the internet and need to run in real time might value quite different dimensions of &quot;boringness&quot;.
评论 #28580974 未加载