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

    Jacob Kaplan-Moss

    jacobian.org · Personal blog · on HN since 2007

    Jacob Kaplan-Moss, a co-creator of Django, writes on engineering management, software estimation, documentation and Python tooling.

    Visit blogRSSHN submissions
    ManagementProgrammingOpen Source & Linux
    What HN says

    HN commenters call it an excellent blog on management and team work, and one uses his estimation article as a reference.

    Stats for nerds
    196HN people shared it
    206linked in comments
    8.8Kstory points
    Jun 2025last shared
    2009people per year2025

    Top posts on HN

    1. 1
      Embrace the Grind
      9 people · 1.2K points · first shared 2021 · 310 comments on HN
    2. 2
      My Python Development Environment, 2018 Edition
      3 people · 532 points · first shared 2018 · 219 comments on HN
    3. 3
      That wild Ask a Manager story
      2 people · 444 points · first shared 2022 · 298 comments on HN
    4. 4
      Exit interviews are a trap
      2 people · 424 points · first shared 2022 · 407 comments on HN
    5. 5
      Software estimation is hard – do it anyway
      3 people · 403 points · first shared 2021 · 230 comments on HN
    6. 6
      Tech compensation in 2021
      1 person · 399 points · first shared 2021 · 606 comments on HN
    7. 7
      My Python Development Environment, 2020 Edition
      4 people · 393 points · first shared 2019 · 232 comments on HN
    8. 8
      Paying people to work on open source is good
      1 person · 343 points · first shared 2024 · 129 comments on HN
    9. 9
      Breaking down tasks
      1 person · 318 points · first shared 2024 · 114 comments on HN
    10. 10
      Thank you, Rails
      2 people · 297 points · first shared 2009 · 77 comments on HN

    What HN people wrote when they linked it

    • technomancyAug 2012

      > the best way to do that would be to make tools that make beautiful documentation easy.

      Really? I find it hard to believe that the problem is caused by a lack of tools. Clojure already has five or six tools for spitting out a programmatically-generated HTML overview of the shape a given project.

      Instead I think it's clear the reason this doesn't happen is that good documentation is really difficult to write and people don't want to put the necessary effort into it. Putting aside the obvious problem that good English prose is really difficult to write, you have to overcome the fact that the people qualified to write the documentation don't much benefit from it. On top of that, it's very difficult for an experienced user to put himself in the mindset of a beginner.

      In fact, I'd go so far as to say that the existence of all this existing documentation tooling only goes to reinforce the harmful notion you can just run something like marginalia over your codebase and publish the HTML output somewhere and consider your project documented. Sure, API overviews are valuable as a reference, but they're mostly just a distraction to someone starting out who just wants to figure out whether the project is a good fit for their needs. Long-form prose documentation is crucial at that stage, and it's awfully hard to come by.

      http://jacobian.org/writing/great-documentation/what-to-write/

      Anyway the tooling is trivial--getting an overview of the API and docstrings has been done over and…

    • nsfmcFeb 2016

      hi marjin! thanks again for all your work on prosemirror. the docs are quite thorough (and have gotten moreso in the past few months!), but a specific thing which i ended up needing to dive into the code for was something like setting up a custom menubar[1] with a menugroup.

      The docs back then (and even now) do this thing where they get rapidly tautological and have you hop around between type definitions but don't, for instance, show you what the default `menuBar`'s content value is, in terms of a MenuGroup so it's not readily obvious how to customize my own without reading the source.

      So reading the docs, while i can certainly find out what things are and how they connect, i don't have a good sense of what decisions prosemirror made for me (or how it made them) so that i can intentionally customize or integrate in a non-backwards way. If the code weren't so legible, this would be a massive problem, but it's the sort of in-depth documentation that needs somebody working strictly on documentation in that way that kaplan-moss talks about[2]. I totally get that prosemirror is early days and integrating it has been a good experience, but that's the sort of documentation pain-point i was referring to. Thanks again!

      [1]: http://prosemirror.net/ref.html#menu/menubar
      [2]: https://jacobian.org/writing/great-documentation/

    • noufalibrahimMay 2021

      From good colleagues
      - Be someone that improves your environment whatever you're put into - code, team dynamics, communication whatever.
      - Be relentless in pursuing something that you're convinced is worthwhile. Things and times change. If you feel something is good for you and the org, do it. Don't waste time "thinking".
      - Orgs have reputation inflation. If you're the same as you were last year/month/week, you've actually dropped.
      - Demand results and reward when you get them. Keep pushing your reports
      - Be consistent and be present.
      - Leadership is revealed during crises. Be in control when shit hits the fan.
      - Identify exceptional skills in your reports, sell those to the higher level organisation.

      From bad colleagues
      - Protect your direct reports from the organisation (politics, snatching away of bonuses etc.)
      - Junior reports cannot function without a clear task. You need to handle the org and make sure they get it. (this was summarised in a great article - "context down, information up" - https://jacobian.org/2021/apr/19/the-fundamental-purpose-of-middle-management/)
      - Respect everyone and mentor juniors who look up to you.
      - Don't accept leadership positions if you can't actively play office politics.

    • drewcrawfordJul 2013

      This is a great article.

      One thing I would add to this is that nobody really knows what licenses like the GPL actually do. Jacob Kaplan-Moss published a fantastic piece called "20 questions about the GPL"[0] , and my attempts to clarify a few of them with the FSF and SFLC have so far revealed that not even two developer advocate organizations can agree on even fundamentally basic concepts about the most popular license, so isn't that a problem?

      The reason that I contribute to the "projects on GitHub with no license" problem is that I cannot find a license that unambiguously does what I want, after spending many, many weekends on the problem. I could write one, or get my lawyer to, but license proliferation is grounds for expulsion from the cool kids club. Since I have no good options, I take no action.

      Fundamentally, I believe we need a new license steward that isn't afraid to update regularly to address 1990s questions like dynamic linking and optional dependencies, and 2010s questions like app stores. Something like Creative Commons for code, where you have some options to choose from.

      [0] http://jacobian.org/writing/gpl-questions/

    • goblin89Aug 2015

      Great initiative, but beware relying on automatically generated documentation. Keep units documented in the code, and have your higher-level docs handwritten and hand-structured elsewhere, is the policy I’ve arrived at lately.

      (It doesn’t make sense to spend resources on having units documented separately from code, because you don’t need such docs unless you’re working with code. Loads of auto-generated docs also gives a false impression of your project being properly documented, which it isn’t unless you also have higher-level hand-written documentation somewhere.

      Similarly, it doesn’t make sense to keep high-level architecture docs in docstrings, as it’s not tied to specific modules, and you normally need it when you’re thinking big picture as opposed to working with specific code units.)

      Overall, kudos—good documentation is important.

      If you’re concerned about writing good documentation, I recommend reading these series by Jacob Kaplan-Moss (of Django core development team): https://jacobian.org/writing/great-documentation/

    • sreevisakhApr 2020

      It does work with pyenv, but can be slightly tricky. I used a setup recommended by Jacob Kaplan [1] that uses pyenv, pipx and poetry.

      Pyenv is used to manage different versions of Python and virtual environments (using pyenv-virtualenv [2]). Pipx will be accessible only from the python version or virtual environment it is installed to. However, the programs that you install using pipx (like gita or poetry) have their own virtual environments, and run reliably irrespective of accessibility of pipx and what you have activated using pyenv.

      It's easier to install pipx into the pyenv python version that you have set up as global. This ensures that you have access to pipx most of the time. You could just spawn a temporary shell with global python to access pipx otherwise.

      [1] https://jacobian.org/2019/nov/11/python-environment-2020/
      [2] https://github.com/pyenv/pyenv-virtualenv

    Related

    Eric Holscherericholscher.com60 people

    How I Judge the Quality of Documentation

    Eric Holscher
    Personal · last shared 2025
    James Bennettb-list.org95 people

    Let’s talk about usernames

    James Bennett
    Personal · last shared 2026
    Andrew Godwinaeracode.org68 people

    Hello, This Is London Rising: 3D Printing Maps from LIDAR Data

    Andrew Godwin
    Personal · last shared 2025
    Reinout van Reesreinout.vanrees.org31 people

    PostgreSQL when it is not your job

    Reinout van Rees
    Personal · last shared 2026
    Django Blogdjangoproject.com312 people

    Happy 20th Birthday, Django

    Django Blog
    Company · last shared 2026
    Scattered Thoughtsscattered-thoughts.net186 people

    Against SQL

    Scattered Thoughts
    Personal · last shared 2026
    Luke Plantlukeplant.me.uk135 people

    Why I’m Leaving Elm

    Luke Plant
    Personal · last shared 2026
    Jeff Knuppjeffknupp.com90 people

    How 'DevOps' Is Killing The Developer

    Jeff Knupp
    Personal · last shared 2024