Software development – don’t react to failure by putting in more process and control

Some thoughts from Heisenberg Developers that I really enjoyed reading.

Software development is a complex system of multiple poorly understood feedback loops and interactions. It is an organic process of trial and error, false starts, experiments and monumental cock-ups. Numerous studies have shown that effective creative work is best done by motivated autonomous experts. As developers we need to be free to try things out, see how they evolve, back away from bad decisions, maybe try several different things before we find one that works.

If you ask me how long a feature is going to take, my honest answer is that I really have no idea. I may have a ball-park idea, but there’s a long-tail of lower-probability possibilities, that mean that I could easily be out by a factor of 10. What about the feature itself? Is it really such a good idea? I’m not just the implementer of this software, I’m a stake holder too. What if there’s a better way to address this business requirement? What if we discover a better way half way through the estimated time? What if I suddenly stumble on a technology or a technique that could make a big difference to the business?

As soon as you ask a developer to tell you exactly what he’s going to do over the next 8 days (or worse weeks or months), you kill much of the creativity and serendipity.

The more finely grained the tasks, the more you kill autonomy and creativity.

Not all developers dislike micromanagement. Some are more attracted to the paycheck than the art.
Finely grained management is a recipe for “talent evaporation”.

Control different computers with one mouse and keyboard

I read a long time about Synergy in Matt Cutt’s blog post, but didn’t give it a try. Today the day finally came and it was well worth it.

Now I can mouse over to the notebook and work in Photoshop and mouse over back to my Linux desktop.

Synergy macbook and desktop

Synergy on OSX
Synergy client on OSX

Server configuration

#
# /etc/synergy.conf
#
# comments begin with the # character and continue to the end of
# line.  comments may appear anywhere the syntax permits.
# +-------+  +--------+
# |mike-nb|  |zeus-pc |
# |       |  |        |
# +-------+  +--------+
# http://synergy-project.org/wiki/Text_Config

section: screens
	zeus.zuber.gutanet.sk:
	mike.zuber.gutanet.sk:
end

section: links
	# mike-nb is to the left of zeus-pc
	zeus.zuber.gutanet.sk:
		left = mike.zuber.gutanet.sk
	mike.zuber.gutanet.sk:
		right = zeus.zuber.gutanet.sk
end

section: aliases
	zeus.zuber.gutanet.sk:
        192.168.2.9
	mike.zuber.gutanet.sk:
        192.168.2.4
	mike.zuber.gutanet.sk:
        mike.local
end

section: options
    screenSaverSync = false
end

More info at http://synergy-project.org/wiki/Text_Config

Synergy Linux server config
Synergy Linux server config

If you get the FATAL: unknown screen name `zeus’ check your hostname via the hostname command in Linux. The hostname must correspond with the name in the config.