Project-A-Week club 5
The first rule of Project-A-Week club is:
Finish the damn project.
The second rule of Project-A-Week club .. well, you know.
We'll probably get something a bit more official up, but the inaugural members are:
- @shapr
- @emson
- @mwotton
- @hydo
- @jfredett
I'll be working on getting predictive up and running on my server, porting it to snap or yesod as I go.
The other guys can chime in on the comments.
POSTSCRIPT:
We are honoured to be joined by the Don himself:
#projectaweek I'm writing a repa tutorial. Cult of productivity, do it!
Programmer is incompetent sysadmin on his own projects, film at 11.
Of all the ways to greet a Hacker News invasion, a 256mb slice running all my services including a poorly installed Typo blog with 10 passengers and broken caching is possibly the worst. Thanks to the #roro regulars (especially biv, glenndavy and osseta) for helping me debug exactly how dumb I'd been. (The best part is that it didn't just slow down - the OOM killer managed to assassinate both jenkins and sshd, leaving the poor little server basically catatonic.)
Caching is un-broken now, so hopefully next time I'll be prepared.
Instigator 0.9: a gem for starting projects
There's a lot involved with modern software development: source control, testing, continuous integration and packaging. On a 1-week project, there is no room at all for busywork, so my first project has been an app to create a new app with a single command. I bring you Instigator
Usage
gem install instigator # a sinatra project on heroku instigate MYAPPNAME --project_type=sinatra
This will create
- a sinatra skeleton, with tests
- a github repo called MYAPPNAME
- a heroku instance at MYAPPNAME.heroku.com
- a jenkins project
- a linkage between github and jenkins, so that whenever you push to the repo, the tests are run
The development of this app has been an interesting insight into the difficulty of working using Don's technique. For a start, I didn't cut down the scope nearly as much as I should have.
Typically (and hubristically), I thought this would all be easily achievable within a week. It started as a Haskell app, then morphed into a ruby app as I gradually discovered how much more polished the Ruby web-interaction tools are, and then further changed to be built on the Thor command-line framework in ruby.
There's still work that could be done on it. I like to set heroku apps up with staging and production branches, and we haven't accounted for that yet. Also, the haskell template could use a little work: while it works, it does rely on having TBC correctly installed first. (It pains me to say it, but the testing infrastructure in Haskell is not yet as smooth as Ruby's.)
All in all I'm pretty happy with it, though. It's easy to add new recipes, and the Thor library made working with command line invocation a joy. In any case, four weeks later I'm ready to present Instigator and to hope that the next appconforms more closely to the Stewart strictures.
ps. I'll be giving a lightning talk on Instigator at RORO at the Trinity on Tuesday.
The Stewart Method: How Not To Suck 11
Don Stewart is a monster of productivity.
-
XMonad
- Bytestring
- PhD thesis
- stack overflow guru
and more libraries on hackage than you can shake a stick at:
54
I point these achievements out not to blow smoke up his arse, but to observe that he's obviously doing something different. So, when he came back to Sydney for his PhD graduation, after many beers I prevailed upon him to reveal his dark secret. It turned out to be an elegant, two-step plan.
1. Write code for your own projects, every day.
This is about building coding muscle and discipline. Habit is stronger than willpower: if you reach the point where it's physically uncomfortable to miss a day of coding, you've got a big jump on the competition. It's even better if you can tie this effort to a particular time in the day, like a train commute.
2. Release a project every week
This is a hell of a lot harder than the first. Programmers are perfectionists. Combine these two simple facts:
- It's embarrassing to release incomplete projects
- Every project could have extra features
and you have a guaranteed recipe for a project folder full of promising starts and no released code.
So, how do we sidestep this? There are really only three axes of control in software development: time, quality, and scope. Clearly we're not going to compromise on quality, and by the nature of the exercise, we have to finish a project every week. The only flex we have is in scope, and this is really what this step is all about.
You must kill your darlings. Cut the scope down to the absolute minimum that could possibly be useful. If you finish early in the week, by all means add features: having a working prototype will give you a better idea which are useful and which are gold-plating.
In any case, I've decided to give it a go. Starting with the release of Instigator, I'll be releasing a new project every week. Stay tuned.
