Itch Scratching: Pros & Cons

Brad Fitzpatrick, @bradfitz,

(use arrow keys or PgUp/PgDown to move slides)

Story time...

Lessons so far...

Fireman? Policeman?
"I wanna be a mother-f******* computer programer and you betta' aks somebody..."

Early programming lessons, in retrospect

Software Has Surprising Longevity

Software Has Surprising Longevity

Software Has Surprising Longevity

The Internet

Itch: AOL chatrooms don't have spammy bots

Scratch: wrote bots, scripting GUI ⇒ AOL strike 1

Itch: AOL doesn't send me enough shiny CDs.

Scratch: flood name/address permutations to AOL CD request web form ⇒ AOL strike 2 (or 3?)... kicked off AOL

Local ISP shell ⇒ learn Unix & Portland street names


Scratch: showing my age, in seconds, on each reload

Scratching Pro: Learning

Learn me some database: "FreeVote"

... killed Hevanet servers.

... pissed off Canadian moms.

Lesson: start a company

... now you have n problems

Itch: my website still looked

Scratch: VB app with single-line text box to update my status (blogging API?)

... Twitter in 1998

...until s/input/textarea/

Scratching Pro: dorky cool kid in dorms

Scratching cons so far

Server hell continues...

Can't buy & rack new servers fast enough.

Shower epiphany: only free resources were scattered RAM and network...

... seemed obvious. If not already done, must be stupid for some reason?

Site was dying. Might as well try it...

... worked. Site back alive, with tons of breathing room.

Realization: not all your ideas are dumb

... other people sometimes just lazy or lacking your problems

Scratching Pro: fix your problems

No more doubt. Fix all the problems!

Load balancer? ... Perlbal.

Blob storage system? ...
NetApp MogileFS.

Decentralized identity between sites ? ... OpenID.

RPC load balancer? ... gearman.

Backup system? ... Brackup

XMPP server integrated with LJ? ... djabberd


Why djabberd? Why not jabberd or ejabberd?

Easy != Quick
Time-Consuming != Hard

XMPP was fun, but a time-suck.
Big, ambiguous specs are poorly implemented.

I no longer work on djabberd, but...

CON: every piece of software you touch will generate email for life

Assume: you will abandon a project at some point, or hand over maintainership...

Pro-tip: layer of indirection between your code and your email

Pro-tip: find co-maintainer(s) early, use mailing list + indirection from day 1 ⇒ less guilt later

CON: guilt

Warning: your software might end up in Debian Stable, Ubuntu LTS, etc

I was able to maintain all my code, patches, communities for awhile, but time is finite...

Pro-tip: delegate, empower your community. People love proving themselves.

Even with email indirection, git log knows your email...


“I see you were doing 120 ms in a 16 ms zone...”

"But my project is stable! No need for patches!"

False. All your dependencies are forever changing...

... kernel, libc, OS, init mechanism, environment, file layout, best practices, community expectations, ....

Use existing X: not your problem.
Write your own X: hahahahahaha

Yet another example: PubSubHubbub, XML vs JSON

To publish, or not to publish?


Never published...

... don't mind open sourcing. But don't want email or patches.


How to decide when to build?
... whether to publish?

Pros & Cons

Pros: learn, fix your problems, exact solution, recognition (free conference passes)
Cons: email for life, time suck, maintenance, guilt, [often] on your own

Join an existing project?

Best size for a project?

1 huge project?
2 competing big projects?
10 one-man projects?

...probably in the middle

...probably don't need another JavaScript "framework"

...probably don't need another ORM, NoSQL system, ...

...but maybe that's your itch scratch it.