Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    D

    David R. MacIver

    drmaciver.com · Personal blog · on HN since 2008

    David R. MacIver, a programmer and Hypothesis author, writes about software practice, testing, reading mathematics, and problem solving.

    Visit blogRSSHN submissions
    ProgrammingWriting & Thinking
    What HN says

    HN links it for essays on software and open source practice. Commenters mostly point to it as the author's own page or for follow-up posts, with little opinion given.

    Stats for nerds
    94HN people shared it
    140linked in comments
    5.1Kstory points
    Dec 2025last shared
    2011people per year2025

    Top posts on HN

    1. 1
      How to do hard things
      1 person · 1.2K points · first shared 2019 · 116 comments on HN
    2. 2
      It’s OK for your open source library to be a bit shitty (2015)
      4 people · 673 points · first shared 2015 · 345 comments on HN
    3. 3
      People don't work as much as they say
      1 person · 492 points · first shared 2022 · 305 comments on HN
    4. 4
      The social obligation to be bad at things
      1 person · 297 points · first shared 2020 · 236 comments on HN
    5. 5
      Using a list to manage executive function
      3 people · 264 points · first shared 2024 · 61 comments on HN
    6. 6
      How to read a mathematics textbook (2016)
      4 people · 246 points · first shared 2016 · 37 comments on HN
    7. 7
      Some things that might help you make better software (2016)
      3 people · 175 points · first shared 2016 · 41 comments on HN
    8. 8
      A “perfect” voting system
      1 person · 158 points · first shared 2011 · 146 comments on HN
    9. 9
      A parable about problem solving in software development (2013)
      2 people · 119 points · first shared 2013 · 29 comments on HN
    10. 10
      The economics of software correctness
      1 person · 113 points · first shared 2015 · 53 comments on HN

    What HN people wrote when they linked it

    • LeifCarrotsonJun 2022

      For me, it depends on the type of problem I'm trying to solve. Specifically, I ask is it hard work or a difficult problem? (see also [1], [2], and HN commentary at [3] from a short time ago).

      Hard work is something that a big corp can solve by throwing bodies at the problem. A proprietary data format or protocol but with an available, thorough specification (eg. a giant PDF from an international standard, an industrial protocol, and associated XML schema with a bunch of separate devices to talk to by just reading through thousands of pages of PDFs...). Another example of hard work is handling a high volume of support requests, just communicating to individual users might involve more hours in a single day than are available to a single user, and it might require supporting 3 shifts or 7 days a week, which a solo dev just can't do. These are tasks that a solo dev is likely to burn out on and which I would not entrust them with.

      On the other hand, a difficult problem is something that can be solved by a single contributor, but which often cannot be solved by throwing bodies at it. The output may be something as tiny as a few hundred lines of code that realize a single critical insight. That insight might synthesize a lot of complicated and inaccessible concepts available only to someone who is an expert in multiple fields and who has experience gained over many consecutive years of work in a single field. A company that can put 20 people with 1 year experience and 4 year…

    • based2Dec 2025

      https://en.wikipedia.org/wiki/Delphi_method > https://news.ycombinator.com/item?id=26368011

      https://blog.pragmaticengineer.com/yes-you-should-estimate/ > https://news.ycombinator.com/item?id=27006853

      https://josephmate.github.io/PowersOf2/ Complexity Estimator

      https://earthly.dev/blog/thought-leaders/ > https://news.ycombinator.com/item?id=27467999

      https://jacobian.org/2021/may/20/estimation/ > https://news.ycombinator.com/item?id=27687265

      https://tomrussell.co.uk/writing/2021/07/19/estimating-large-scale-software-projects.html > https://news.ycombinator.com/item?id=27906886

      https://www.scalablepath.com/blog/software-project-estimation/

      https://estinator.dk/ > https://news.ycombinator.com/item?id=28104934

      https://news.ycombinator.com/item?id=28662856 How do you do estimates in 2021?

      https://web.archive.org/web/20170603123809/http://www.tuicool.com:80/articles/7niyym Always Multiply Your Estimates by π > https://news.ycombinator.com/item?id=28667174

      https://lucasfcosta.com/2021/09/20/monte-carlo-forecasts.html > https://news.ycombinator.com/item?id=28769331

      https://tinkeredthinking.com/index.php?id=833 > https://news.ycombinator.com/item?id=28955154

      https://blog.abhi.se/on-impact-effort-prioritization > https://news.ycombinator.com/item?id=28979210

      https://www.shubhro.com/2022/01/30/hacks-engineering-estimates/

      https://www.paepper.com/blog/posts/monte-carlo-for-better-time-estimates-of-your-work/

      https://drmaciver.substack.com/p/task-estimation-101 >…

    • seppo0010Apr 2015

      This article feels like a follow up on "On Ruby"[1] and related to "It’s OK for your open source library to be a bit shitty"[2]. The common theme I find in all three is the quality and health of a dependency. I agree with OP that stars and latest commit are not clear indicators of quality.

      I think more useful indicators are tests, documentations and pull requests.

      * Tests. These are things you can actually run to see if the library actually works. In most cases, you can read them and understand how it is supposed to be used. On some platforms even if the tests passed in the past, they may not pass now, for example using different version of the language or platform. The coverage of the tests would be nice, but it is hard to measure at first sight, therefore using the ratio of tests LOC to library LOC might be an indicator.

      * Documentation. The documentation itself does not change how the library behaves but it is a clear indicator whether the author expected someone else to be able to use it or not, and shows a sort of responsibility. Most of weekend hacks would not have one.

      * Pull Requests. If there are old and open pull requests, that seem useful, it is a bad sign for the maintainer of the project.

      [1] http://hawkins.io/2015/03/on-ruby/

      [2] http://www.drmaciver.com/2015/04/its-ok-for-your-open-source-library-to-be-a-bit-shitty/

    • dackleJun 2025

      This reminds me somewhat of a system by David MacIver: https://drmaciver.substack.com/p/using-a-list-to-manage-executive

      He builds his list from scratch every morning. The list is flat, so as you go about your day and subtasks occur to you, they are added to the list without explicit links to the main task.

      I thought it might be risky to start with a blank list, because something important might be forgotten. But it turns out that a blank list is a great filter for what is truly important and motivating. If it is important, you will remember it at some point during the day.

      This system is also excellent for shorter periods of time. If I come home and want to get started on dinner, want to tidy up a bit and have a few other demands on my attention, I put my laptop in a central location, open up Notepad, and just start typing in everything I see around me that I need to do. Usually I start with maybe 5 items, but as I start doing things I quickly add tasks to the list, and it might grow to 15 or 20 items. But then at some point the list starts to shrink again as these small, granular tasks are completed. It is strangely satisfying to see the list initially grow and then shrink to nothing. It also leaves me with a feeling of having thoroughly attended to everything that was bothering me when I first walked in the door.

    • progmanJan 2017

      This confirms my own experience. I discovered that programs written in (or use) dynamic languages like Lisp are surprisingly reliable (Emacs in particular).

      Type safety won't protect us from broken software. Quote: "The most common bugs caught by static typing are also the least critical sort of bug."

      Source: http://www.drmaciver.com/2016/10/static-typing-will-not-save-us-from-broken-software/

      Static typing helps a lot to catch basic type errors but it is surely not the "Messiah" of code safety. In big systems the good old way of testing still seems to be the best practical way.

      Haskell's claim "If it runs then it's likely correct" is a deception because no compiler can catch logical errors. This was also Ada's problem in the Ariane disaster, although Ada has probably the strongest type system beside Haskell. You need special verification tools like FramaC, and even those tools don't catch all errors. Haskell's safety is even more questionable in face of the underlying libraries which are written in C. Finally, the still unresolved Cabal hell speaks for itself. Stack works only because it is an isolated repository where the maintainers have to take a lot of attention to make sure that new code doesn't break other code.

    • tikhonjDec 2020

      People say this, but it seems like a false dichotomy. I use Emacs exactly because I choose productivity!

      Emacs might take more time to configure, but that's time measured in hours or, at most, days—a tiny blip compared to the total amount of time you spend programming in the environment! On the other hand, you get a system that you can quickly adapt to your specific needs in a way that other editors do not really support. It's the perfect environment for "situated software"[1], and environment that can grow[2] with your needs and workflow.

      Emacs's learning curve and configuration is an O(1) cost for an O(n) benefit. As long as you're planning to use it a lot—and we're programmers, we're going to use it a lot—even a small increase in the benefit is worth a substantially larger up-front cost.

      [1]: https://www.drmaciver.com/2018/11/situated-software/

      [2]: "Grow" in a similar sense to Guy Steele's "Growing a Language" talk: https://www.youtube.com/watch?v=_ahvzDzKdB0

    Related

    Dave Cheneydave.cheney.net271 people

    Why Slack is inappropriate for open source communications

    Dave Cheney
    Personal · last shared 2026
    Dan Dreams of Codingdandreamsofcoding.com18 people

    Shutting Down a Dream

    Dan Dreams of Coding
    Personal · last shared 2025
    Dave Rolskyblog.urth.org20 people

    Perl 6 is fun

    Dave Rolsky
    Personal · last shared 2026
    Allen Wirfs-Brockwirfs-brock.com40 people

    The Rise and Fall of Commercial Smalltalk

    Allen Wirfs-Brock
    Personal · last shared 2026
    Reg Braithwaiteraganwald.com94 people

    How I Learned to Stop Worrying and Love the State Machine

    Reg Braithwaite
    Personal · last shared 2026
    Better Programmingbetterprogramming.pub319 people

    Three programmers got fired, including me, due to a single app crash

    Better Programming
    Publication · last shared 2025
    Keegan McAllistermainisusuallyafunction.blogspot.com52 people

    151-byte static Linux binary in Rust

    Keegan McAllister
    Personal · last shared 2023
    Put.asreverse.put.as49 people

    Abusing Go's Infrastructure

    Put.as
    Personal · last shared 2025