Ayende @ Rahien

My name is Oren Eini
Founder of Hibernating Rhinos LTD and RavenDB.
You can reach me by phone or email:


+972 52-548-6969

, @ Q c

Posts: 6,128 | Comments: 45,551

filter by tags archive

MactoLet’s CREATE an Inmate

time to read 3 min | 476 words

After spending so much time talking about the application, I think that you can understand why this isn’t going to work:


For a start, we don’t create an Inmate. A prison just doesn’t have this concept.  Second, the process of accepting a new Inmate into the prison is a pretty complex one. An Inmate can come from one of several sources. It can be a guy just brought in from the streets or it can be an Inmate from another prison (and then it depends on where he came from), etc.

Each scenario requires different workflow for processing the new Inmate. And what about errors in the process? For example, let us say that your prison is rated for 14 years old and up, and suddenly you have at the gate an officer with three 13 years old that were just arrested with suicide belts. Legally, you aren’t allowed to hold them. Practically, you can’t really let them go. (For the record, that was a real scenario that happened, I had to get a judge to approve this.)

Here is another true story. I sent an Inmate to another prison, and along the way, the escort manage to forget the documents (those are the oh so important that the sky fall down and smacks you in the head if you don’t have them) in my prison. They got to the other prison around 2 AM, and only then discovered what happened. I was able to convince that prison’s commander to hold the guy until morning in his prison until I can send the documents.

Validation? You make me laugh. This is the real world, and if your system reject an Inmate that the prison commander has decided that he is going to accept… well, that Inmate still has to be tracked, but now it is offline and probably done on the back of some envelope somewhere. The system may alert and warn, but it cannot deny people.

Welcome to the real world.

Overall, the process for accepting a new inmate is quite simple, at its core. You need to be able to identify the Inmate, and you need to have a valid chain of lawful incarceration. The first might be a problem (the guy might have been just picked up, have no idea and refuse to identify himself). The second might also be a problem, as we have seen above.

But eventually, we have the Dossier for an Inmate, which contains name, id, picture and the chain of lawful incarceration. The next step is to place the Inmate in the prison, and that is a whole different key of gunpowder. I’ll discuss that in my next post.

More posts in "Macto" series:

  1. (17 Aug 2011) Looking at warrants
  2. (15 Aug 2011) Talking to nasty people
  3. (11 Aug 2011) Counting is The Holy Grail
  4. (10 Aug 2011) Getting Started, you never forget your first Inmate
  5. (08 Aug 2011) The Main Screen
  6. (03 Aug 2011) Warrants are for fools
  7. (01 Aug 2011) Non functional concerns, you are a legal system
  8. (28 Jul 2011) And it goes on your permanent record, too!
  9. (27 Jul 2011) Once more from the top, I swear I had a few more over there
  10. (26 Jul 2011) Day to day life
  11. (22 Jul 2011) Where is the Inmate anyway?
  12. (19 Jul 2011) Let’s CREATE an Inmate
  13. (12 Jul 2011) Creating The Model
  14. (05 Jul 2011) The boundaries of a prison
  15. (25 Jul 2009) An end to end sample



This is going to be interesting. A process oriented app, instead of a plain-data oriented one.


Feed me more....I can't wait 3 MORE days.


So it sounds like you have two categories for a valid chain of lawful incarceration.

-an inmate who's route to the prison who has followed a lawful process and meets criteria for the specific prison.

-an inmate who has arrived at the prison without meeting following a lawful process or does not meet specific criteria for the prison.

Are there accepted words used to describe the two categories ?


@KingsDad Agreed, I read this with great interest; nothing kills inspiration more than "Northwind and Pubs".

BTW for those who aren't in on the joke, "Ani Ashem" means "I am guilty".

A friend of mine spent time as a prison chaplain in Israel. Inmates used to whine to him "Ani (I am) chaf(innocent) mipesha(of crime)" i.e innocent. Their fellow inmates would laugh and say "Ata (you) chai (live) mipesha (from crime)".


What program did you use to create the ui mock?

Bogdan Marian

@Thomas It looks like Balsamiq (http://balsamiq.com/)

Paul Hatcher

This reminds me of a discussion with a previous boss about structured vs unstructured work. Lots of computer systems assume that they are about structured work, i.e. hard and fast rules that can be applied at the point of data entry, but most of the interesting stuff is around unstructured work, i.e. data arrives as and when and you have to capture it.

Eventually, you move onto a structured workflow, but it's important not to put arbitrary barriers in the way of data capture, otherwise it just ends up on post it notes attached to the monitor until the (inflexible) system can accept it.

The one I remember this from was a freight forwarding system where you had to have the ability to raise a new job based on just an airway bill number or a shipping container, didn't even know the client yet, but then as more information arrives the job gets filled in. The barrier in this case was invoicing - there's certain requirements to invoice and it wouldn't let you progress the job until all these were met


Paul that feeds into the discussion on codebetter on task based UIs - be interesting to hear your thoughts there


Ayende Rahien

Adrian, Yes, the first is an Inmate. The second is not an Inmate :-)

Ayende Rahien

Thomas, The mockups were created by Balsamiq


Ayende - it sounds like we are developing a good customer - developer relationship :|

I don't understand... it sounds like you are talking about 3 categories.

  • Inmate - 'happy path' if there is such a thing
  • Inmate - the dude who we can't reject as the prison commandant has decided to accept , but still needs to be processed to turn him into an lawfully incarcerated prisoner or rejected (the guy the who meets @Paul Hatcher's status of waiting for additional info till he can be dealt with as an inmate)
  • Not an inmate - the dude who the police\army just have to deal with and put into a lock-up for 24hrs until he sobers up (not sure if this is a common thing, but as I have just been out for drinks it seems like a reasonable scenario).

Or is this just the random tangent that developers seem to get attached to... if so why ?

Ayende Rahien

Adrian, The first two are Inmates. We don't currently hold the full authorization for the second case, but that authorization exists, just out of the system (typically, we hold someone and get an Arrest Warrant from one of the Captains in the prison itself, or the paperwork is on its way, etc). The last case doesn't happen for our prison, but if it would, he would also be an Inmate.

Comment preview

Comments have been closed on this topic.


  1. The worker pattern - 10 hours from now

There are posts all the way to May 30, 2016


  1. The design of RavenDB 4.0 (14):
    26 May 2016 - The client side
  2. RavenDB 3.5 whirl wind tour (14):
    25 May 2016 - Got anything to declare, ya smuggler?
  3. Tasks for the new comer (2):
    15 Apr 2016 - Quartz.NET with RavenDB
  4. Code through the looking glass (5):
    18 Mar 2016 - And a linear search to rule them
  5. Find the bug (8):
    29 Feb 2016 - When you can't rely on your own identity
View all series


Main feed Feed Stats
Comments feed   Comments Feed Stats