Admin for nothin', design for free.

June 1, 2013 Andrew Bruce

This week’s blog post contains scenes from the ancient Greek tragedy Oikonomia, previously thought to be lost. It begins with a dance. In the dance, the product manager is conducting an iteration planning meeting with his developers (or LOLDEVs in the ancient tongue). The product owner, YOLOPO, makes an appearance towards the end. She wants a new feature. The drama proceeds:

Act I, Scene I

YOLOPO: The gods have decided that we will send out emails when people haven’t interacted with our service for a while. We’d better make it happen.

ROFLPM: OK we can totally do that. I’ll write a story for it.

Act I, Scene II

ROFLPM: So, we’ve been discussing this story for a while now. We probably need some control over the various factors involved. What do you loldevs think?

LOLDEV: An automatic admin interface is easy to install. It Just Works™. Add a line to your Gemfile and you’re done! Who has the time to write all those repetitive screens anyway?

ROFLPM: Perfect! Now anyone with access to the admin interface has direct access to those models you’ve been writing that do all the work! Rails developers bring so much free stuff.

LOLDEV: Never mind all that. How should we break down this enormous story?

ROFLPM: Well, it’s a biggie, and you loldevs are going to spend too much time away from master before we see any progress, so we’d better break it into three:

  1. the first story is about an admin user being able to change a time limit in the automatic admin interface
  2. the second story has a customer using the system, and then not using it for the configured amount of time from the first story, and an administrator expecting a value to appear in the automatic admin interface when that time is up
  3. the third story has an administrator changing the aforementioned value in the automatic admin interface and a user receiving an email

LOLDEV: Great! That means we can do as YOLOPO wants and parallelize our team to build stuff faster. One pair of loldevs can add the time out setting, another pair can work on getting the value to appear in the automatic admin interface, and yet another pair can work on dispatching the email.

Act II, Scene II

LOLDEV1: Phew! We finally finished that set of stories. It’s a shame we had so many integration problems, but at least it’s done now. Plus, the admin interface is so easy to use that YOLOPO can mess around with it all she likes.

LOLDEV2: Yeah I heard she really likes being able to see all the data and play around with different things.

LOLDEV3: Hmm, there’s something I don’t like about that, but I can’t put my finger on it.

LOLDEV1: What?

Act III, Scene IV

ROFLPM: Hey, remember that feature about sending emails to users when their accounts haven’t been used for an arbitrary amount of time? Well, YOLOPO says it doesn’t work anymore.

LOLDEV: Oh, I think YOLOPO will find that it does.

ROFLPM: Nah-ah! I changed the send_email_soon attribute to true and nothing happened!

LOLDEV: You’re not still using that old thing? We moved email sending to the controllers because we were randomly sending emails to people with active accounts and our test suite was slow and…

ROFLPM: Oh, OK then what do I do now?

LOLDEV: You have to sign up and then pretend it’s the future.

ROFLPM: How do I do that?

LOLDEV: Well, there’s an attribute on every user that you can change in the admin interface.

ROFLPM: Perfect!

About the Author


Building Crash-Proof Applications the YAGNI Way
Building Crash-Proof Applications the YAGNI Way

I’m a YAGNI’ist. I’m vigilant against over-engineering. I will seek out and destroy over-engineered, antici...

Incremental refactoring
Incremental refactoring

Refactoring is an extremely important part of the process of developing software. It’s what makes your code...

SpringOne 2021

Register Now