It’s OK for your open source library to be a bit shitty

(Content note: I normally try to keep my natural level of profanity slightly under control on this blog. I won’t be doing that in this post)

The major reason I wrote Hypothesis is to destroy shitty software. Everything is terrible, and I want it to be less terrible.

But that random code you threw together as a hack, stopped when it did what you needed to do, threw it up on pypi and then neglected it?

That’s totally OK. Thanks for writing it. The world is slightly better for your having done so, and there is no burden of expectation on you to “do a better job”. It’s not a job after all, is it? We’re not paying you to do it.

And this is what it ultimately comes down to.

I flatter myself that one of the things that I can legitimately claim about Hypothesis is that it is high quality. So far the worst bug that anyone has reported in the 1.0 release is that when given a wrong argument, Hypothesis throws an exception with the right type from the right place with the wrong error message. Hypothesis works on OSX, Linux, Windows, probably *BSD (I heard about some packaging issues with sqlite, but nothing since, so I think it worked once those were resolved), Python 2.7, 3.2-3.4, CPython, Pypy… It’s got 100% branch coverage, is documented, etc. Basically as far as quality goes Hypothesis does almost everything right.

So I’ve proved it can be done and that you should do it too, right?

Nah, that’s bullshit. I’m here to tell you as someone who has done the work of producing quality software for free, you don’t have to and you shouldn’t feel bad about not doing so.

Want to know how I did everything right in Hypothesis? I mean, obsessive attention to detail and high standards helped, and may even have been essential, but they weren’t even close to sufficient. Really there are two things that were the key ingredients to my making Hypothesis the quality piece of software it is today:

  1. Time
  2. Money

I’ve put somewhere in the region of 800 hours of work into Hypothesis this year, entirely for free. That’s what it took to get to this level of quality.

And I could only do this because I had the time and money to do so. I had the time to do so because I was being obsessive, had no dependents, and didn’t have a job. I could only not have a job because of the money. I only had the money because I spent the latter half of last year with double the salary I was used to, half the living expenses I was used to, and too borderline depressed to spend it on anything interesting.

These are not reasonable requirements.

Could I have done Hypothesis in less than 800 hours? Probably. I doubt I could have done it in less than 400 though, and I would be foolish to expect I could do any project in the smallest amount of time I could feasibly do it in.

Hypothesis is a large and complicated project though (if it doesn’t look like one, that’s because a lot of those 800 hours were spent on making it easy to use). Most projects are probably an order of magnitude simpler.

i.e. only 80 hours.

i.e. only you having to take two weeks off work, working literally for free, in order to produce quality software.

i.e. nearly half your holiday allowance if you live in a civilized country, or possibly more than your holiday allowance if you live in the US.

This is still not a reasonable requirement.

Can you produce quality software in less time than that, working only in your free time? I doubt it. Free time is inherently less productive. You’re tired and it’s fragmented. You spend an hour one evening trying to figure out why your windows builds are now failing because a new version of pip is released and after that I guess you could put another half hour in but your heart isn’t really in it and you’d basically not have the time to get properly stuck into it. The bar for quality is high, and the obstacles to it are higher, and there’s really nothing you can do to fix that other than to put into the time.

Don’t get me wrong. If you can put in the time I will be incredibly grateful to you. I just don’t think you should feel bad if you don’t.

There is no obligation to free labour. Every hour you put in working on your project for free is a gift to the world. If the world comes back to you and says “You are a bad person for not supporting this thing I need you to support” then fuck them. If they want that they should pay you for it, or do it themselves.

(Edit to note: This isn’t of course to say that you shouldn’t ask for features on open source projects. Only that you are not entitled to them. If you politely ask, that’s fine. If the author then says “Sorry, no, I don’t have the time / am not interested / literally any other reason at all”, that’s fine too)

Note: If you liked this piece, there is a follow up you may wish to read.

This entry was posted in programming on by .

23 thoughts on “It’s OK for your open source library to be a bit shitty

  1. Martin Fecalati

    Ha, very good points. There doesn’t seem to be any way to control the code once it is inserted inside however. I wonder how to fix this?

  2. Hiway

    Thank you – I have held back, given up on several small projects because I couldn’t find the time to get the project to the level where I’d consider sharing it with others. Will try share-first and fix if demand exists approach.

    Also, thank you for Hypothesis, I’m using it in one of my newer projects and liking it a lot.

    1. Jason Reid

      Great way to approach it, sometimes you KNOW about a bug but it’s not an issue for you, then when someone strolls along and is using your code you get this new found energy to start fixing it and making it usable by others.

  3. Dan

    I think there does need to be one counter point though – if you open source the darned thing, you either need to look after it; *or be willing to open up access so others can*.

    There’s a lot of repos that you see that just are dead – https://github.com/jaz303/tipsy is my personal bug bear – where the community just wants to fork it and run with it; but the maintainer won’t open up the access or point to another fork as the maintained one.

    1. Roland Kuhn

      Maybe I’m missing something, but given any (real) OSS project, how would someone be able to prevent others to fork it? The project you link to is under the MIT license, so anybody could just copy the whole source repository and start running with it.

      1. Steven

        I think what Dan was getting at is that sometimes a particular repository is the one with critical mass – by popularity of its name, by google ranking for associated search terms, etc. – and getting a fork off the ground is burdened by this, especially as the original maintainer (who has since stopped maintaining) will not – or cannot – point to the forked version, nor give control over that existing repository (essentially handing over the login) to a new maintainer.

        This is not a problem unique to open source code – regardless of the level of slop.

  4. Battaile Fauber

    This makes me feel better about all my ignored todo list items whose primary purpose was improved (apparent) maintainability or style for posterity’s sake.

  5. Alex Glover

    Thanks for posting this. I’ve seen posts that assert the exact opposite (you shouldn’t contribute shitty code because you’re misleading people with bad examples) and it really kills my motivation to work on side projects. But fuck that – maybe my mediocre code will inspire someone else, or maybe someone smarter than me can give feedback/corrections and other folks will see it. It’s still a positive contribution.

    The way I see it, we’re all contributing to the best of our ability. Those who consume others’ code have the obligation to determine if the code/app is robust enough or well-written for their purposes. My code’s too shitty for you? Write your own.

    Check out some of my mediocre code – http://alexdglover.com or https://github.com/alexdglover/

  6. John Wordsworth

    Great post. I can’t count the number of ideas that I have developed to the point where I can use it and said “I will tidy this up and open source it one day”, only that “one day” still hasn’t come yet…

    The next time that happens I will try to think of this and tell myself that it doesn’t matter if it’s perfect-code or not, if it works, someone else can benefit from it and maybe even do some of that tidying up along the way!

  7. Jonas

    Amen, brother. I appreciate this, as someone who has poured a lot of time into free and low-paid things because I believed in them. You are absolutely right, and this kind of permission allows people a little more space to just create and not worry about various judgements…etc. thanks!

  8. Pingback: Surprise! Feminism. | David R. MacIver

  9. rohn

    absolutely!! I’m just coming around to this way of thinking for the code that I write in my “off-hours”. It took a job interview to convince me though… I had very little on github and during the interview I was asked why. The interviewer explained to me that I should put everything out there… you never know what little experiment is going to help someone else through their head-banging and, he said, it shows I’m continuously learning. I’ve now started… for example: if I write a react component just to play with the framework, it’s getting a github public repo.

  10. David C. Rynearson

    Time and Money, if only we could convince the people who had those things to allow for work on our software it’d make life a lot simpler. Thanks for the read, hope all is well on the depression front.

    1. david Post author

      You know, in 30,000 views you’re the first person to say that. Thanks. :-)

      As it happens, everything is basically fine. It was mostly situationally induced, so I was able to solve it by quitting the job doing the inducing.

  11. Pingback: Replies to “The Ruby minimalist counter-culture” and “Popularity” by Michel Martens. | cat /dev/mind

  12. Pingback: Reading list, 4 | soledad penadés

  13. Pingback: The war cannot be won, yet still we must fight our little battles | David R. MacIver

  14. Omari

    Next time someone has the nerve to get upset at me at a bug report in Github, I will link to this.

    I also need some sort of a standard “this is free software” link. As in “this is Free Software, so if you don’t like the choices I made, I take zero offense if you fork it and do as you wish. Heck, it might even be a favor, because then I won’t have to do the work.”

  15. Pingback: It’s okay for academic software to suck | Bcomposes

  16. Pingback: If you want Python 2.6 support, pay me | David R. MacIver

  17. Pingback: Two new Hypothesis releases and continuous deployment of libraries | David R. MacIver

Comments are closed.