Blog post on recent talk

So I recently did a talk on Joy of Software Development. You can read more about the talk here (link includes slides and list of topics covered). This post is devoted to the references I’d promised to link to in the talk. Since it was an introductory talk, and I didn’t want to bore people to death, I decided to cover lots of topics at a shallow depth, instead of covering a few topics deeply.

This means that I need to post more material for people to follow up on. So, this is that reference blog post. Make sure you have a copy of the slides open as you go through these links.

Update: I also gave this talk (with a few updates) at GeekSkool in October 2015.

Software Development in general

Software Security

Starting Advice

Agnostic Software Development

Free and open source development

Version Control


During the talk, I decidedly used the term TDD incorrectly. TDD technically means going test first, but I used it as an introduction to testing in general. This was intentional. The links here will use TDD in the correct sense.


Unix Philosophy


These are books i absolutely recommend every software developer to read, in order.

  1. Don’t Make Me Think
  2. The Pragmatic Programmer

Other than these, I recommend reading Code Complete, Mythical Man Month, and everything by Jeff Atwood and Zach Homan, but only after you have read the above 2 books.

How to get better at Software Development?

This is just a small list of topics I cover in a recent blog post. This is only present in the updated version of the talk which I gave at GeekSkool. You can read the blog post here to look at the points I make.

Phew. That was a lot of links. If you are ever interested in learning more about software development, feel free to contact me. If you ever feel like chatting with me, I’m usually online at

Buxton's Rule

I consider myself a UX enthusiast. I consider that term to aptly describe my interest in UX. As I’m deeply involved in many UX and design decisions, I try to be well read on design and UX principles. While reading a discussion about iPhone prototypes on HN in June ‘12, I came across this comment:

Goes to show what it takes to achieve excellence: lots of trial and error. Produce at least 3 alternatives for every design decision (Bill Buxton agrees).


It sounded so basic, yet often I see designers trying to defend their first design, because it seems good enough to them. No good design is ever born at the first step. Just like any other process, it takes multiple iterations to perfect it.

I recently got in touch with Morgan (mstuherl on HN), and thanked him for his comment. Here’s what he said when I told him I wanted to dub it mstuherl’s rule:

Hah! My name’s Morgan, so you can call it Morgan’s Rule if you like, but it comes from Bill, so Buxton’s rule would be more appropriate. His book Sketching User Experience contains yet more wisdom!

So thats what I’m calling it:

Produce at least 3 alternatives for every design decisions.

Further Reading

scytheCTF and Updates

February has been an interesting month for me. I haven’t been programming a lot, but have definitely been writing a lot. I have got a few more upcoming projects as well, which I’d love to announce soon.

We recently held a short 8-hour CTF (scytheCTF) on Backdoor. I made two challenges for the CTF:

Both of these problems were rush jobs because of several reasons:

  1. We didn’t have much time to set the problems.
  2. We didn’t expect much participation in scytheCTF.
  3. scytheCTF was a test CTF, just to figure out any issues with the internet launch of Backdoor.
  4. scythe is also supposed to be beginner friendly, unlike our annual BackdoorCTF, which will include much harder problems.

I had a lot of fun with @kandoiabhi in setting the problems. It was also great seeing @DefConUA participate in such a small-scale contest.

Other than scythe, we recently had our annual SDSLabs trip to Rishikesh, which I enjoyed a lot. I also wrote a small post on my work setup.