Dragon Security

The 7 Software “-ilities” You Need To Know.

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:

A
Alanis Swanepoel
3 min read
Share:

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?
  1. Maintainability ( or Flexibility / Testability)

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 do knowledge islands exist?
  • Is the code thoroughly regression tested?
  • Can modifications to the project be done promptly?
  1. Scalability Scalability is the ability of your program to meet the demand of stress caused by increased usage gracefully. In short, ensure 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?
  1. 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 downtimes be scheduled?
  1. 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?
  1. Security I shouldn’t need to go into this one. Still, to be thorough, I like this definition of security: the measure of a 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?
  1. Portability Portability is the ability of 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 (Backward compatibility, Interoperability, and Reusability, to name a few).

Share:

Subscribe to our newsletter

Get the latest security insights and updates delivered to your inbox.

Comments

Comments are moderated before being published. Sign in to have your comments approved immediately.

Related Posts

Dragon Security

Container security 101

By now, it’s apparent to cybersecurity teams everywhere that the ­proverbial container genie is out of the bottle. Developers have widely embraced containers because they make building and deploying so-called cloud native applications simpler than ever. Not only do containers eliminate much of the friction typically associated with moving application code from testing through to production, but application code packaged up as containers can also run anywhere. All the dependencies associated with any application are ­included ­within the containerized application. That makes a containerized application highly portable across virtual machines or bare metal servers running in a local data center or on a public cloud.

Dragon Security

How to customize your App and still get all updates

In this article, we will look at several problems that every developer who uses a boilerplate can face: How to customize your project How to store it in your repository and still be able to pull all updates All app templates and boilerplates are built to implement all possible functions and features. But, of course, it’s real life, and somebody would like to change your nice fonts, colors, pictures, icons, add more pages, change the structure, database models, change styles, et cetera, not to mention the code base itself. In our boilerplate, we were trying to find a golden mean - to make everything as much customizable as possible but leave some things not changeable at all - to avoid unnecessary clutter. So, it’s only about technologies: we use PostgreSQL for the database and ReactJS/Bootstrap for the front end.

We value your privacy

We use cookies to enhance your browsing experience, serve personalized ads or content, and analyze our traffic. By clicking "Accept All", you consent to our use of cookies.