Last week David and Ryan were working together on a new Basecamp feature that provides a link to a milestone on a to-do list if that list had a related milestone. We’ve always displayed a link to the list on the milestones screen, but we didn’t display a link to the milestone on the to-do list.

After David and Ryan made it work, Ryan wanted to run the implementation by me for a visual review. We ended up making some minor changes to the implementation based on this review and we wanted to share the quick iterative process we used to get there. Ryan and I often work this way either via IM or Campfire.

While the position of the implementation changed, the biggest change was the wording. I think this is a great example of how words can make or break a feature.

Here is the relevant part of the chat transcript with inline images from that conversation (some parts were removed since they weren’t relevant to this post). You’ll see we spent just under an hour on this:

(14:35:37) Ryan Singer:

(14:36:07) Ryan Singer: screenshot i just sent shows milestone dates on a to-do list
(14:36:09) Ryan Singer: the feature is done and working
(14:36:12) Ryan Singer: look good to you?
(14:36:29) Ryan Singer: the date links to the attached milestone perma
(14:40:27) Jason Fried: checking in a sec, sorry
(14:41:14) Jason Fried: Looks good. Have you thought about the use case implications so we’re covered?
(14:41:38) Jason Fried: Like, quick thinking here…
(14:41:49) Jason Fried: If there are 5 lists attached to a milestone…
(14:41:57) Jason Fried: This would say they are all done on the same day
(14:42:04) Jason Fried: all due, that was
(14:42:10) Ryan Singer: each list would be due on the same day, yep
(14:42:41) Jason Fried: What are some of the pushback points we’re anticipating?
(14:43:02) Ryan Singer: “i use milestone attachments for [some crazy custom reason] and this doesn’t apply to me”
(14:43:30) Ryan Singer: possibly: “i want dates on my to-do items, not the lists themselves”
(14:44:12) Ryan Singer: i don’t think the first point is a problem
(14:44:18) Ryan Singer: there are always people who bend the interpretation
(14:44:51) Jason Fried: What if the date thing said “On or before March 14”
(14:44:59) Jason Fried: I think the ridigness of it may be a problem.
(14:45:03) Jason Fried: And this could soften that a bit
(14:45:05) Ryan Singer: a bit long, but i like that idea
(14:45:52) Ryan Singer: hm kinda long
(14:46:08) Ryan Singer: becomes harder to interpret too
(14:46:22) Ryan Singer:
(14:46:35) Jason Fried: After seeing this the issue I have is the rigidity of it.
(14:46:42) Jason Fried: This list IS DUE on this date
(14:46:45) Jason Fried: Well, not really
(14:46:57) Jason Fried: It’s part of a milestone that is due on this date.
(14:47:07) Jason Fried: So I’d like to see if we can figure out how to present that reality a bit better
(14:47:15) Ryan Singer: good point
(14:47:18) Ryan Singer: ok
(14:47:41) Jason Fried: how about
(14:47:47) Jason Fried: “Due by 14 February”
(14:47:49) Ryan Singer: “Milestone: 14 February”
(14:48:03) Ryan Singer: nice that Due by is shorter
(14:48:05) Jason Fried: Milestone may work. Ties it into the feature.
(14:48:07) Ryan Singer: shorter is better for this flag
(14:48:12) Ryan Singer: even “Milestone: 10 Feburary” is quite long
(14:48:13) Jason Fried: Due by is less rigid than “Due on”
(14:48:15) Ryan Singer: doesn’t hold together as well
(14:48:16) Ryan Singer: yeah
(14:48:37) Ryan Singer: Due by looks pretty good. screenshot coming
(14:48:46) Jason Fried: I don’t know if it’s obvious how much softer it is than “on” but it’s better
(14:48:49) Ryan Singer:
(14:49:12) Jason Fried: not as clear as I’d like it, but clearer.
(14:49:16) Jason Fried: May be the best option
(14:49:26) Jason Fried: Still wonder if we can do a little better
(14:50:09) Ryan Singer: different idea, could kill the text label entirely
(14:50:12) Ryan Singer: just “14 Feburary” after the title
(14:50:30) Ryan Singer: not as clear, but more room for interpretation too
(14:50:32) Jason Fried: I think that’s less clear
(14:50:36) Jason Fried: And too grey
(14:50:41) Ryan Singer: yeah k
(14:50:42) Jason Fried: grey area, that is
(14:50:51) Jason Fried: Big compromise that doesn’t really work for anyone
(14:51:32) Ryan Singer:
(14:52:49) Jason Fried: eh
(14:52:52) Jason Fried: not really feeling that one
(14:52:59) Ryan Singer: due by is the best so far
(14:53:09) Ryan Singer: also clearest
(14:53:10) Jason Fried: This could work…
(14:53:15) Jason Fried: “re: Milestone on 10 Feb”
(14:53:34) Jason Fried: My only concern with “due” is that it’s pretty confident.
(14:54:02) Jason Fried: “re: Milestone date” injects some flexibility, but maybe it’s too grey area.
(14:54:26) Jason Fried: (gonna keep all these mocks and this IM conversation for an SvN post)
(14:54:37) Ryan Singer: good thing about “due” is it makes an opinion about what associating w/ a milestone means
(14:54:53) Ryan Singer: heh i also have a post created already full of the step by step of mocking and coding the link too
(14:55:05) Jason Fried: awesome.
(14:55:14) Jason Fried: Due is good, but it’s an opinion 5 years after the fact.
(14:55:20) Jason Fried: That’s why I’m pushing back a bit.
(14:55:30) Jason Fried: We’re not introducing attachments today
(14:55:37) Jason Fried: If we were I’d feel better about it.
(14:56:15) Ryan Singer: i think if we don’t go with “Due..”
(14:56:26) Ryan Singer: it would be better to explore moving the link below the title into the list description area
(14:56:30) Ryan Singer: and actually naming the milestone or something
(14:56:41) Jason Fried: right like…
(14:56:54) Ryan Singer: like “For Ship v1 of the Home Page, 14 Feburary”
(14:56:57) Jason Fried: “This to-do list is attached to a “milestone name” which is due on 14 Feb”
(14:57:23) Jason Fried: I feel like we don’t lose anything with that direction.
(14:57:27) Jason Fried: And we gain clarity
(14:57:52) Ryan Singer: i don’t think we’re missign clarity with Due. we just might be makign the wrong assumption for certain people
(14:57:53) Jason Fried: Could give it a little calendar icon treatment too just to reinforce the milestone-ness of it.
(14:58:01) Ryan Singer: don’t want to get too loud with it
(14:58:03) Ryan Singer: otherwise it’ll dominate the list
(14:58:11) Jason Fried: It won’t dominate if it’s small and grey
(14:58:18) Jason Fried: I think we can definnitely make it look great
(14:58:23) Jason Fried: “Due” is a pretty strong assumption
(14:58:38) Jason Fried: The milestone is due, but this list isn’t really due.
(14:58:43) Jason Fried: BTW: I think this addition is great!
(14:58:54) Jason Fried: I just want to make sure we package it up correctly.
(14:59:01) Jason Fried: Subtlety has a lot of meaning here.
(14:59:10) Ryan Singer: i wish i knew better how our customers are using this feature
(14:59:41) Ryan Singer: i’m not sure how much it would change our approach
(14:59:52) Ryan Singer: i just don’t like to go with the generic option simply because we don’t know what to do
(14:59:56) Jason Fried: I think “This to-do list is attached to a “milestone name” which is due on 14 Feb” below the name of the to-do is totally workable and a nice solution.
(15:00:01) Ryan Singer: i’ll try that
(15:00:03) Ryan Singer: and we’ll see how it feels
(15:00:16) Jason Fried: I think it’s generic but clear.
(15:00:21) Jason Fried: And that’s better than generic and murky
(15:00:34) Jason Fried: “This is a list that is attached to a milestone that is due on this date”
(15:00:45) Jason Fried: Generic (in a good way) and clear (in a good way)
(15:00:47) Ryan Singer: i’ll play with it
(15:00:49) Jason Fried: k coo
(15:15:50) Ryan Singer:
(15:17:07) Jason Fried: “See milestone” is a bit too action oriented to me. Are we really saying “see this” or just that you should “know this” ?
(15:17:29) Jason Fried: So I wonder if we can run with something like…
(15:17:36) Ryan Singer: i’m looking for short
(15:17:41) Jason Fried: “Related to”
(15:17:44) Ryan Singer: “This to-do is attached…” is too long
(15:17:56) Jason Fried: “Attached to”
(15:18:22) Jason Fried: “See milestone” asks you to do something and it takes you away from this page.
(15:18:34) Jason Fried: A statement of what it is seems like it may work better.
(15:18:47) Ryan Singer: i like how it includes the word “milestone”
(15:18:52) Jason Fried: Yeah I agree
(15:18:56) Ryan Singer: could do “For milestone:”
(15:18:58) Jason Fried: “Related to milestone: Blah blah blah”
(15:19:05) Jason Fried: “For milestone” could work.
(15:19:18) Ryan Singer: “related to” sounds like we don’t know what this feature is for
(15:19:23) Jason Fried: K.
(15:19:32) Ryan Singer: it does look pretty good tho
(15:19:44) Ryan Singer:
(15:20:08) Jason Fried: In the app we say “Attach to…” so I wonder if we should repeat that here.
(15:20:18) Ryan Singer: i would rather change the language in the other places
(15:20:23) Ryan Singer: “Attached to” looks weird here
(15:20:28) Ryan Singer: and it doesn’t fit with the normal expectations of what an “attachment” is
(15:20:36) Jason Fried: K. We don’t want to change the language elsewhere so we’ll consider that one a no go.
(15:20:39) Jason Fried: Umm…
(15:20:46) Jason Fried: “Related to” works for me.
(15:20:47) Jason Fried: Cause it is.
(15:20:51) Ryan Singer: actually the edit dialog says this:
(15:20:55) Ryan Singer: “Does this list relate to a milestone?”
(15:20:58) Jason Fried: Perfect
(15:20:59) Jason Fried: Done
(15:21:02) Ryan Singer: done
(15:21:13) Ryan Singer: i’ll see how this plays when there is a list description
(15:21:16) Jason Fried: k coo.
(15:21:17) Ryan Singer: otherwise we’re close i think
(15:21:19) Jason Fried: Yes.
(15:21:26) Jason Fried: And I think it will be appreciated.
(15:21:32) Jason Fried: At least there’s a reciprocation now.
(15:21:35) Ryan Singer: yeah. nice little “integration” feature
(15:21:40) Jason Fried: Before only Milestones listed other stuff.
(15:21:42) Jason Fried: Yeah
(15:21:45) Ryan Singer: has a flattening effect too
(15:21:48) Jason Fried: Does
(15:21:48) Ryan Singer: more access to more data from more places
(15:21:51) Jason Fried: Agree
(15:21:52) Jason Fried: I like it.
(15:27:36) Jason Fried: A good lesson… I think these changes add all the value of the original vision, but make clearer and more palatable for more people.
(15:27:46) Ryan Singer: agree
(15:27:49) Jason Fried: Small tweaks too. Mostly words, a little positioning.
(15:30:32) Jason Fried: When are we planning on deploying this?
(15:30:48) Ryan Singer: we can deploy as soon as we feel it’s done. there is no underlying code change. only templates
(15:30:58) Jason Fried: k coo