I've been doing software development for the better part of two and a half decades and in that time I've spent a lot of time and money learning a few lessons on how to get a project moving in the right direction. It has been a fairly expensive learning process but if you are involved in software development, you will likely sympathise with me.
Ada Lovelace is widely regarded as the first computer programmer, but the first program to be written and stored in a
computer memory to be run later was in 1948 in the University of Manchester.
It’s been 73 years since then and you might think it’s strange that after all these years of software development it seems more and more difficult to predict the outcome of a software project.
Why is it that even with the best developers and project managers, the whole thing still has a good chance of spiraling out of control? To counter that you spend more time, add more developers and spend more money – somehow hoping for a successful outcome.
Or, you watch the news and hear stories of our governments building websites that are basically a database showing a performance rating of the nation’s school’s, that cost tens of millions of dollars to put together. The cost beggars belief. Why is this happening?
Software development can seem like black magic when it comes to trying to estimate and predict the time and resources to get completed.
The key reason for this uncertainty is more often than not, the software being developed is unique, it's never been done before. This is usually the reason for the project in the first place. And even for systems that do the same things as other software systems that already exist, it is more than likely that the developers doing it have never done it before, or at the very least, the design of the new system is somehow better than the existing one, making it unique again.
If it was already developed, sitting on the shelf ready to launch, you wouldn't spend the money getting the software developed. You'd just buy the pre-built software.
It may seem simple, but this is the fundamental reason why software development projects are hard to estimate: you are estimating something that's never been done before. And, more importantly, you simply don't know what you don't know yet.
Until you find out what you don’t know which occurs only while you are developing the project, you will never know what it is that you don’t know. It doesn't matter how closely you look at it, how thoroughly you scope the project or whatever, there will still be elements that are unknown to you.
The Misconception of the Software Developer
There is a fundamental misconception around software development and I think it is a flaw in industry thinking. Software developers are considered by many to be similar to tradesmen or builders. And that their primary function is take a plan for some desired structure and write code like a tradesman would lay bricks or put up walls or install the windows or the roof or whatever.
That is a misconception of what a software developer is and does... "What would you say...you do here?".
In software development the thing that lays the bricks and installs the windows is actually the computer. The computer takes the overall plan that was created by the software developer and turns it into an operational piece of software. And if you want that to happen faster, you throw more computer at it and it will go faster.
The software developer, if you want to use this analogy, is more like an architect. The architect generally has a more flexible cost when you develop a house. You might go to an architect and say 'Hey, I want a house built.' You then ask 'How much?' The answer would be 'What do you mean, how much? You haven't even told me what you want in the house!'
So then you proceed to give them a really broad outline, you talk about how you want it over two levels, how many rooms, bathrooms, toilets, it has to have an open plan kitchen and a rain shower. There should be a door on the front and back and locks on the doors to provide security. There should be a roof and, oh yeah, I want a bed.'
'Well,' the architect says 'I don't do beds, but I can make a space for the bed.' And so it goes.
The architect is trying to determine the design. And commonly the questions the architect asks are things like; 'What sort of fixtures do you want?’ ‘Will it be a 10-story house or do you want a single story?’ ‘How many bedrooms do you need?’ ‘Do you want gold plating on the doors and walls and windows?’ ‘What style of house do you actually want?’
A software developer is doing exactly the same thing, asking questions to draw this information out so they understand the software they need to build.
Now before going to the architect for the full house design, you might first go to a concept architect or hire someone to draw concept sketches to show the visual outline of the house you want designed and built. This is like hiring a UX developer and creating wireframes or a prototype for a software project, giving a broad idea of the project.
Like the architect, the software developer then creates complete architectural plans for the entire project based on the concept. To get the detail needed, the software developer goes back and forth with the customer showing them the plan as it progresses, asking if each room suits the purpose and aesthetic they wanted. Maybe the kitchen needs a higher ceiling or more space for appliances and so forth. The developer is the one finding out that “the toilet won't fit over there, so we're going to have to move it here”. And “when we do that we'll have to rearrange these other bits to make everything connect properly”.
Once the plan is written, construction is fairly straightforward. And if you take those plans to any builder, he will probably be able to give you a reasonably accurate quote for construction. Because they have finite plans. They know this door will fit in this spot because it's been drawn at that size. They can look through a catalogue of windows and know the costs of the windows and the walls required because they are exactly specified.
Usually, the only time you're going to run into budget overruns is when the site has an unknown condition or some outside factor that changes things like the type of material you wanted to build with is no longer available or the like.
Just like in building a house, once you have your application designed by your software developer, you can then get a pretty accurate quote as to how much it will cost to build and run by computers.
It's the architect who goes through all the steps to determine how to construct a house. And that role in software development is the Software Developer.
If you have that understanding when you're building something, that software developers are the architects and aren't doing the building of the software, that's the role of the computer, it changes your viewpoint of the software development team and what they need.
It puts you in the correct mindset of 'Well, I'd better keep communication as high as possible' and it gets you thinking that you'd better clarify as many unknowns as possible, as soon as and fast as possible so the developer can go ahead and do their job to get you the plans that you need.
This is also true if you are buying a house off-the-plan, based on existing designs from a major builder. You are not paying for someone to plan out the features you want.
It’s the same with a WordPress plug-in when building a WordPress site.The cost is very minimal because many of the unknowns have already been discovered and overcome.
And when that’s understood, you will find yourself and your software developers in a much better state of mind, each understanding the role of the other. As a result projects are generally easier to work through, saving both time and money.
The Axioms of Software Development - Part 2
Type less when using Git on the command line with gitsh
The Axioms of Software Development - 1 of 4
reinteractive is Australia’s largest dedicated Ruby on Rails development company. We don’t cut corners and we know what we are doing.
We are an organisation made up of amazing individuals and we take pride in our team. We are 100% remote work enabling us to choose the best talent no matter which part of the country they live in. reinteractive is dedicated to making it a great place for any developer to work.
Webinars are our online portal for tips, tricks and lessons learned in everything we do. Make the most of this free resource to help you become a better developer.
The Ruby on Rails Installfest includes a full setup of your development environment and step-by-step instructions on how to build your first app hosted on Heroku. Over 1,800 attendees to date and counting.
The Ruby on Rails Development Hub is a monthly event where you will get the chance to spend time with our team and others in the community to improve and hone your Ruby on Rails skills.