What are the three most important things non-programmers should know about programming?
Written by Brian Knapp, credit and reprint CodeCareerGenius
Teaching You Tools to Become Empowered
To build a successful business and career, you must always keep up with changes in the IT Marketplace. AWS, Office 365, LinkedIn, Sales Force, SEO, Social Media are just a few examples of where knowledge is a huge factor for success.
Training with HSG addresses your knowledge gaps and provides you with the requisite tools to outpace the competition.
Since you asked for the three most important things that non-programmers should know about, and I’ve spent most of my career working with more non-programmers than programmers, I have a few interesting things that would help.
Number One - It Is Impossible To Accurately Estimate Software Projects
No matter what is tried. No matter what tool, agile approach, or magic fairy dust people try to apply to creating software… accurately predicting software project timelines is basically impossible.
There are many good reasons for this. Usually, requirements and feature ideas change on a daily/weekly basis. Often it is impossible to know what needs to be done without actually digging into the code itself. Debugging and QA can take an extraordinary amount of time.
And worst of all…
Project Managers are always pushing for shorter timelines. They largely have no respect for reality. So, at some point they are given estimates just to make them feel better about planning.
No matter how much planning and estimation you do, it will be wrong. At best it will be directionally correct +/- 300% of what you estimated. So, a one year project could actually take anywhere between 0 and 5 years, maybe even 10 years.
If you think I’m joking, look at how many major ERP projects that go over time and over budget by many years and many hundreds of millions of dollars. Look at the F-35 fighter jet software issues.
Or in the small, you can find many cases where a “simple bug fix” can take days when you thought it was hours.
All estimates are lies made up to make everyone feel better. I’ve never met a developer or manager who could accurately estimate software projects even as well as the local weatherman(or woman) predicts the weather.
Number Two - Productivity Is Unevenly Distributed
What if I told you that in the average eight hour work day the majority of the work will get done in a 30 minute timeframe? Sound crazy?
Well, for most programmers there is a 30–90 minute window where you are extraordinarily productive. We call this the flow state.
Being in the flow state is wonderful and amazing. It often is where the “magic” of building software happens.
Getting into flow can be difficult. It’s akin to meditation in that you have to have a period of uninterrupted focus of say 30 minutes to “get in” the flow, but a tiny interruption can pull you right out.
Now consider the modern workplace environment. Programmers work in open office environments where they are invited to distract each other constantly.
Most people need a 1–2 hour uninterrupted block to get 30–90 minutes of flow.
Take the 8 hour day and break it in half with a lunch break, and then pile in a few meetings and all of a sudden you are lucky to get one decent flow state session in place.
That is why I say that most of the work that gets done happens in a 30 minute timeframe. The other 7–8 hours are spent being distracted, answering email, going to meetings, hanging around the water cooler, going to the bathroom, and trying to remember what you were working on before all these distractions.
Ironically, writers, musicians, and other creative professionals have their own version of this problem and largely work alone and away from other people when they are creating new things.
Someday the programming world might catch on, but I doubt it.
Even if this became obvious, it doesn’t sit well with most companies to think that programmers would be paid for an 8 hour day and only be cranking out code for a few hours on a good day. Some corporate middle manager would probably get the bright idea to have mandatory flow state training where a guru came in and then there would be a corporate policy from a pointy haired boss mandating that programmers are now required to spend 8 hours a day in flow state and they must fill out forms to track their time and notify their superiors of their flow state activities, otherwise there would be more meetings about the current flow state reports not being filed correctly and that programmers were spending too much time “zoning out” instead of being in flow.
Thus, programmers would spent 7–8 hours a day pretending to be in flow state, reporting on their progress, and getting all their work done in 30 minutes of accidental flow state somewhere in the middle of all that flow state reporting.
If you think I’m joking about this, I’m not. I promise you this is what would happen to any company of more than 2 employees. (Even the ones run by programmers.)
Number Three - It Will Cost 10x What You Think
Being a programmer, I get a lot of non-programmers telling me about their brilliant app ideas. Usually they want me to build something for free and are so generous as to pay me up to 5% of the profits for doing 100% of the work.
Their ideas are just that good.
Now, I gently tell them that I’m not interested in building anything for free.
At that point they get angry, but a few ask how much it will cost. I give them a reasonable (and very incorrect) estimate of what it would cost to create the incredibly simple version of their app idea.
Let’s say it’s some number like $25,000.
They look at me like I’m a lunatic, and so I explain how much it costs to hire a contract programmer and how long it will actually take. For example’s sake let’s say it is $100/hr for 250 hours.
To be clear, these are made up numbers and bad estimates (See Number One for details…)
In actuality, to build the actual thing they want might cost $250,000, or even $2,500,000 when it’s all said and done.
Building software can be incredibly complex and expensive. What most people can’t wrap their head around is the fact that a company like Google, Apple, or Microsoft has spent BILLIONS of dollars to create something that looks so simple to the end user.
Somehow, the assumption is that something that looks simple is cheap and fast to build.
Building something simple and easy for the end user is time consuming and expensive. Most people just can’t do it.
So, the average person with a brilliant app idea thinks it will cost a few hundred or maybe a few thousand dollars to make and it will be done in a weekend is so off the mark it’s not worth considering their ideas.
And programmers are too eager to play along with these bad ideas (by making bad estimates and under charging for their time) that this notion is perpetuated to the average non-programmer.
So, a good rule of thumb is that software will cost 10 times as much as you think and take 10 times as long to finish.
And that leads to a bonus point…
BONUS - Software Is Never Done
Programmers never complete a software project, they only stop working on it. Software is never done.
I’ve worked at many software companies and I’ve never seen a software project “completed”.
Sure, software gets released and used. But, it is always changing, being updated, bugs get fixed, and there are always new customer requests for features.
Look at your favorite software and you’ll quickly realize how true this is. Facebook, Instagram, Google Search, Google Maps, GMail, iOS, Android, Windows, and now even most video games are never done.
There are small armies of developers just trying to keep all the software you use every day stable and bug free. Add on the fact that there are always feature requests, small changes, and new platforms to deal with, it’s a treadmill.
So, the only way out of the game is to stop working on software. At that point, the software begins to decay until it is no longer secure or supported.
Think about old Windows 3.1 software or maybe old Nintendo Cartridge video games. The current computers and video game consoles don’t even attempt to run that software anymore.
You can’t put an old video game in your new Nintendo Switch and have it “just work”. That is what happens when you think software is done.
When programmers stop working on software the software starts to die. The code itself is probably fine, but all the other software keeps moving forward until your software is no longer compatible with the current technology.
So, those are the four most important things that non-programmers should know about programming. I know you asked for only three, so I hope the bonus was valuable to you as well.