Skip to content

Instantly share code, notes, and snippets.

I read I Don't Believe in Sprints yesterday and found myself disagreeing with almost all of the article, while agreeing strongly with its headline. Here's my attempt to collect my thoughts about why.

The worst thing you can do in software development

The worst thing you can do in software development is building the wrong thing. If you build the wrong thing, you have to pay three costs:

  1. you pay the cost of delay for the valuable thing that you could have been building while you spent your time building the wrong thing;
  2. you pay the cost of maintenance on the software you've built, every moment up until the point you realize it's the wrong software and you delete it (and you pay the cost of deleting it, which may not be negligible by the time you get around to deleting it);
  3. you pay the frustration cost of realizing that the thing that you spent your time and effort building was
~> rails new binstubs_test
create
create README.md
create Rakefile
create config.ru
create .gitignore
create Gemfile
run git init from "."
Initialized empty Git repository in /Users/tomstuart/binstubs_test/.git/
create app
@rentalcustard
rentalcustard / fixpraisepres.js
Last active June 1, 2016 14:58
Small improvements thing
var nameWithAvatar = function(person) {
return person.name + ' (' + person.logo + ')';
}
var buildMessageText = function(message) {
return [message.title, message.message].join(" - ");
}
var buildMessage = function(message) {
return 'Praise from ' + nameWithAvatar(message.author) + ' for ' + message.recipients.map(nameWithAvatar).join(" and ") + ': ' + buildMessageText(message);
@rentalcustard
rentalcustard / MIRROREDALLWORDS.MARKDOWN
Last active September 9, 2015 13:17
BATTLES - MIRRORED - FULL LYRICS

Race : In

(whistling)

um-um-um-oh-towm-oh-hum-hum
oooh-oooh-oooh-oooh-oooh.
um-um-um-oh-towm-oh-hum-hum
oooh-oooh-oooh-oooh-oooh.
;original
(filter filter-fn some-collection)
;parallel filter
(map :val (filter (fn [m] (:allowed-by-filter m))
(pmap (fn [v] {:val s :allowed-by-filter (filter-fn v)}) some-collection)))
@rentalcustard
rentalcustard / gist:5a19949c08218b7a7557
Last active August 29, 2015 14:16
objective point of fuck you
A concern troll,
little boy on a derail-roll
last night's red wine
residue in a teacup, drying
I eat
hob nobs and spit you out
I read
your blog and shit while you pout
scala> 'a' % 87.788
res0: Double = 9.212000000000003
scala> 'a' > 96
res1: Boolean = true
scala> 'a' - 97
res2: Int = 0
(defmacro new-if [pred then-clause else-clause]
`(cond ~pred ~then-clause
:else ~else-clause))
"This works, in that if I call it like so:
"
(new-if (= 2 3) (while true (print "hi")) :bye)
"I don't get an infinite loop, but I don't understand how. I've unquoted
(defmacro new-if [pred then-clause else-clause]
`(cond ~pred ~then-clause
:else ~else-clause))
"This works, in that if I call it like so:
"
(new-if (= 2 3) (while true (print "hi")) :bye)
"I don't get an infinite loop, but I don't understand how. I've unquoted everything in the macro body, so shouldn't the normal evaluation order apply? Why doesn't it evaluate then-clause when I do it this way?
numberwang :: (Floating a) => a -> a -> String
numberwang x y
| x / y ^ 2 <= 18.5 = "a"
| x / y ^ 2 <= 25.0 = "b"
| x / y ^ 2 <= 30.0 = "c"