Best software writing

date May 24, 2011
authors Joel Spolsky
reading time 3 mins
engineering

software survivability…

That software which is flexible, simple, sloppy, tolerant and altogether forgiving of human foibles and weaknesses turns out to be actually the most steel-cored, able to survive and grow while that software which is demanding, abstract, which but systemised turns out to collapse in on itself in a slow and grim implosion. dreams…

Adding value

I encourage all of you to act on your dreams with open eyes. I encourage all of you to dream of an Internet that enables people to work together, to communicate, to collaborate and to discover. I encourage all of you to remember that, in the long run, we are all human and, as you add value, add it in ways that are simple, flexible, sloppy, and in the end everything that the Platonists in you abhor.

3 ways to make technology work in the context of people…

(1) Make a technology, market the hell out of it and demand that it fit into people’s lives. (2) Make a technology, throw it out to the public and see what catches on. (3) Understand a group of people and their needs and then develop a technology that comfortably embeds itself within the practices of people… Personally, I believe that the latter 2 ways are the conscientious way of designing sociable technology. problem solving…

Hardest problem

In programming, as in many fields, the hard part isn’t solving problems, but deciding what problems to solve. Imagination is hard to measure, but in practice it dominates the kind of productivity that’s measured in line of code. great hackers and open source…

Great hackers

Great hackers also generally insist on using open source software. Not just because it’s better, but because it gives them more control. Good hackers insist on control. This is part of what makes them good hackers; when something’s broken, they need to fix it. You want them to feel this way about the software they’re writing for you.

4 main development tools:

  1. Editor
  2. Compiler
  3. Version Control
  4. Bug Tracking

main questions:

  1. Are the features done? How done? Are they testable?
  2. How many bugs are left?
  3. How many bugs are you fixing on a daily basis?
  4. How many bugs are you willing to ship with?
  5. What are your bug deferral criteria?
  6. What’s your update strategy?

new to online…

These kinds of ubiquity, both “everyone is online”, and “everyone who’s in a room can be online together at the same time,” are leading to new patterns.

3 things to accept:

  1. You cannot completely technical and social issues.
  2. members are different from users
  3. core group has rights that trump individual rights in some situations

4 things to design for:

  1. handles that users can invest in
  2. design a way for there to be members in good standing, some way in which good works get recognized
  3. some barriers to participation, however small
  4. spare the group from scale - scale alone kills conversation.

develop in the “open”

With the ubiquity of the Internet today, one of the best ways to build awareness of your product is to develop it “in the open”… Developing software takes time. Doing it in the “open” can be a great way of using that time to build awareness as you go.