I am writing a series of posts that summarizes some of the insights I have gained while working in the Professional Services/IT Consulting world.
My goal with this series to increase awareness of important aspects of projects, promote improved thinking about projects, and ultimately help you deliver projects successfully.
You can read or view all the posts in this series through this link.
Insight: Software is a precision business
When you have developed software for some time, some things become very clear. Software will do exactly what you want it to do.
When we think deeply about software, we need to realize that it is all about 0s and 1s. We manipulate 0s and 1s (and occasionally NULLs!) and we transport 0s and 1s over the wire. It is easy to lose track of this fact as we have built enough high-level programming languages, libraries, APIs, technologies, and tools that we never have to deal with 0s and 1s directly. Just like reality, the Os and 1s are always lurking in the shadows and never go away (even if we try hard to wish them away)! This is the gravity for software projects. You have to contend with this no matter what.
What does all of this signify? Programmings forces us to be extremely precise in stating what we want to accomplish.
Let us take a regular use-case. Consider an online banking login page that asks users for their username and password and allows them to access their account information.
Here are the various decisions that a software team needs to make.
- What constitutes a valid username? Can it be 50, 100, or 250 characters long? Can it include numbers, spaces, or special characters? What special characters can be allowed? Are there other restrictions?
- What constitutes a valid password? Should users be forced to change their passwords every 3/6/12 months? How many attempts should the system allow before we lock the users’ account? What happens after the user account is locked?
- What is the exact error message we need to display to the user if a problem occurs? What will be the font size and position of this message? Should we even display an error message? When should we hide the message?
- What is the font size for the username/password label? What should we call these fields? Are we referring to these fields consistently throughout the application?
- Should the application support multiple browsers? If so, what browsers and what exact versions should we support?
The login page may seem to be a “simple” page on the surface. However, we soon realize that there are tons of decisions that have to be made. Each decision affects the size, scope, cost, and effort involved in completing the project. To make matters interesting, we have only scratched the surface! We have not discussed Security, Performance or Usability aspects for the page.
We need to make these decisions “consciously” as this will lead to a product that can delight our Customers/Clients. Can we ignore such decisions? Nope! One of the biggest challenges with software is somebody “eventually” makes these decisions! ;->
Let us take username. Let us say we decide not to establish the field length for username. At the time when the database modeler/programmer defines the field, she/he will set the field length! A decision is made for the product regardless of whether you agree with it or not! That is one of the reasons we need to be aware of what we are doing!
This brings up three important questions:
- Is the right person making the decisions that help us be successful – Creating a product that delights our stakeholders or at least meets their expectations?
- Are we making decisions consciously?
- Do we understand the impacts of our decision?
In a field that demands precision, our decision making better be very good!