Friday, March 4, 2011

How to DOS a developer

So you think your favourite FOSS project is moving too fast? Easy, just DOS the developers. Here's a few tips on how to achieve this:

On IRC



  • If you have a problem, just state that you have a problem. Let the developer ask for what exactly it is. Then answer every question with the minimum amount of information possible and let the developer keep asking.

  • Wait 5 minutes before answering but keep asking why the developer doesn't answer immediately. That way you can maximise the context switching costs of the developer, ensuring he or she can't get anything else done while waiting for you.

  • If the developer asks for version numbers, be vague. Things like "whatever was in $DISTRO three days ago" is best because unless the developer is also the distro maintainer, you've answered the question without providing any information.

  • Don't stay on IRC. Just go offline whenever your computer goes to sleep and re-ask the question every time you reconnect. This way you ensure that those not monitoring the channel will try to answer the questions whenever you're currently offline. Never send email to the list, because others could answer it in their own time.



Via email



  • Send bug reports to the developers directly. That way you force them to reply with at least "please file a bug in $BUGZILLA". That takes 2 min of their time, not counting context switches. Make sure you reply with more than one "thank you" email so they need to deal with more email.

  • Randomly remove the CC from mailing lists during discussions. That way you make sure the developer has to answer twice if they didn't notice the CC was missing.

  • When taking discussions back onto the list, misquote (or purposely misinterpret) the results of the private discussion. Force the developer to justify themselves in public.

  • Be verbose. As verbose you can be. If you can say something in one sentence or three paragraphs (with three overlapping or identical examples), choose the latter. Searching for signal in lots of noise is a favourite pasttime of many developers.

  • If you change the subject of a discussion, leave the email subject as-is. This way you ensure that the email cannot easily be found later. Wait for a few weeks, then refer to this discussion, but not in the same thread.

  • Pastebin everything instead of including it in emails. Links to websites, backtraces, log files, patches, etc. Make sure the pastebin has a short expiry date.

  • If you must include something as attachment, make sure it's at least in a zipfile so no-one can look at it without a few mouse-clicks first.



Via code



  • When commenting on patches, reply with vague statements on how the patch doesn't work. This way, the patch is made to look bad and the developer now has to spend time making sure your vague statements weren't just unfounded.

  • When testing code, make sure you don't explain how a bug happend. Just say "after a while it crashed", that's enough information for anyone to figure out what's going wrong.

  • Read The Daily WTF and gain inspiration for your next open source project. If you ever get other people helping you, you maximise their pain.

  • Don't document anything. Just use arbitrary hardcoded values, with no explanation.

  • Never, ever, explain why you're doing something. Code is not meant to be self-explanatory.

  • Don't follow anything I said in on commit messages

  • Do everything as complicated as possible but don't explain why. Obfuscating that you're flipping the sign of a variable three to four times is a good example, anyone reading the code is sure to spend hours on it

  • Use numbers as both bools and numbers. C is great for that, you can return 2 and then use it as Boolean and as actual numeric value lateron. Hide any such usage as well as you can.

  • When sending patches, mix code changes with arbitrary whitespace changes. Fun minutes can be spend looking at two identical lines trying to find the difference that's missing.

  • When sending updated versions of a patch, don't tell anyone what has changed. That way, you force your reviewers to review the whole patch, every time you change a single character.

  • When sending patches, make sure that it only fixes the problem on your specific setup. That way you also can tell the developers off for not merging an important bugfix that clearly works when you tested it. And you force them to reply to you.



Those are just the immediate things that come to my mind. If the project is already low on manpower, any of these will have a high impact. If it has enough developers, you may need to use several of them at once to tie up the most resources. Of course all this requires developers that still think that communicating with users is worthwile and that other people generally tell the truth. If they have given up on humanity, they may just ignore you and keep improving the project. In that case, you can at least badmouth everyone on tech "news" sites forums and comments.

Oh, in case you're wondering why I don't get anything done lately, see above. I realise that probably none of it is intentional, though the net effect is the same.

12 comments:

  1. lol, cute. Also: convince developers to waste time blogging about how they never get any work done, instead of getting them to get work done. Just kidding :)

    ReplyDelete
  2. Great tutorial. I would add one, use rar-archive rather than zip. And maybe it could be password protected too.

    ReplyDelete
  3. Great post, I can feel with you although I wouldn't dare calling myself a developer but just a package maintainer. Especially IRC can be really annoying.

    ReplyDelete
  4. If somebody comes to IRC stating that he has a problem without giving any specifics, then the reply can just be "It works fine here."

    Scripted responses such as "What are you trying to achieve, which piece of documentation are you following and which part fails?" also help in avoiding full context switches.

    Finally, you can leave some hints in the channel topic for impatient users, like the #kaffeine folks do on freenode.

    ReplyDelete
  5. great as always Peter :)

    ReplyDelete
  6. Please correct the spelling mistake in this blog post.

    ReplyDelete
  7. Add re-sorting methods in a class to the code section. Has the effect of completely screwing up a diff of two versions of the code and making the developer spend ages working out what has actually changed in the class.

    ReplyDelete
  8. Haha, excellent! I like it. :)

    Being myself a developer, I have no difficulty to imagine how true that is. :)

    But I personally ignore such users and their contributions pretty quickly, their problems being real or not.

    ReplyDelete
  9. Wow, that's some really handy tips there! Can you put this into a power point preso? Honestly, I only read half of it - but it would be so much easier to read if I could just click through it one screen at a time. Just CC it to me, k?

    ReplyDelete
  10. If one is sufficiently talented at DoS-ing developers, one will reduce them to a state where they DoS themselves through the writing of blog posts instead of code ;)

    ReplyDelete
  11. only missing the over managemant cracks. As a bonus you always get the developers worried about something else that is not relevant to the project accomplishment

    ReplyDelete

Comments are moderated thanks to spammers