{"id":265,"date":"2013-12-24T03:02:43","date_gmt":"2013-12-24T03:02:43","guid":{"rendered":"http:\/\/shirishranjit.com\/blog1\/?page_id=265"},"modified":"2024-03-03T13:57:47","modified_gmt":"2024-03-03T18:57:47","slug":"the-7-software-ilities-you-need-to-know","status":"publish","type":"page","link":"https:\/\/shirishranjit.com\/blog1\/technical-posts\/the-7-software-ilities-you-need-to-know","title":{"rendered":"The Properties of Engineering Systems ( a.k.a \u201c-ilities\u201d )"},"content":{"rendered":"<p>These are properties of engineering systems.<\/p>\n<ol>\n<li>Quality<\/li>\n<li>Reliability<\/li>\n<li>Safety<\/li>\n<li>Flexibility<\/li>\n<li>Robustness<\/li>\n<li>Durability<\/li>\n<li>Scalability<\/li>\n<li>Adaptability<\/li>\n<li>Usability<\/li>\n<li>Observability<\/li>\n<li>Interoperability<\/li>\n<li>Sustainability<\/li>\n<li>Maintainability<\/li>\n<li>Testability<\/li>\n<li>Modularity<\/li>\n<li>Resiliency<\/li>\n<\/ol>\n<p>In software engineering, following are most used \u201c-ilities\u201d.<\/p>\n<p>1. Usability<\/p>\n<p>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:<\/p>\n<p>Is there a UI metaphor that I am using to help users adapt? (for example, the \u2018desktop\u2019 is a metaphor)<br \/>\nAre the most common operations streamlined to be performed quickly?<br \/>\nCan new users quickly adapt to the software without help? (is it intuitive?)<br \/>\nDo validation and error messages make sense?<br \/>\n2. Maintainability ( or Flexibility \/ Testibility)<\/p>\n<p>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.<\/p>\n<p>Does the entire team understand the code base or does knowledge islands exist?<br \/>\nIs the code throughly regression tested?<br \/>\nCan modifications to the project be done in a timely manner?<\/p>\n<p>3. Scalability<\/p>\n<p>Scalability is the ability for your program to gracefully meet the demand of stress caused by increased usage. In short, ensuring your program doesn\u2019t slow or bust when pounded by more users than you originally anticipated.<\/p>\n<p>What is your current peak load that you can handle?<br \/>\nHow many database records can create until critical operations slow down?<br \/>\nIs the primary scaling strategy to \u201cscale up\u201d or to \u201cscale out\u201d \u2014 that is, to upgrade the nodes in a fixed topology, or to add nodes?<\/p>\n<p>4. Availability (or Reliability)<\/p>\n<p>How long the system is up and running and the Mean Time Between Failure (MTBF) is known as the availability of a program.<\/p>\n<p>How long does the system need to run without failure?<br \/>\nWhat is the acceptable length of time for the system to be down?<br \/>\nCan down times be scheduled?<\/p>\n<p>5. Extensibility<\/p>\n<p>Are there points in the system where changes can be made with (or without) program changes?<\/p>\n<p>Can the database schema flex to accommodate change?<br \/>\nDoes the system allow Inversion of Control (IoC)?<br \/>\nCan end users extend the system (scripts, user defined fields, etc)?<br \/>\nCan 3rd party developers leverage your system?<\/p>\n<p>6. Security<\/p>\n<p>I shouldn\u2019t need to go into this one but to be thorough I like this definition of security: the measure of system\u2019s ability to resist unauthorized attempts at usage or behavior modification, while still providing service to legitimate users.<\/p>\n<p>Does the system need user or role based security?<br \/>\nDoes code access security need to occur?<br \/>\nWhat operations need to be secured?<br \/>\nHow will users be administered?<\/p>\n<p>7. Portability<\/p>\n<p>Portability is the ability for your application to run on numerous platforms. This is can include actual application hosting, viewing, or data portability.<\/p>\n<p>Can the data be migrated to other systems?<br \/>\nFor web applications, which browsers does your web app support?<br \/>\nWhich operating systems does your program run on?<br \/>\nObviously, this is not an exhaustive list. There are many many more (Backwards compatibility, Interoperability, and Reusability to name a few)<\/p>\n<div class=\"twttr_buttons\"><div class=\"twttr_twitter\">\n\t\t\t\t\t<a href=\"http:\/\/twitter.com\/share?text=The+Properties+of+Engineering+Systems+%28+a.k.a+%E2%80%9C-ilities%E2%80%9D+%29\" class=\"twitter-share-button\" data-via=\"\" data-hashtags=\"\"  data-size=\"default\" data-url=\"https:\/\/shirishranjit.com\/blog1\/technical-posts\/the-7-software-ilities-you-need-to-know\"  data-related=\"\" target=\"_blank\">Tweet<\/a>\n\t\t\t\t<\/div><div class=\"twttr_followme\">\n\t\t\t\t\t\t<a href=\"https:\/\/twitter.com\/shiranjit\" class=\"twitter-follow-button\" data-size=\"default\"  data-show-screen-name=\"false\"  target=\"_blank\">Follow me<\/a>\n\t\t\t\t\t<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>These are properties of engineering systems. Quality Reliability Safety Flexibility Robustness Durability Scalability Adaptability Usability Observability Interoperability Sustainability Maintainability Testability Modularity Resiliency In software engineering, following are most used \u201c-ilities\u201d. 1. Usability Software usability can be described as how effectively &hellip; <a href=\"https:\/\/shirishranjit.com\/blog1\/technical-posts\/the-7-software-ilities-you-need-to-know\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":198,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-265","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/shirishranjit.com\/blog1\/wp-json\/wp\/v2\/pages\/265"}],"collection":[{"href":"https:\/\/shirishranjit.com\/blog1\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/shirishranjit.com\/blog1\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/shirishranjit.com\/blog1\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/shirishranjit.com\/blog1\/wp-json\/wp\/v2\/comments?post=265"}],"version-history":[{"count":12,"href":"https:\/\/shirishranjit.com\/blog1\/wp-json\/wp\/v2\/pages\/265\/revisions"}],"predecessor-version":[{"id":2683,"href":"https:\/\/shirishranjit.com\/blog1\/wp-json\/wp\/v2\/pages\/265\/revisions\/2683"}],"up":[{"embeddable":true,"href":"https:\/\/shirishranjit.com\/blog1\/wp-json\/wp\/v2\/pages\/198"}],"wp:attachment":[{"href":"https:\/\/shirishranjit.com\/blog1\/wp-json\/wp\/v2\/media?parent=265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}