Have you ever wondered what it is that slows software projects? What is it that makes some projects miss their deadlines and others succeed?
What is the key item that puts spanners in the works on some development endeavours? Surely there is something, that if we handle can prevent these key failures in the software industry.
Well I know there is! And this is the subject of my post.
Now I am not going to give you a theory. Too many do that kind of thing and think that’s the be all and end all. If I give an answer to this question, it needs to be able to be tested, and if applied does it speed up development? or not? If it does it’s correct in that case, if not it’s false.
And if it’s correct in a majority of cases then we have a good rule we can live by and get results from.
Ok so I have stuck my neck out, but let’s see how this can be.
Imagine you are working on a software program. It is meant to read a text file and count the words in it. Simple application. So you look up the Application Program Interface (API for short) for opening and reading text from files. Seems simple enough. Ok so program is coded and now we run it as a test. What happens is you get a message printed on the console: “An error occurred”.
Ok so it’s not working. Well what now… Ok let’s use the most famous debug method (printf). Before I call the API to open the file I print a message, then after it is opened I print a message. After running again I see the first message, and then the famous “An error occurred” message.
Good so it must be that my API call to open the file has an error. But what am I doing wrong? Ok so i go back to the documentation and try figure out what can be causing this error. I see that if the file does not exist it gives a “File not found error”. Ok then let’s rename the file it is trying to open and run the program again. It now says “File not found”. Good I see a link between the existence of the file and the program. Ok let’s rename it back and run again just to see. “An error occurred”!!!! Ok what can this be?
Anyway I get desperate and decide to delete the file to see what happens then. Guess what? When I try to delete the file I get a message “Insufficient privilege”! I re-login as an administrator and try to run the program, again, and….. it worked!
What is the lesson we can learn from the above? I must agree that the example is a bit fabricated, but I guarantee you that the scenario painted above can be exactly reproduced in almost all languages! I know I’ve been there and suffered that!
Now imagine if after the first run above the error message was “Unable to open file ‘Test.txt’ for reading: The calling user does not have read access”. I would have fixed the attributes of the file or my privileges and got the program working. It would have saved me 20 minutes.
So the incomplete error reporting caused me to lose 20 minutes of valuable production time.
Here is another scenario: My boss asks me to write a mobile app, using IOS and the Swift programming language. I have only programmed in C and C# and am very keen to try something new. Who hasn’t had this happen?
Anyway I download my “Beginners guide to Swift”, and “Programming using Cocoa Touch” and get reading and practicing. Takes me two weeks, and I can shakily put together a recipe creation app. I find Swift has many idiosyncracies I am unfamiliar with, so I make quite a few errors.
Well after a few weeks I get something together.
If I was an IOS Swift programmer it may have taken me two days, here I caused a loss of 10 working days. Sure the next project will be quicker, but in this iteration I lost 10 days, and that is what I’m interested in here.
What is the common denominator of the above two scenarios?
Insufficient data! and maybe incorrect data!
Now I want you to scan through all the software problems and failures you have had and see what you can find. I bet you it was either insufficient data, or incorrect data or both!
In my whole career in software, I have seen this to be the sole cause of all slows and failures.
This is a sweeping statement, but it is true!
It can manifest itself in many ways. One subtle way is a programmer not having a correct definition or understanding of something. If that is the case I guarantee you that that programmer will be slow and fail in anything that has to do with that misunderstood concept or thing.
Unfortunately bad error reporting is the main culprit in this area. In my business I threaten to fire programmers who fail to give detailed and explicit error messages. If the message should not be visible to end users, then it damn well better be written to some log file.
All the big software providers fail in this area, but I am afraid big culprits are Oracle! Their most famous one is the error “Illegal character”, if you put in a closing semi-colon on some statements, but not on others! They don’t even tell which character is illegal! I have spent literally weeks getting software to work on the Oracle database, when in Microsoft SQL Server it took only a few days! All the slows were caused by this insufficient data, and sometimes incorrect data.
Detailed and precise error reporting quickly removes all mysteries, saves time and gives confidence.
On the other side of the coin, get yourself skilled as much as possible, clear all the terms involved to full understanding, and get all the data you can in the subject you are programming in. That way you will be fast and create great software products.