How do I manage Computer Rage?

Before we get into this topic let’s first establish what Computer Rage is exactly. It’s essentially anger that turns into uncontrollable rage over a malfunctioning computer or any other electronic devices . This results in people verbally or even physically abusing a computer. According to Wikipedia article (and many other sources which can be verified with a quick search on the Internet): “In 2009, a survey was conducted with British computer users about their experiences with computers. This survey found that 54% of respondents reported verbally abusing their computers, and 40% reported that they had become physically violent toward their computers. The survey also found that most users experienced computer rage three to four times a month“.

This may be bit of a sensitive topic for some, but if you’re planning on a long and prosperous career in the software industry or any other industry that requires you to use a computer on a daily basis, you or someone you know will at some point experience Computer Rage. Hence it’s probably a good idea to give it some thought and if you’ve ever experienced it, it’s an even better idea to try and manage it for your own mental health and those around you.

If you were to to go according to pop psychology, you would think that any one experiencing Computer Rage is a psychopath that treats other people in the same way that they would treat a computer when experiencing Computer Rage. Pop psychology even tells us that before dating someone you should first see how they react to working with a non-functioning computer or a slow internet connection. Personally I don’t believe that you have to be a psychopath to experience Computer Rage. Based on the above statistics, I cannot believe that 54% of British computer users are all psychopaths. There must be something else to it.

I’ve searched far and wide for information on Computer Rage and how to manage it. However, I have to say that aside from statistics and basic pop psychology I haven’t really found much value in the materials I’ve read thus far. A this point I have to be honest and say that over the years I have experienced Computer Rage on a few occasions, but fortunately with age and experience I’ve started to manage it much more effectively. So in other words, this advice is coming from someone that has first-hand experience with Computer Rage.

As a disclaimer, I’d like to add that I’m not a psychologist nor a doctor, but instead this is just simple advise from a software developer that has spent a minimum of 8 hours a day in front of a computer for over a decade and has occasionally experienced Computer Rage just like the other 54% of British computers users cited in the study.

Let’s look at some of the reasons that cause Computer Rage:

  • Impatience & unmet expectations: Impatience is an obvious one, but it’s important to think about what causes impatience. Suppose you’re on Holiday and you have all the the time in the world to relax and enjoy your life. There is nowhere that you need to be and there are no deadlines. You’ll probably notice that you and everybody else around you that is on holiday is driving slowly. Suppose you get to a traffic light and there’s one guy in front of you who doesn’t notice that the light has gone green: chances are that you won’t lose your cool but will remain calm and relaxed. Now imagine that you’re back at work and you have to catch a flight for a very important meeting with a customer on the other side of the country. If you miss the flight you miss the meeting and you’ll probably lose the customer. Now imagine you’re running late to the airport and imagine the exact same scenario where the guy in front of you at the traffic lights doesn’t see that it’s gone green. Chances are you’ll lose your cool, start sweating, maybe start cursing and hoot at him. The difference between the two scenarios has nothing to do with the guy not seeing the traffic light going green and everything to do with your expectations. In the latter scenario, your expectation is to get to the airport on time and get to the meeting. When people are driving slowly you realise that the expectation will not be met, which makes you impatient with other people and can lead to anger and even road rage.
  • Feeling helpless: Another major cause for anger and frustration with computers is when you feel helpless to change a situation. This can often happen when something goes wrong with your computer or software and you don’t know how to solve it. This can quickly lead to despair and generally feeling like your whole world is falling apart. Feeling helpless and despair will instinctively draw a fight-or-flight response from most people. Some people will start crying (flight response) while others will get angry (fight response) as a natural knee-jerk reaction to overcome the perceived threat they’re facing.
  • Lack of confidence & anxiety: A lack of confidence can lead to anxiety and anxiety can lead to a lack of confidence. This goes hand-in-hand with feeling helpless. A lack of confidence in your own abilities to troubleshoot an issue can amplify the feeling of helplessness and despair.
  • Existing stress: Working with computers on a daily basis can be stressful in itself. That coupled with additional external stress, either from your personal life or work politics can be prove to be overwhelming and turn into a recipe for disaster. There is only so much weight that one can carry on their shoulders and given long periods of time under heavy stress can make any one reach their breaking point. This can lead to irrational responses and Computer Rage.
  • Fatigue: Working when you’re tired can reduce your level of concentration and patience, which once again can reduce your ability to troubleshoot issues and therefore make you short tempered when things don’t go according to plan.

So here’s my advise for managing Computer Rage:

  • Psychological tips:
    • Manage your expectationsthe first step to becoming more patient is to start managing your expectations and you do that by planning ahead. You know that the traffic to the airport will be bad, hence you should probably leave earlier. If you do end up running late, you should realise that it’s your own fault and just surrender to the impatience and anger you’re feeling. This translates in a similar fashion to slow and unresponsive computers: you should start planning better for your deadlines and keep in mind that in the tech industry anything that can go wrong will go wrong. If you’re going to leave your work for the last moment, you will quickly lose your patience with the computer when it doesn’t behave the way you expect it to behave. Furthermore you should lower your expectations of your computer i.e. you should expect the computer to be slow at times.
    • Avoid working when you’re tired: I know that there are many companies that push for ridiculous deadlines and actively encourage workers to pull all-nighters. But the truth is that working while you’re tired is not in any way productive. Aside from many other negative side effects which I won’t get into in this post, you have to also keep in mind that you will be short tempered when you’re tired. I have never in all my years seen anyone maintain the same level of patience when they’re tired than as when they’re fully rested. Therefore working when you’re tired will without a doubt cause some Computer Rage.
    • Avoid working on an empty stomach: First of all, your brain needs to nutrients in order for you to think properly. If you’re hungry and come up against an issue when working, you will not be able to think clearly and troubleshoot the issue efficiently when you’re hungry. This once again can lead to feeling helpless and and ultimately even anger. This is known as being “hangry“. The reason for it is that not eating will lower your blood sugar levels and according to psychologists “Hunger and hypoglycemia (low blood sugar) are primitive signals known to set off the stress response in a person“. For some people this stress response can escalate into anxiety, depression, anger or all three. This is an evolutionary mechanism designed to put us (and animals) into survival mode in order for us to prioritise finding food. Therefore it is important to not work on an empty stomach if you want to avoid being short tempered when things do don’t go according to plan.
    • Don’t drink too much coffee: There’s a joke in the software industry that developers are machines that convert coffee into code. This may be true because coffee is a stimulant that gets your brain going, but at the same it can escalate anxiety which can turn into anger and being short tempered. So try avoiding getting over caffeinated.
    • Close your eyes, take a deep breath and count to ten: Even if you’ve put all the above measures into place to avoid Computer Rage, there will still be times when your computer will cause you to get angry. For example, the computer could become unresponsive because it is busy processing or perhaps trying to connect to a resource over the network. If you’ve ever run on a treadmill or done the plank exercise, you’ll notice that looking at the odometer or timer can be an excruciating experience where 30 seconds can feel like a life time. You will have probably come to realise that looking away from the odometer or timer and thinking about something else will make the time go faster. The same principle can be applied to dealing with unresponsive computers. If you start feeling irritated, try closing your eyes while waiting for the computer to become responsive. You could also try taking a deep breath and counting to ten while keeping your eyes closed. Nine times out of ten the computer will once again become responsive by the time you’ve opened your eyes.
    • Take a walk: As a last resort, if all else fails and you can feel the onset of anger, you should get up from your desk immediately and take a walk. While being away from your computer try thinking about all the possible causes of the computer malfunctioning. You will probably come up with a few ideas within seconds at which point you’ll be tempted to go back to the computer to try them out. Avoid going back to your computer before you’ve calmed down. Instead, carry on walking and come up with several more ideas. You can go back to your computer once you have a list of ideas and you’ve completely calmed down. You’ll also notice that as you become calmer, the ideas will start streaming in  i.e. your level of calmness and the rate at which you get new ideas are directly proportional.
    • Sort out other problems from your personal life: It is naive to think that problems in your personal life cannot affect your work life. The truth is that we are all human and if you have a personal issue, it can cloud your judgement and your ability to think properly while on the job. For this reason it is important to sort out your personal problems as quickly as possible so as to not affect your ability to work.
    • Practice silent leadership: It’s not always easy to be immune to drama and/or office politics happening at work, but it is important to at least try. The best way to avoid office politics is to practice “silent leadership“. There is a great deal of material out there on silent leadership so I won’t get into this topic except to say that silent leadership is essentially putting your head down and getting to work without complaining, arguing with other people or worrying office politics and drama.
  • Technical tips:
    • Don’t be cheap: This is by far the best and most important advise I can give anyone for preventing Computer Rage. If you’re a knowledge worker and especially a developer that spends at least eight hours a day behind a computer, then you simply cannot be cheap with your hardware. Development tools can be especially resource hungry causing a weak computer to be quickly brought down to its knees. Aside from the drop in productivity of using a slow computer, I can without a doubt say that it would be literally destroying your own mental health and maybe even your life in general. There is absolutely nothing worse than having to constantly wait for your computer to be doing something after every click. Given enough time working under such conditions it can literally drive you into a mental asylum. There are certain things in life that you could and should be cheap on, but a computer is not one of those things. I know that most of the times the companies normally provide you with their own computers to work on and many of these companies that are run by bean counters can indeed be very cheap on the hardware they provide you with. If that’s the case, do yourself a favour and go out and buy the best computer that you can afford. If it comes down to it, sell or downgrade your car if you have to, but purchase a fast computer i.e. your car costs you money while your computer is a tool that helps you make money.
    • Saving you work: One of the main causes for people losing their cool with their computers is when they’ve been working on something for an hour (or more) and all of a sudden something goes wrong with the computer where it freezes, blue screens or applications crash. This can easily lead to feelings of despair with people throwing their toys out the cot. This is in fact the easiest issues to solve by simply getting into the habit of continuously saving your work. Learn your keyboard shortcuts for quickly saving your work. If you’re coding for example, get into the habit of hitting the save keyboard shortcut after every function or line of code that you’ve written. If you get into this habit, you’ll end up instinctively saving your work without even thinking about it e.g. it will become like changing gears in your car, where you don’t even think about it you just do it.
    • Backups: I have personally seen people having meltdowns after documents that have somehow been deleted or their computers crashed without being able to reboot them. It goes without saying that the easiest way to prevent this from happening is to always have backups of everything using one or more of these options:
      • Source Control: You would think that every developer on the planet uses source control, but I have personally seen programmers with years worth of code just sitting on their laptop never having been checked into any repository. Seeing this blows my mind. Even if you’re a single developer working alone without having to collaborate with any other developers, it is crucial that you get into habit of checking in and pushing your code changes to the repository as often as possible. If something goes wrong with your computer or you lose it, you can simply check out your code from the repository and be back in business in no time.
      • External Drives: For very large files that may not be appropriate for source control repositories, I’d advise you to get into a habit of backing up these files to an external drive.
      • Restore Points: Start using  TimeMachine on Mac OS X and System Restore on Windows in order to create restore points. If anything goes wrong you can always restore your machine to a previous state. Personally I love using Apples’ Airport Time Capsule because not only does it serve as a wireless hard drive that I can manually copy files to, but it also performs automatic backups of my entire laptop every day while creating restore points for Time Machine.
      • Cloud Backups: Most operating systems nowadays have some sort of cloud backup feature whether it’s through Google Drive, iCloud, Microsoft OneDrive or even Dropbox. Get familiarised with these tools and save your most important files to the cloud.
    • Knowledge is power: The easiest way to overcome feelings of helplessness and despair when dealing with technical issues is to learn. This obviously doesn’t happen over night, but the more knowledge you have the more empowered you will be to overcome technical issues when they come up. So instead of getting angry and throwing your toys out the cot, you’ll be able troubleshoot the issue with confidence. Keeping this simple rule in mind can help when you feel the onset of anger.. Even if you don’t immediately know the cause of the issue or how to resolve it, you can at least start researching for possible causes and solutions before you lose your cool.
    • Task Manager / Activity Monitor is your friend: The easiest way to start troubleshooting an unresponsive computer is by using Task Manager on Windows or Activity Monitor on a Mac. Nine times out of ten, there will be an unresponsive application that is the culprit. Using Task Manager/Activity Monitor you can view which applications and services are being resource hogs i.e. taking up the CPU, RAM, handling heavy network traffic, or furiously reading and writing to the hard disk. If the application does not respond after a few minutes, you can quickly kill the process and restart the application.
    • Close apps you’re not using: This is all about setting up good habits. I have seen people running 50 or more applications and browser tabs concurrently on their computers. When the computer starts slowing down and becomes unresponsive they seem to be flabbergasted by it. It’s always good practice to try and limit the amount of applications and services that you’re running concurrently. This will free up your resources on your computer and provide more processing power and memory to the applications that are currently in use.
      • Browser tabs: you really don’t need more than a few tabs open in your browser e.g. email, search engine and two or three other web pages. For example, if you have 50 web pages that you’d like to go through, then you really don’t have to keep all of them open in your browser. Instead, rather copy and paste their links into a text file as a reference. When you’re done going through one web page close it and open the next URL.
      • Applications: Get into the habit of saving your work and  closing an application you’re not currently using. Not only does this free up computer resources, but it also makes it easier for you to navigate between the applications without constantly searching through all the clutter. This is essentially similar to having a clean desk because as they say “A cluttered desk is a cluttered mind.”
      • Background Services: On Windows for example, using Task Manager you should get into the habit of regularly looking at all the services that are running and the resources they’re consuming. On Windows for example; if there’s a Windows Service that is running and not being used, then stop the service and change its Startup Type from Automatic to Manual i.e. the service should only start when you manually start it instead of starting up automatically when the computer boots up.

These are all just some basic tips for avoiding Computer Rage and stress in general when working with computers. Keep in mind however, that simply knowing these tips will not help unless you practice them everyday.

Productivity and creativity are like yin and yang

This may be a bit of a controversial topic which many may not agree with, but throughout my life I’ve come to the conclusion that productivity and creativity are a bit like yin and yang i.e. they are often indirectly proportional to each other.

As a kid, when I was in school, I was very good at maths and art. I was either terrible or average at almost all other subjects mostly because they didn’t interest me, but that’s besides the point. Like all students in South Africa, as I got further into high school I needed to chose which subjects to take/keep and which to drop. My father suggested I take a more technical path in my studies, which included maths, science, electrical theory and technical drawing. His reasoning was that a technical path would be more practical in the sense that it’s easier to make a living later in life by doing something technical rather than being a struggling artist, because generally speaking people are less willing or able to pay others to draw pictures. I loved drawing and being creative, but on the other hand, having immigrated to this country with only two suitcases and knowing what it’s like to be poor, I couldn’t dismiss my father’s advice i.e. making a good living weighed heavily on my mind. After much deliberation, I decided to drop art. When I went to varsity, I made the same decision when having to chose between studying Graphic Design and Computer Systems Engineering i.e. combination of software and hardware subjects (programming, electrical engineering, electronics, digital systems etc.). Throughout varsity I spent huge amount of my spare time producing electronic music. Although I loved coding, the feeling I got from making music was like no other feeling I’ve ever gotten in my life; it was like a drug that took over my life. After having started my first job, I once again made the same decision to drop the music in order to focus on coding.

I realized that in order to succeed at a particular thing in life, you often have to sacrifice other activities that you love doing. Therefore, aside from perhaps designing user interfaces and choosing the clothes I buy, I have done little to no exploring of my artistic/creative side ever since I started my career in software development. It is for this reason that not a day goes by where I don’t think about the decisions I have made. However, to this day I still believe that I made the right decisions and here’s my reasoning behind it:

All the way back in high school I realised that as much as I loved drawing I could not imagine being asked to draw/paint on demand for any teacher, lecturer, manager or customer. The same applied to making music; I couldn’t put a track together on demand. I could only do these things when I felt inspired. On the flip side, I could solve an equation, troubleshoot a technical issue or write some code on demand. Unfortunately, to make a living in this world people will expect you to produce on demand not just when you feel inspired. It is for this reason that I believe I made the right decisions in my life given my circumstances.

In the quest to make more money, I could have chosen to become a stock broker, a salesman or accepted a job writing software for banks. But instead I chose a career in software development, writing various kinds of software from mobile, to desktop, web and speech recognition apps for various types of industries. My salary will never come close to that of a stock broker, banker or insurance salesman, but to be quite honest there are limits to how much I’m willing to sell my happiness for.

In my view, software development serves as a perfect equilibrium for my personality: it is a combination of intellectually challenging tasks/features that need to be developed on demand while requiring a certain amount of creativity for designing elegant technical solutions and user interfaces.

This finally brings me to my point, that throughout my life I have often noticed that I am most productive when working on mundane repetitive tasks, while I am least productive on tasks requiring me to be creative; mainly because being creative requires extended periods of time thinking, day dreaming and searching for inspiration. As an example, one will probably find that asking a factory worker to drill holes all day will yield a large amount of productivity, which in turn will increase a company’s profits, but the person’s quality of life and happiness will diminish day-by-day. Inversely, you will find that asking even the most talented painter to create an original and world renowned painting every week/month will not prove to be a very productive endeavour.

In line with Joel Spolsky’s thinking, you can either be a world renowned chef like the Naked Chef or you can be McDonalds: Big Macs vs. The Naked Chef. Although I don’t agree with Joel’s bias towards the Naked Chef, I do believe there are some lessons to be learnt from his analogy. McDonalds’ main appeal to the public isthe speed (productivity) in which they prepare burgers and meals. What is not mentioned in Joel’s post is that McDonalds will always make more money globally than the Naked Chef because it requires less creativity and more productivity. A chef’s success on the other hand is fully dependant on talent and creativity, which cannot be scaled nor can new and original recipes be created on demand. The only caveat with aiming to be a world renowned artist/chef is that very few make it to that level, while most end up living off of coupons and hanging on to their pipe dreams.

So how does this apply to software development teams/companies? Here’s an example of two companies I worked for in the past, both consulting companies. I won’t mention any names, but it’s essentially a comparison of the Naked Chef vs McDonalds.

  • Cowboy Company: a small startup where I was the first employee. It was founded and managed by one of the most hard working, talented and creative software developers I’ve ever met in my life.
    • Work environment:
      • We were all encouraged to have a can-do attitude i.e. nothing is impossible, anything can be done and we can do it over night.
      • There were no boundaries between us and our customers in terms of budgets, time constraints etc. If the customer wanted a product developed that would typically take 6-12 months to develop, we told the customer we could get it done in two weeks at obviously a fraction of the cost that any other company quoted at.
      • Experimentation and hacking was encouraged i.e. software tools, utilities, programming languages, repositories, APIs, SDKs etc. were swapped and changed on a regular basis.
      • Little to no training was offered internally. If you were working on something new and involved a learning curve, you were regarded as an idiot if you asked questions.
      • The day-to-day work environment had zero structure, rules or processes. Thus it was the most chaotic work environment I’ve ever been in. For the first time in my life at the age of 24 my hair started falling out to the point that I was wiping my hair off the keyboard every hour on the hour.
    • Outcome:
      • Company outcome: the company was in existence for only about 18 months before we were told that we’re closing shop.
      • Reasons for the company outcome:
        • If creative people make for the worst employees to manage, then the same creative people make for even the worse kind of managers for the day-to-day running of a company. Here’s why: the process of being creative requires a huge amount of experimentation and trial and error. This experimentation process is unfortunately very counter productive because you’re not walking in a straight line, but rather zigzagging your way to nowhere in the hope that one day you’ll find the pot of gold.
        • Creative people make the worst kind of managers for managing people and budgets. Ensuring that money always comes in and that people get paid their salaries requires structure and discipline. Managing people’s productivity requires rules and methodologies to be followed in order to set expectations because as we all know the most common cause of unhappiness is unmet expectations.
      • What happened to the manager: this highly creative, talented and unstructured man ended up becoming the CTO of the world’s second largest gay social network, which he developed from scratch. Within a few years, they acquired the largest gay social network in the world. Needless to say that he’s become very successful in the end.
  • Structured Company: a large multi-national goliath of a tech company, with very rigid rules and regulations.
    • Work environment:
      • Highly structured and regulated work environment. Everybody had specialised roles knowing exactly what needs to be done with clearly defined goals and expectations.
      • A strong emphasis was put on training and documentation. Everybody was taught everything they had to know in order to get their job done. Asking questions was encouraged and the managers were always happy and enthusiastic about sharing their knowledge.
      • The management of people was pretty good; people were treated with respect, expectations were set and met etc.
      • The software consulting department I reported to was run like a well oiled machine, with projects being delivered on time and within budget. No major surprises ever came about (within the department), and every change introduced was carefully planned out.
      • Everybody was encouraged and directed to follow a straight line to success, which was great in many ways for your own mental health.
      • On the other hand, new ideas, strategies or ways of thinking were strongly discouraged. Internally, the typical company slogan was “this is how we do things around here” or “this is not how we do things around here”. In other words, there was little to no room for creativity or original thoughts … unless if course you were considered someone of importance i.e. you had a VP (Vice President) somewhere in your job title. Putting up your hand in QBRs (Quarterly Business Reviews) and mentioning my concerns and ideas often resulted in being laughed at or told that “you clearly don’t know how this company works”. Coming up with ideas for new apps or ways of generating more money resulted in being told that “it’s not your job to be thinking about that, don’t look to the left or to the right, just look straight ahead and do the job you’ve been hired to do”.
    • Outcome: over the course of a decade the revenues of this goliath of a tech company started dropping year-by-year. Eventually it ended up being cut up into pieces and sold off.
      • Reasons for the company outcome: innovation stagnates in an environment where creativity is choked in favour of productivity. The company stopped innovating and instead only released incremental improvements on their existing products. The people in the highest levels of management believed that the strategies that worked two decades ago will continue to work today. I personally witnessed such managers looking at spreadsheets in QBRs and scratching their heads as to why the revenues were plummeting. All the while blaming the sales people for not pushing more sales, without ever realising that you cannot sell yesterday’s technology for tomorrow’s prices.
      • What happened to the management: the company was acquired by another stagnant company, and they are still conducting their business the same way they always have, all the while still living in fear of their revenues dropping which continue to do so. To this day they still refuse to invest in R&D on certain technology stacks and prefer to purchase, rebrand and resell their partners’ products. Certain components in their hardware products are even purchased from their competitors. Due to these people being focused primarily on productivity and profits, their only concern are the earnings for the next quarter, and then the one after that. Short sightedness and puddle thinking is embedded into the cultures these types of older corporations.

The moral of the story is that companies which purely focus on productivity will always outperform creative companies in the short term, but they will never hit the jackpot. Creative companies on the other hand will always struggle in the short term and many will fall by the wayside, while a small minority of them will hit the jackpot in the long term. In the end it all comes down to high risk high rewards for creative companies and low risk low rewards for productivity focused companies.

On a more personal note, depending on your level in an organisation and your perspective, here’s what you can take away from the story:

  • If you’re an employee: part of growing up and maturing is the ability to come to terms with your own limitations. So you firstly need to know your own strengths and weaknesses and ask yourself whether you’re the creative cowboy type or the structured book smart type of person. Thereafter strive to work in environments where you are surrounded with like minded people. Personally I would advice you to work for a mid-sized company which is still in the process of growing, thereby offering opportunities to be both productive and creative.
  • If you’re a manager: as a manager you don’t (or should not) have the luxury of being biased towards either types of employees. Realise that you may have productive and creative types working for you and an ideal tech company requires both kinds of people i.e. you need the productive people to milk the cows, while you need creative people to invent new cows to be milked. Incentivise people accordingly. For productive types give them tangible goals and deadlines and you’ll probably learn that you’ll have to micro manage them. For creative types, give them a bit of freedom, a generous budget and time to play and experiment.

So summarise: productivity and creativity are indirectly proportional, but ideally they both are required for a tech company to not only thrive in the short term but also stand the test of time. Hence the I believe productivity and creativity are like yin and yang; they’re opposing forces but you still need both.

 

Will software developers continue to be in high demand in the future?

These are some of the trends that I have seen over the years:

  • Data agnostics software: if you’ve ever spent time jumping from project to project developing custom software for various customers’ requirements, you will pretty quickly come to the conclusion that you’re basically developing the same software over and over again and the reason you’re doing it is because each customer has different business rules. So to make your own life easier, you will inevitably start thinking about removing the business logic out of the code and making the software more and more customisable thereby making it data agnostic so that it doesn’t know anything about the data its working with. By developing data agnostic software, you are basically handing over the power and responsibility to your customers enabling them to implement the business rules themselves instead of relying on you to change code every time they change their business rules. Doing this is all good and great for the customer and even for your own company, because you can then resell your software to many more customers without having to code business logic for each new customer. However, the problem is that other competing software companies that are still coding custom business logic will be blown out of the water by you i.e. their customers will now rather just buy your out-of-the-box and customisable software from. The end result being that there will be less and less demand for software developers building custom business applications. That is why for example most corporates prefer implementing large systems like ERP, CRM, WMS, CMS etc. that are trusted and have been proven to work as opposed to developing their own system from scratch. Although these large software systems are more and more business logic and data agnostic, for the time being there will still be a need to have technical people installing and customising these “out-of-the-box” products. However the “technical” people required to do so will be less and less technical i.e. less and less technical skills will be required to perform customisations for each customer.
    • Example: back in the 1990s, if you wanted a simple company website you would have hired a web developer to put together a few HTML pages i.e. Home, About, Contact Us page etc. At some point, some clever guys decided to develop a CMS (Content Management System), which is exactly that: a data agnostic piece of software that doesn’t know or care about what content you’ve got, but it gives you the power to configure it yourself. You would still need an IT guy to perform the configuration and handle the hosting, but you no longer needed a web developer.
  • SAAS (Software As A Service) & PAAS (Platform As A Service) in the cloud: to make matters worse (or better , depending on your perspective), these large systems (ERP, CRM, WMS, CMS etc.) are now being moved into the cloud and offered as a service i.e. monthly payments to access the software online. That means that business people no longer even need technical IT staff to manage the hosting or to install and configure anything because that is now handled by the SAAS providers. Thus, once again making more technical people redundant.
    • Example: at this point the customer no longer even needs a CMS hosted on their own server. Instead they can just create their own website on wordpress.com without having any technical knowledge. If integration with a payment portal is still too difficult, they can even use Facebook Store or shopify.com.
  • Platform agnostic software: I started my career in mobile development, back when the popular operating systems available to develop for were Symbian and Windows Mobile/CE. If someone wanted a mobile app developed, they would have needed to hire a developer to code the app from scratch. Coding an app for Symbian was incredibly difficult with a 6–12 month learning curve, Hence requiring highly skilled Symbian C++ developers. In the company that I was working for, we were developing a .NET Compact Framework to run on Symbian, thereby allowing less skilled .NET developers to write code targeting the .NET Compact Framework and thereafter run that same app on Symbian. The very same people that I was working for ended up starting another company (devicemagic.com), allowing people with limited technical skills to put together a mobile app that will run on any of the popular operating systems like Android and iOS. Once again, if your requirements for a mobile app are relatively simple (data capturing, taking pictures etc.) then you no longer to hire expensive iOS, Android or .NET developers to build the app for you.
  • AI (Artificial Intelligence): at this stage AI is still a baby, but the baby is growing. Once fully grown it will further exacerbate the situation where we might see autonomous software writing code by itself based on your specifications. With AI programming languages will not even be needed anymore because the only reason programming languages exist is to enable humans to define the execution of a program. If the machine is generating the code, it will simply generate binary code.

The moral of the story being that it’s survival of the fittest i.e. the big fish will continue to get bigger by eating the smaller fish. The name of the game is consolidation; of technology, money and power. But to be fair humans have been playing this game since the beginning of time to the point where the little people on the ground get fed up and come out with their pitchforks, after which war breaks out, people die, everything gets destroyed and the survivors start rebuilding everything from scratch thereby starting the cycle all over again. But even knowing this I still can’t stop myself from recoding that function in my code to remove the business logic so that I can reuse it with my next customer.

To answer your question: as long as software still exists in this world, there will always be a need for software developers, but personally I think that the demand will drop in the long term. In a few decades, only the most talented developers will have jobs and they will most likely be working for the big fish, like Microsoft, Apple, Google, Oracle, SAP etc.

Knowing this, what can you do about it if you’re currently a software developer? The answer is; not much … except enjoy the proverbial gravy train that you’re currently on.

In the interim: focus on the following caveats of the above mentioned trends/technologies:

  • Security & Trust: there are still plenty of companies out there that are hesitant to move their data and infrastructure to the cloud. This especially applies to financial institutions which hate the idea of putting their money (numbers) into the cloud hosted by a third party. Their concerns being centred around the security of their data and whether or not they can trust the cloud hosting providers with their data/money.
  • Control: many of these companies are still run by control freaks that want highly customised software that works exactly the way they wanted to work. They will never be able to get that with so called “out-of-the-box” solutions. Thus they will still require highly skilled developers. For how long … only time will tell.

For the future: plan ahead by deciding between two different paths:

  • Technical: if you decide to stay the course and focus on being technical, then you better make sure that you are part of the best of the best. Average won’t cut it if you’re planning on working for one of a handful of tech companies in the world. Keep in mind that age will catch up with you sooner or later, and competing with twenty something year old guys that have no family, commitments or a life for that matter, will prove to be incredibly difficult.
  • Business: alternatively, you can become more business minded, worrying less about the details of software and more about how to sell it or manage the people implementing it.

What is it like working with extremely intelligent people?

In terms of intelligence, it’s an absolute pleasure working with intelligent people. Everything runs smoothly and everything just works. You should always surround yourself by people that are smarter than you are, because it’s really wonderful to have people that you can learn from and count on. Working with less intelligent people is more difficult because they may not easily grasp certain concepts and you will require more patience and management skills to make up for their lack of intelligence i.e. relative to your own intelligence. However everybody can teach you something, and everybody has different sets of skills, and sometimes perhaps for financial or practical reasons you may need to also work with people that are less intelligent than yourself. You should be kind to these people and learn from them too.

Having said that, one must keep one thing in mind that if you’re working with someone that is less skilled/intelligent, you can always teach this person what they need to know, but you cannot change an a**hole.

So the more important question is not whether or not someone is intelligent, but rather what kind of personality do they have … and more importantly, how wise they are. You will find narcissistic people on both sides of the intelligence spectrum and you need to stay away from them at all costs, regardless of whether they are geniuses or idiots.

  1. First prize: intelligent people that have empathy and wisdom.
  2. Second prize: less intelligent people that have empathy and wisdom.
  3. Third option: intelligent people that do NOT have empathy and/or wisdom. Work with these people only if you’re forced into it, in which case try to limit your interactions with them as well the power you give them. If you cannot limit their power or limit your interactions with them, then rather don’t bother.
  4. Fourth option: less intelligent people that have no empathy and/or wisdom. This shouldn’t really be an option. It’s best to stay clear of these people for the sake of your own mental health.

All of the above “options” should be relative to your own intellectual and emotional intelligence.

How to become a very good programmer

Firstly, I’ll tell you what you shouldn’t do to become a good programmer. No matter what anybody tells you, if you spend too much time doing any of the following things it might improve your skills a little, but you will never be a good programmer:

  • You won’t become a good programmer by just reading books.
  • You won’t become a good programmer by memorising code and algorithms. Programming is about thinking not about remembering. You can have the best memory, but if you’re not thinking for yourself you’ll NEVER be a good programmer i.e. we have computers and the internet to remember things for us, so there’s no need for you to remember anything – you just need to know where and how to find the information you need.
  • You won’t become a good programmer by writing single functions and algorithms from the books you read i.e. writing stupid bubble sort functions and similar useless algorithms.
  • You won’t become a good programmer by testing other people’s code e.g. whether testing software by using it or writing unit tests etc.
  • You won’t become a good programmer by reading and debugging other people’s code. This might help in the short term, but only if the other person’s code is well written so you can pick up some good habits, but using bad code as examples will teach you bad habits that you will ultimately have to unlearn. In the long term spending too much time reading and debugging other people’s code will be detrimental to your growth.
  • You won’t become a good programmer by allowing others to micro manage you … because again programming is about thinking for yourself.

There’s only one way to become a good programmer: you have to take on a project and start it and finish it yourself from beginning to end. Don’t focus too much on reading books, syntax, algorithms and functions i.e. don’t focus on details at the beginning. Simply sit and think about an app/system you’d like to develop for yourself … something you’d really enjoy building and using for yourself. Ask your friends/family/lecturers for an idea if you need to, but you must start the project from scratch and finish it by yourself from beginning to end. Once you’ve gotten the idea, keep the idea in your head and be passionate about finishing it … from there everything will slowly start to come together. You will have features in your mind that you want to implement at which point you will start researching how to implement this or that. It’s only at this point that you should pick up a book or search the internet for answers about how to implement this cool feature you’ve thought of doing. As your app/system grows you will slowly by yourself start thinking about writing cleaner code to maintain it in the future to make your own life easier.

It is only through the process and struggle of bringing your own idea to life that you will learn how to become a good programmer. You should see yourself as an artist, not just as guy who writes code to get it to compile and run. If you’re only working on someone else’s code, or only reading books etc. you will lose your motivation very quickly and you will never find or utilize your talent.