Ayende @ Rahien

Unnatural acts on source code

What questions should you ask at the beginning of a project?

Regardless of the actual project, I usually ask the following questions.

  • Scalability Requirements - How many users are we expecting?
    Expressed as users per day. As part of that, however, we also need to consider spikes in traffic, and if we need to handle them.
  • Distribution Requirements - How many data centers are we going to run on? How many machines?
    Numbers I want to hear: 1, a few, lots.
  • Security Requirements
    • Authorization Requirements - Role based? Data driven? Dynamic? Rule based?
    • Sensitive data - Do we store any? If so, how secure do we need to make it?
  • Physical Deployment Layout - DMZ? Inside firewall? Different components in different zones?
  • Regulatory Requirements - Are we required to meet some regulation? If so, what are the requirements in the regulation?
  • Monitoring - How often? To whom?

It is not so much the answers that I am looking at, it is the discussion the posing this question that is the really interesting part.

Comments

Steve Smith
11/14/2008 08:10 PM by
Steve Smith

I especially like this part:

"how secure do we need to make it?"

Too often, users give requirements like "The application must be secure." which is not a valid requirement. Unless the application is turned off and stored in an impenetrable vault.

Being willing to have a discussion about the amount of security that the data deserves, and the tradeoffs that means, is extremely important (assuming the customer cares about security at all, as financial institutions tend to).

Alex Simkin
11/14/2008 08:48 PM by
Alex Simkin

Role based? Data driven? Dynamic? Role based?

You mentioned role based twice, How about to change second one to claim set or permission set based?

Peter Ritchie
11/14/2008 08:49 PM by
Peter Ritchie

"The application must be secure" is not a requirement. If you're given something like that, that means they don't know how to write requirements and it's your job to communicate with the stakeholders and domain experts to define and clarify the requirements.

1 question: What does "Success" mean for this project?

2 question: What does "done" mean?

All other questions are refinements of those two. If you can't get them to define success you'll never satisfy the end-users.

I would definitely include in my questions at the beginning of a project if there are defined requirements. Also, have they budgeted time and money to engineer those requirements over the life of the project.

Other requirements-clarifying questions:

What is the vision for this project

What is the scope of this project

What is the charter for this project

What are the user classes and characteristics

Are there any design and implementation constraints (may include physical deployment and regulatory requirements)

What are the performance requirements

What are the safety requirements.

Christopher Bennage
11/14/2008 09:25 PM by
Christopher Bennage

I also ask

"How quick is the turn around time with your billing department?"

:-)

Ayende Rahien
11/14/2008 09:49 PM by
Ayende Rahien

Alex,

Role based and Rule based.

That was a typo.

J Healy
11/14/2008 10:12 PM by
J Healy

Seems as though the contextual 'framework' you're searching for or wanting to discuss is pretty thoroughly covered by guys like J.D. Meir and others up on the MSDN Architecture site and at similar such sites at IBM. Meier's Arch Cheat Sheet isn't a bad starting point: http://tinyurl.com/6qfjc5

Success_And_Done
11/15/2008 03:59 AM by
Success_And_Done

@Peter

Yeah buddy. Everything is a variation of these two criteria - unless you want to get sued or fired.

Daniel Fernandes
11/15/2008 07:12 AM by
Daniel Fernandes

Too many times I have dealt with agile developers who vehemently do not want to ask themselves those kind of questions at the beginning of a project. I had the bad experience of such a project where it took the company about 4 months so that I could roughly figure out what was the overall goal of the system. I call this the 30,000 ft view of a project and I think this has an important place in agile because without a big fat document this is the next cheapest way of knowing what the hell is going on.

I do like Peter Richie's questions. And I may add something more, a colleague once said that until developers are made aware of what kind of reports the system is supposed to be able to produce then the data requirements are not clear enough.

Bunter
11/15/2008 03:28 PM by
Bunter

First question I always ask is "do we really want to do this project". Second is "if we are going to take this project, who will be the experts and what knowledge will they provide".

I sure like Peter's questions, usual problem is to dive into technicalities without seeing the actual goals driving all things in the project, including technical ones.

ps: Sure, my definition "beginning of the project" goes a bit more earlier stages. Semantics.

Steve Sheldon
11/15/2008 04:52 PM by
Steve Sheldon

"Scalability Requirements - How many users are we expecting? "

Asking how many users is an utterly useless measurement.

Does Starbucks give a rip about how many concurrent customers they have in their store?

No.

They're more concerned with "How many coffees do you sell per hour?" , "How many cappucinos do you sell per hour?", "How many iced drinks do you sell per hour?"

You know how long it takes to pour a coffee, make a cappucino or an iced drink. Using that, you know how many staff and how many espressor machines you should have to handle the volume.

The same with software. It is not about users. It's about things which happen.

Ayende Rahien
11/15/2008 09:06 PM by
Ayende Rahien

Steve,

Users is a good metric because it force the project owner to think about this.

There is generally a direct correlation between the system load and the number of users.

Remember, I am not interested in NUMBERS, I care about what order of magnitude I need to deal with

Dirk
11/17/2008 11:18 AM by
Dirk

How about Disaster recovery?

Comments have been closed on this topic.