Ayende @ Rahien

It's a girl

Hibernating Rhinos Practices: Design

One of the things that I routinely get asked is how we design things. And the answer is that we usually do not. Most things does not require complex design. The requirements we set pretty much dictate how things are going to work. Sometimes, users make suggestions that turn into a light bulb moment, and things shift very rapidly.

But sometimes, usually with the big things, we actually do need to do some design upfront. This is usually true in complex / user facing part of our projects. The Map/Reduce system, for example, was mostly re-written  in RavenDB 2.0, and that only happened after multiple design sessions internally, a full stand alone spike implementation and a lot of coffee, curses and sweat.

In many cases, when we can, we will post a suggested design on the mailing list and ask for feedback. Here is an example of such a scenario:

In this case, we didn’t get to this feature in time for the 2.0 release, but we kept thinking and refining the approach for that.

The interesting things that in those cases, we usually “design” things by doing the high level user visible API and then just let it percolate. There are a lot of additional things that we would need to change to make this work (backward compatibility being a major one), so there is a lot of additional work to be done, but that can be done during the work. Right now we can let it sit, get users’ feedback on the proposed design and get the current minor release out of the door.

Comments

Sean Kearon
02/06/2013 11:02 AM by
Sean Kearon

How do you document your designs?

Ayende Rahien
02/06/2013 11:03 AM by
Ayende Rahien

Sean, Blog posts :-), emails, those sort of things. We rarely do formal design documents.

Kristof Claes
02/06/2013 11:22 AM by
Kristof Claes

Do have a post planned on how you introduce new employees to the codebase?

jgauffin
02/06/2013 11:35 AM by
jgauffin

I through that you were going to say "I force them to read this blog" ;)

Chanan Braunstein
02/06/2013 12:15 PM by
Chanan Braunstein

Maybe somewhat off topic, but the new TrarnsformResults looks great! I never would have known about because I find it really hard to keep up with the google group and often miss stuff like that. IMO, It would be helpful if you posted threads that discuss upcoming changes, features, suggestions to the blog or ravendb.net - I would love to be able to see and sometimes respond to these exciting new features.

Sean Kearon
02/06/2013 12:36 PM by
Sean Kearon

Ayende - I like it!

Two quotes that have stuck with me for years are Fowler (in UML Distilled) saying "do enough design" (but no more), and "use the source, Luke" from my Delphi days - they used to ship the VCL source so you could learn from reading it. Wonderful!

Dan
02/06/2013 03:17 PM by
Dan

When doing specs for user interface features I find that modelling the interaction between the UI and the high level API is the best way to start. This way, if you need to discuss changes on either side, you can easily think about how it effects the other.

Also, impressive use of the word percolate :)

Ayende Rahien
02/06/2013 04:51 PM by
Ayende Rahien

Chanan, What you see there is a design only. It isn't implemented yet. Once we have that implemented, you can be sure I'll be blogging about it and that we will have the docs for it.

Ayende Rahien
02/06/2013 04:51 PM by
Ayende Rahien

Dan, Why impressive percolate ?

Chanan Braunstein
02/06/2013 05:00 PM by
Chanan Braunstein

Yes I know. I think it would be useful to have a page somewhere that has a link to all those idea threads so that they can be commented on prior to implementation, just like in that thread you posted from Transform Results.

Ayende Rahien
02/06/2013 05:15 PM by
Ayende Rahien

Chanan, That is why we have the mailing list for. We post several such items a week, this is a big one sure, but we seek feedback on a lot of issues. It isn't practical to post to too many places.

Comments have been closed on this topic.