Subscribe via RSS

The 7 Software “-ilities” You Need To Know

Filed Under Architecture

In the world of software architecture there are many “-ilities” you must take into consideration with every project. Prioritizing them is necessary because the client will optimistically ask that you do all of them. To help you out, here is a quick list outlining my top 7 default “-ilities” in the order that I prioritize them:

1. Usability

Software usability can be described as how effectively end users can use, learn, or control the system. Some questions to ask yourself to determine usability might be:

  • Is there a UI metaphor that I am using to help users adapt? (for example, the ‘desktop’ is a metaphor)
  • Are the most common operations streamlined to be performed quickly?
  • Can new users quickly adapt to the software without help? (is it intuitive?)
  • Do validation and error messages make sense?

2. Maintainability ( or Flexibility / Testibility)

The definition of maintainability [for me] implies how brittle the code is to change. As a result, I tie the terms flexibility and testability into the overall maintainability of a project.

  • Does the entire team understand the code base or does knowledge islands exist?
  • Is the code throughly regression tested?
  • Can modifications to the project be done in a timely manner?

3. Scalability

Scalability is the ability for your program to gracefully meet the demand of stress caused by increased usage. In short, ensuring your program doesn’t slow or bust when pounded by more users than you originally anticipated.

  • What is your current peak load that you can handle?
  • How many database records can create until critical operations slow down?
  • Is the primary scaling strategy to “scale up” or to “scale out” — that is, to upgrade the nodes in a fixed topology, or to add nodes?

4. Availability (or Reliability)

How long the system is up and running and the Mean Time Between Failure (MTBF) is known as the availability of a program.

  • How long does the system need to run without failure?
  • What is the acceptable length of time for the system to be down?
  • Can down times be scheduled?

5. Extensibility

Are there points in the system where changes can be made with (or without) program changes?

  • Can the database schema flex to accommodate change?
  • Does the system allow Inversion of Control (IoC)?
  • Can end users extend the system (scripts, user defined fields, etc)?
  • Can 3rd party developers leverage your system?

6. Security

I shouldn’t need to go into this one but to be thorough I like this definition of security: the measure of system’s ability to resist unauthorized attempts at usage or behavior modification, while still providing service to legitimate users.

  • Does the system need user or role based security?
  • Does code access security need to occur?
  • What operations need to be secured?
  • How will users be administered?

7. Portability

Portability is the ability for your application to run on numerous platforms. This is can include actual application hosting, viewing, or data portability.

  • Can the data be migrated to other systems?
  • For web applications, which browsers does your web app support?
  • Which operating systems does your program run on?

Obviously, this is not an exhaustive list. There are many many more (Backwards compatibility, Interoperability, and Reusability to name a few).

What is your “-ilities” list? Which do you prioritize over others?

RSS Icon

  Don't miss a drop! Subscribe now via RSS or email.

Comments

6 Responses to “The 7 Software “-ilities” You Need To Know”

  1. The 7 Software “-ilities” You Need To Know on November 12th, 2007 2:19 am

    […] unknown wrote an interesting post today on […]

  2. writeboxes » The 7 Software “-ilities” You Need To Know on November 12th, 2007 2:55 am

    […] read more here […]

  3. eliteab » Blog Archive » The 7 Software “-ilities” You Need To Know on November 12th, 2007 4:52 am

    […] all the details here […]

  4. Jeremy N on November 13th, 2007 3:34 pm

    My personal top ten order of importance when making decisions regarding the “-ilities”

    1. Usability
    2. Maintainability (Changeability/Flexibility / Testibility)
    3. Security
    4. Functionality* – Ability of the system to do the work for which it was intended
    5. Extensibility
    6. Upgradeability* – Does/can the system have an relatively smooth upgrade path
    7. Availability (or Reliability)
    8. Scalability
    9. Lookibility * – Generally shiny and nice looking 🙂
    10. Portability

    With that said sometimes the client’s needs/wants dictate a modification of the priorities, but even if they mess with the majority of the other priorities Maintainability (Changeability) and Security almost always remains high the list even if the client is working to “push them down.”

    * – “Ility” that has been added to the list from the original {codesqueeze} “-ilities” list.

  5. CodeForge » Blog Archive » 7 Software “-ilities” que deberias conocer. on January 7th, 2008 9:50 am
  6. Elegant Code » Is NoSQL Finally Going Mainstream? on February 12th, 2010 5:00 pm

    […] schemas. Just store the objects you want and worry about other things like the so-called ‘ilities’ and being able to respond to business needs in a timely […]

Max Pool - © 2024 - {codesqueeze}. Sycorr Banking Solutions