Climbing software mountains with fake perfectionists

Have you ever developed software for a client that constantly seems frustrated with the software you’re developing; someone that is continuously complaining and berating you for every little thing that isn’t perfect or throwing their toys out the cot whenever something doesn’t go according to plan? At first glance you might think that this person is a perfectionist with high standards, which in some cases may even be true. However, in my experience there are two kinds of perfectionists. The first type is the hands-on craftsman who is incredibly hard on himself, constantly finding flaws in his own work and continuously striving to improve the quality of what they’re building. This person may also be hard on their subordinates, criticising their flaws and setting high standards for them to meet. The second type is the one who never gets involved in the details nor does he do any of the work himself, but easily finds flaws in other people’s work and proudly proclaims to be a perfectionist. If you ever do come across a piece of their work you quickly realise that it’s anything but perfect. In other words, this second type is fake perfectionist. A fake perfectionist is someone who has high standards/expectations of other people without having a clue of what it actually takes to achieve those standards or meet those expectations i.e. a spectator who expects to see a lot of goals for the money they’ve paid to watch the game, but never having played the game themselves. In this post I’m going to discuss why these people are the way they are and how to go about mitigating some of the issues encountered when dealing with them.

Designing and developing software products is like any other endeavour; it requires a high level of skills, a lot of planning, hard work and continuous problem solving for an endless list of problems that need to be solved along the way. The end goal cannot be reached overnight and therefore also requires a high level of resilience and patience. The people undertaking these endeavours also need to be paid for their efforts which requires huge amounts of money to sustain the endeavour. There are two kinds of people in every endeavour: the people who get it done and the people who pay to get it done in the hope of getting a return on their investment i.e. the pot of gold at the end  of the rainbow. To use an analogy, you can think of these endeavours as climbing mountains. Lots of people want to get to the top of a mountain, but not many people do. The reasons for wanting to get to the top of the mountain is what differentiates the people who do versus the ones who don’t.  Some people want to get to the summit for the glory i.e. to be able to say that they’ve done it. Others only want to get to the top to see what the view is like from above. Some might even believe that there’s a pot of gold at the top of the mountain and therefore feel the urge to go after it. Unfortunately most of these people will never reach the top of the mountain without assistance and the reason for is is that they’re focused on the end goal without understanding what it takes to achieve it i.e. they see the summit of the mountain without seeing the actual mountain they would have to climb. On the other hand there are those that do make it to the summit. The difference with those that do make it to the summit is their genuine love for mountain climbing i.e. they’re in love with the process not with the end goal. Being in love with the process is what gives them the motivation and resilience to keep going despite the pain and struggles which they have to endure i.e. they are mentally prepared to endure the pain because they enjoy the process.

Using the mountain climbing analogy, you can think of the software developers as the mountain climbers and the business people as the ones paying them to help them get to the summit. The developers are the ones who are in love with process and all its struggles and obstacles while the business people are the ones who only want to get to the summit for the pot of gold and the glory. I thoroughly believe that this divergence in their way of thinking and feeling is the root of all conflicts and failed products or projects. Imagine a rich businessman that pays a mountain climber to help him get them to the top of a mountain. The mountain climber lays out the plans in terms of the route they will take, the weather that can be expected on each day, as well the equipment and other resources that will be needed. Unfortunately, things don’t always go according to plan in the real world. The one reason being that there are millions of variables to think about and even the best and most experienced mountain climbers will not be able to foresee every single point of failure beforehand i.e. they’re human after all. The other reason being that many of the factors that influence the success of the expedition are often outside the control of the mountain climbers e.g. the weather conditions could change, the equipment could break, a team member could get hurt, or perhaps one or more of the team members are not fit enough thereby slowing down the entire crew. Experienced mountain climbers have learnt over the years that anything that can go wrong will go wrong, and although they may not foresee every single problem that could arise they are prepared to deal with it as it comes i.e. these unforeseen problems will not deter them from the mission because they are mentally prepared for it and more importantly they enjoy the process. The rich business people on the other hand will throw their toys out the cot every time something doesn’t go according to plan. They will think to themselves, “What am I doing here, on this godforsaken mountain with these idiot mountain climbers who don’t seem to know what they are doing. Why was this issue not foreseen and planned for? What am I paying these people for? Why is it so cold on this mountain? Why am I in so much pain and why this so difficult? It should be easy, that’s what I’m paying them for.” The mountain climbers try to explain the challenges that are being presented and how they plan on getting around them. Unfortunately the business people couldn’t care less about the nitty gritty details. The simplest explanation for the business people feeling frustrated and not being interested in the details is because they just don’t enjoy the process. In fact most business people hate the process but they all want to reach the summit where the pot of gold awaits. They are the same people that are the fake perfectionists, that will endlessly bitch and moan about every little issue or discomfort. They are also the same people that will act like petulant children asking you every five minutes, “are we there yet, are we there yet?” They simply see the climbing as a means to an end, until one day someone comes along and offers them the option to take them take up to the summit in a helicopter, without any of the struggles or issues … even if that means splitting the gold with the helicopter pilot. The same thing goes for software development or any engineering endeavour; most business people hate the process and couldn’t care less about the details. They’re only enduring the pain and struggles because they don’t have any other options i.e. they want a custom product developed that doesn’t already exist on the market and they want to own the IP (Intellectual Property). Along the journey they will act like fake perfectionists by constantly bitching and moaning at every step without offering any solutions. Fake perfectionists are people that disguise themselves as perfectionists when in fact they have an intolerance for the process.

  • Negative consequences of working with/for fake perfectionists:
    • For starters, these sort of people can make your life a living level by creating problems for you instead of making the journey to the top easier.
    • Some of them might even look for imperfections in order to use them as excuses to not paying you for your work. For example if you’re billing the client on an hourly basis, these sort of tactics could include asking you to do bug fixing and ongoing support for free.
    • The worst case scenario is where they get offered an off-the-shelf product by another company, that promises to do everything your software does and more without of the hassle and inconvenience i.e. where the business people no longer have to worry about any technical details. What the business people don’t realise in these cases is that the off-the-shelf product took years to develop by this other company and in order for that company to make their money back they will have to charge hefty license fees. In the long term those license fees can end up costing a lot more than the development costs of the custom software. Not to mention that your client will not own any of the IP of the off-the-shelf product.
  • Ways to mitigate some of the negative consequences of working with fake perfectionists:
    • As with everything in life, the best way of avoiding conflicts and misunderstandings is to manage expectations. You need to make it crystal clear to every client right from the start of the project/endeavour what they will be getting themselves into. You can even use this mountain climbing analogy with them right from the start. Explain to them that this will be a long and difficult journey with lots of obstacles and challenges. You should go on to explain that one of your main responsibilities in this journey is to plan it out with the goal of mitigating risk, which is in fact the main responsibility of any software/solutions architect. However, you should mention that there will always be unforeseen circumstances and uncontrollable events that could occur and then follow up with few examples from your previous projects. Your intention should be to set out achievable but realistic goals. After having set the right expectations, you need to lastly ask for 100% commitment from the client i.e. are we going to do this through thick and thin or are you going to bail out at the first obstacle?
    • Before and throughout these projects you will find people having endless discussions and arguments about costing, timelines, deadlines and technical issues all in an effort to retain a client. However, you need to keep in mind that although you can have these back and forth discussions until the cows come home, they will have zero impact on whether or not your client enjoys the actual process of software development or not. It’s for this reason that you need to ensure that your process is an enjoyable one for the client. The simple rule of thumb for making a software development process enjoyable is to limit the number of surprises i.e. the less surprises there are the more enjoyable the process will be. This once again goes hand-in-hand with managing expectations.
    • As corny as it may sound, the last point I want to mention is that ultimately it comes down to how your client feels about the process of software development. Notice I used the word “feels” instead of “thinks” deliberately and it’s important to make that distinction because you can have all the intellectual discussions you want, but unless your client is in love with the process you are never really going to have their full commitment. That means that you have to change the way they feel about the process on an emotional level. This is obviously an incredibly difficult task because not all people have a technical aptitude. Here are a few tips for getting your client to fall in love with the process:
      • The best way do it is through enthusiasm and passion for your craft. If you’re oozing passion and enthusiasm for your work, it will rub off on your client, because enthusiasm is contagious.
      • Keep your client in the loop at all times in terms of what you’re currently working on, how it’s going, what you’re struggling with, how long it’s going to take, new ideas and recommendations you have etc. It’s also important for you to be completely transparent about everything. Do not hide information from your client regardless of whether it’s good or bad. Software development is like any other activity; the more involved you are in something the more interested and enthusiastic you will be about it e.g. the more news articles you read about politics, the more interested you’ll be in politics even though you have minimal influence over what happens to your country. The same thing  applies to watching a sport on TV; you’ll see people screaming and shouting at the TV because they want their team to score even though they have zero influence over it. You need to try and achieve the same thing with your client in terms of the software development process and you do that with constant feedback even if it means information overload for them. My preferred method of doing that is through email notifications sent out from my software as well as project management tools like Basecamp, Freedcamp and Microsoft Azure DevOps etc. I also make a point of ensuring that my clients have access to all the to-do lists, discussions, releases and the hundreds of email notifications from these tools. Some might say that email notifications and project management tools provide too much information for the client to process, but I beg to differ because you have to realise that ultimately you are competing for the client’s attention and attention to something equals interest which equals enthusiasm and a love for the process.

The best person to manage a Software Consulting company is an accountant

Most people in the software industry will work at several companies throughout their careers. In this chapter I’ll focus on software consulting companies specifically, but before we get to that let’s recap on the types of companies that could be involved in software development.

Many software professionals work in companies that are not strictly software companies, but rather companies that make their money through some other ways while software only serves a means to an end. Many of these companies can be found in the financial services sector such as banks, investment and insurance companies. Other industries that hire software professionals include warehousing, logistics, manufacturing, retail, tourism, aviation and many others. As a software professional working for one of these companies you’re essentially part a cost centre i.e. your work doesn’t directly generate money for the company. As a result, the software professionals in these companies don’t really worry too much about bringing in money.

On the other hand you will have companies that eat, sleep and breathe software for a living because that is their only way of generating an income. As mentioned in previous chapters these types of software companies can be divided into product development and software consulting. Product development focuses on developing products that can be resold as out-of-the-box products to many customers across the globe, while consulting companies offer custom development for their clients. Product companies invest a lot of money, time and effort into R&D (Research & Development) in the hope that they will sell those products at a fixed price, while consulting companies sell their time and expertise for an hourly rate i.e. they’re mostly selling services as opposed to products.

  • How a software consulting company functions: having distinguished between the different types of companies that employ software professionals let us look specifically at software consulting companies. We’ll first start with the problems in these types of companies. What I have seen throughout my own experience and by listening to other people’s experiences is that most software consulting companies do not last very long. Most of them do not even make it to the five year mark. The reason for it is quite simple in that they do not understand the paradigm they operate in. Software consulting companies are like hunters and gatherers i.e. they hunt and gather for a new project, they eat from the project, they hunt and gather again and this cycle continues to eternityThe moment they stop hunting and gathering is the moment the money dries up because they don’t have any sort of automation in place to ensure a passive income. In keeping with this analogy it essentially means that they haven’t matured to the Industrial Age i.e. having machines that make money while the people sleep. Unfortunately what many of these consulting companies don’t realise is that they are vulnerable to external factors that are outside of their control, just like hunters and gatherers that are left exposed to the effects of droughts and seasonal changes. During winter or a draught, there are no more fruits and vegetables to gather and the animals to be hunted are inaccessible or difficult to find. 
  • What keeps a software consulting company afloat: the only way for the hunters and gatherers to survive during winters and droughts is for them apply prudent strategies, which include:
    • Savings: an inexperienced manager of a software consulting company will be tempted to go on a spending spree after acquiring a big project or an investment from an investor. A prudent manager on the other hand will know that the good times are temporary and the work will dry up at some point. He will therefore save as much money as possible during the rainy reason to ensure there’s enough to pay salaries during the droughts.
    • Lean teams: most software consulting companies that I have seen tend to hire people based on project workloads. The bigger the project the more developers they hire. This strategy may serve well during the project but after a few months or a year the project gets completed and the work runs out, at which point they start looking for another big project. Those big projects are typically difficult to find and therefore failing to find the next project the company starts retrenching the staff due to a lack of work that can be given to them. A prudent manager on the other hand will rather keep the team as small as possible to avoid such retrenchments.
    • Hiring jack of all trades: based on common business practices an inexperienced manager of a consulting company will typically try to specialise their work force. If the big project that has been acquired happens to be a web development project the manager will go on to hire developers that specialise in only web development. In most consulting businesses this can often be a mistake because the next project could be a mobile app requiring a different set of skills. With the current staff not being to handle the new project, the manager will once again be forced into retrenching the developers if he cannot find more web development work for them to do. Some might argue that a consulting company should learn to pick their battles thereby specialising in only one type of solution e.g. only do web development or only mobile development. However due to the fact that most consulting companies live from hand to mouth they won’t always have the luxury of being picky with the projects they take on i.e. they normally take what they can get in order to pay the bills. It’s for this reason that in an effort to mitigate risks a prudent manager will tend to hire developers that are jack of all trades. This enables them to reallocate developers to projects as business needs change. In other words, prudent software consulting companies tend to hire developers that are flexible in order to compensate for an inflexible budget.
  • Typical types of people you’ll find running software consulting companies: as you can see it requires a special kind of skillset and aptitude to run a successful software consulting company. Here are the most typical kinds of people I’ve seen running these companies.
    • Technical people: most software consulting companies normally start off with a single talented developer who decides to go at it on his own by becoming an independent contractor. He then lands a huge project and proceeds to hire many developers to help with the work load. As mentioned above, this often ends in disaster for the company since the work will eventually dry up. Although software companies perform technical work, the problem with technical people is that they often only focus on the technical aspects. They typically have great aspirations to build amazing software products, learn all these new technologies and do all the cool things. However, what they fail to understand is that keeping a consulting company afloat is not about the amazing software they’re developing but rather the hours that they’re billing to the customers i.e. the money they’re bringing in. Going back to the hunter and gatherer analogy, the technical people are like the chefs in the kitchen preparing the amazing food, while the business owners are the ones hunting and gathering for food to be brought into the kitchen. It doesn’t matter how good of a chef you are if you cannot hunt and gather for more food to be brought in. It’s for this reason that purely technical people will not be able to run successful software consulting companies. The only way for technical people to start their own successful company is by coming up with a recipe or dish that everybody wants and requires very little work with each new sale i.e. to develop a product that scales.
    • Sales people: although sales people are very much required in terms of hunting and gathering, they often don’t make for good managers of software consulting companies. You’ll often find sales people that have found one or more great opportunities for developing custom software i.e. they know someone who knows someone that is looking for a software solution. They then proceed to find an investor, take a loan from the bank, or even cash out their life savings to start a software consulting business by hiring a few developers. The problem with sales people is that they are typically big on vision but short on details i.e. they know what they want but they typically have no idea on what it takes to get it. Because of this they tend to make a million and one mistakes while running a software company. These could include the mismanagement of funds by going on a spending spree, hiring and promoting the wrong developers, overpromising and underdelivering to customers, failing to understand the technical details of the software solutions as well as failing to understand the customers’ business requirements. Most importantly they fail to understand the hunter and gatherer paradigm and therefore fail at managing cash flow.
    • Accountants: it may seem counter intuitive, but in my experience accountants are the best kinds of people to manage and run a software consulting company. There are a couple of reasons for this:
      • Managing Cash Flow: based on the hunter and gatherer analogy it goes without saying that managing cash flow is crucial to surviving in a business that goes through regular droughts and therefore tends to live from hand to mouth. One of the main responsibilities of an accountant is to manage cash flow, and for many accountants this is something that has been ingrained in their DNA.
      • Practical: accountants tend to be highly practical people that don’t concern themselves too much with airy-fairy ideas, idealistic dreams and philosophical debates. They tend to focus on the task at hand and dealing with reality as it presents itself. This simplistic approach to life makes accountants see things in black and white or in their case as debits and credits (money in vs money out) i.e. we’re either making money or we’re losing money. Although it can be argued as to whether that way of thinking is right or wrong in terms of the big picture, for a hunter gatherer kind of business that survives from hand to mouth, this kind of approach is perfect. Some may argue that accountants are short sighted in that they only care about what happens in this month/quarter without worrying too much about long term goals. However, the truth is that in a software consulting business long term goals and vision are in fact mostly irrelevant  i.e. it’s a hunter and gatherer sort of business that has relatively short cycles of hunting and gathering (i.e. projects) which repeat themselves in perpetuity. 

To be clear, I’m not saying anything about whether the business model of a software consulting business is right or wrong. That is the topic of another discussion. All I’m saying is that given the business model of a typical consulting business, these are some of the things required to keep such a company afloat.

What makes a great sales executive in the tech industry?

We have all been approached by sales people at some point or another. Chances are that you’ve probably also worked with them in a professional capacity. Unfortunately, I don’t think you’ll find a single adult on the planet which hasn’t had a bad experience with a sales person. It could have been a hawker trying to sell you a pirated DVD, telemarketers constantly harassing you, a financial consultant debiting your bank account on an insurance product you haven’t even agreed on, or perhaps a sales executive duping you into buying a product that you don’t actually need. Over the years the sales profession has adopted a bad reputation. As such, I have often wondered what differentiates a good sales person versus a bad one.

In order to try make sense of it, we’ll first go through the typical stereotype of a sales person. We’ll then look at why and how they sales people enter the profession. We’ll then break down the most common types of sales people and also look at the qualities of an ideal sales executive. Lastly I’ll give me take on why I think there’s a gap between the typical sales person and the ideal one.

  • Stereotypical sales person: let’s first look at the qualities and flaws that come to mind when most of us think of a stereotypical sales person.
    • Qualities: chances are that many of your friends have been sales people throughout your life. The simplest reason is that they do in fact have a number of alluring qualities. They can be in incredibly charming, funny and the life of the party. They also tend to be eternal optimists which can be uplifting and inspiring when you’re having a bad day. I guess being an optimist is a prerequisite to surviving in a career where you’re getting rejected several times a day. Due to them regularly dealing with people and managing conflicts, some of them tend to be quite philosophical, which can certainly make them interesting individuals. 
    • Flaws: for many people, encounters with sales people can leave a lot to be desired. They can be pushy, refusing to take no for an answer. They can be disrespectful of people’s boundaries and sometimes even downright rude. They can be dishonest about the value of their products and their prices. Worst of all they can be extremely manipulative, playing with our emotions to trick us into signing on the dotted line. They often use the book “How to Win Friends and Influence People” as their bible, which in my opinion would be more accurately titled “How to become a sociopath by being fake and manipulative”. Their massive egos, gung-ho attitude and reckless nature can also serve as a horrible cocktail for creating toxic work environments. As you get older and more mature you start to feel that in order to maintain your sanity you almost have to become a parent to a teenager in every relationship or interaction you have with a sales person i.e. be firm with your personal boundaries, grow eyes at the back of your head and instil structure and discipline. If you’ve had enough of these bad experiences, it’s enough to make you think that they’re the scum of the earth. However, I don’t think it’s as clear cut as that.
  • People that end up in sales jobs: clearly the stereotypical sales person described above is not an ideal one. In order to understand the gap between the stereotypical sales person and an ideal one we need to first understand how they end up in these professions in the first place.
    • Entrepreneurs: these are your typical hustler types who have always enjoyed coming up with creative ideas and making deals. I can honestly say that these types of people are probably the best you can hope for when hiring sales people. How these people initially end up in sales positions is by virtue of their very nature and aptitude. The problem with these types of people is most of them go on to start their own businesses since they are normally are very independent, have a high tolerance for risk and have greater aspirations than working for a salary and/or commission their entire life.
    • Career changers: these types of people end up doing sales by mistake. They typically go and get some tertiary education and begin working in a specific profession. After some time they realise that it’s not for them. This could be for a number of reasons. Maybe they realise that they don’t have the aptitude for it or perhaps they’re not getting paid enough. It could even be that the job or industry they’ve landed in isn’t what they expected. Going back and studying for another few years to change professions isn’t always a viable option. They therefore start looking for alternatives and quickly come to realise that a sales position is one of the few unqualified jobs that actually pays well.
    • Those with useless educations: these types of people are similar to the career changers in that they also completed some tertiary education. The only difference being that they never actually worked in their field of study. The reason being that they probably completed some useless degree or diploma in a subject that nobody is willing to pay for e.g. art history, philosophy, fashion design etc. Not being able to put their studies to good use, they end up coming to the same conclusion as the career changers i.e. the easiest and most lucrative way of make a living is to start selling something.
    • Shortcut people: these are the lazy kind that go throughout life looking for shortcuts and get-rich-quick schemes. These people have no patience, don’t bother learning any new skills or working hard at anything. They’re in the habit of thinking that their next big score is just around the corner. They never realise that anything worth building will take time and effort. These types of people often only care about the money and are hardly interested in the process of how the money is made. Since becoming a sales person presents the smallest barriers to entry, these kinds of people will naturally gravitate towards the sales profession.
  • Types of sales people: there are all kinds of sales people selling all kinds of different products and services. Depending on what they’re selling they will require varying levels of skills. I therefore don’t think it’s fair to put all sales people in the same basket. Here are some common types:
    • Hawkers: there are the entry level guys that sell oranges and sunglasses at every corner. Being friendly, resilient and having an innate ability to disrespect people’s boundaries is pretty much all the skills this person needs.
    • Sales clerks: these are the people helping in you in the stores, providing information about the products and basically just making your shopping experience a pleasurable one. To be quite honest, I wouldn’t even classify them as real sales people since the majority don’t take part in convincing customers do buy from their store as opposed to other stores.
    • Telemarketers: these are the cold calling types that peddle all kinds of insurance products, cell phone contracts and bank loans. They are the worst kinds of sales people with the worst reputations. Due to the very definition of cold calling, these kind of sales people never have customers calling them, but instead they are the ones approaching unsuspecting strangers. For these sales people it’s all a question of probability i.e. the more people they call the higher the chances of convincing someone to buy something. There are several dynamics at play in this telemarketing game. Firstly, 99% percent of the prospects being called are not interested in the products that the sales people are peddling. This could either be because they don’t see any value in the product or perhaps they already have a similar product. The sales people are therefore searching for that 1% of prospects that would be interested. In order to do achieve this, a single telemarketer can make anywhere between ten to a hundred sales calls a day, repeatedly getting rejected. As you may have already experienced yourself, people can receive several of these sales calls a week. After a prolonged period of receiving these calls, most of us reach the end of our straw and unconsciously become rude to these telemarketers. In return, the telemarketers need to grow a thick skin to survive in this gruelling industry and naturally also become rude and obnoxious over time. Even more concerning, is that these telemarketers realise that nobody wants their products and therefore realise that the only method of closing deals is by becoming aggressive and even downright manipulative. They then come up with all sorts of dishonest schemes that either hide information about their products or exaggerate on what the products can actually do. Often times their artificial personas tend to slip into their personal lives, applying the same kind of tactics with their loved ones and colleagues. Is it therefore any wonder that sales people are stereotyped with all the flaws mentioned above?
    • Sales executive: these are supposed to be the white collar professionals working in the corporate world. In most cases these sales executives are hired to sell much needed products and services. The products that they sell are normally a lot more complex than a cell phone contract. In the technology sector these can include both hardware and software. Sometime they will be out-of-the-box products while other times they can include custom solutions to be designed and developed. As you can imagine these sales executives are expected to understand and explain how these complex products work. Selling services for custom solutions requires an even higher level of skills since the sales executive is expected to understand the customers’ business requirements as well as make recommendations. Most importantly the relationships with their customers are not finite. Meaning that unlike with telemarketers the relationship with the customer does not end once the deal is closed. Customers in the corporate world look for more than just specific products; they look for long term partnerships with their suppliers. This means that aggressive behaviour and manipulative tactics on the part of a sales executive might help in closing the first deal but will certainly have an adverse effect in maintaining a long term relationship.
    • Account Managers:
      • Overview of the value chain: in order to understand the job of an Account Manager we have to first clarify how they fit into the value chain.  Large corporations that are suppliers and manufacturers often distribute their products via a channel of partners. Channel distribution is typically used to minimise the costs for manufacturers and helps them expand their territories. For example, depending on complexity of their products as well as the demand and size of the market, a hardware manufacturer known as an OEM (Original Equipment Manufacturer) may not find it viable to conduct direct sales to customers across the world. It would require too many stores, sales executives, engineers, accountants and other admin people to run their business. Instead they tend to offer training and support to certified partners also known as VARs (Value Added Resellers). In the software industry those VARs could also be labelled as ISVs (Independent Software Vendors). These VARs then go out selling and implementing the manufacturer’s products. The VARs are normally the ones that hire the sales executives, find the business opportunities, close the deals and implement solutions using the products provided by the manufacturer. Multinational manufacturers then go on to establish subsidiaries in the countries they plan on selling in. The subsidiary is typically owned by the manufacturer. A subsidiary will be made up of a handful of people who’s job it is to support the VARs in that country. The staff are made up of mostly sales people (Account Managers), a few technical pre-sales engineers and perhaps a few finance and admin people. They may sometimes also require a few technicians if they’re not outsourcing the hardware repairs. The manufacturers may in some instances include one or more third-party Distributors in the value chain. The Distributor’s role is to offer warehousing of the stock being brought into the country as well act as a stock buffer to handle the market demand i.e. customers aren’t normally happy with typical 6-8 week ETAs (Expected Time of Arrival) and therefore having a Distributor keeping stock in the country reduces that ETA. VARs normally purchase the products from the distributors but negotiate the prices with the Account Manager working for the manufacturer. Distributors normally agree with the manufacturer on a fixed markup on the products while VARs can set their markup to whatever they feel is plausible in order to close their deal with the end customer.
      • Job of an Account Manager: the sales people known as Account Managers are essentially the heart and soul of the manufacturer’s subsidiaries. They are responsible for managing the relationships with all the VARs and supporting them with whatever they need in order to sell. In most cases, the Account Managers do not ever perform direct sales to the customers, nor do they go out looking for new business. Instead the Sales Executives working for the VARs do most of that work and the Account Managers just offer advice, pricing and sometimes apply for Price Exceptions (a pretentious term for discounts) on behalf of the VARs. The manufacturers can often run marketing campaigns commissioned by either the head office or subsidiary in which case the Account Managers could end up with leads on their desk i.e. people that are interested in their products. Upon receiving these leads it will be up to the Account Manager to decide which VAR they give the lead to. In theory this decision should be based on merit i.e. the most competent VARs should should be given the most challenging leads to increase the chances of success. However, in the real world there are a lot of politics that go into that decision. It could be based on the personal relationship between the Account Manager and the VAR and host of other dubious practices such as being offered bribes by the VAR, nepotism and efforts to create a monopoly of VARs in order to fix prices and avoiding price wars i.e. the Account Managers typically do not want too many VARs as this can lead to them undercutting each other thereby bringing down the prices in the overall market. The moral of the story is that most Account Managers do very little selling and instead spend most of their time playing politics. 
  • Ideal type of sales professional: having mentioned all the different types of sales people, it’s easy to conclude that there’s no point in hiring a hawker or a telemarketer to work in a professional environment since they typically don’t have the skills and aptitude to conduct themselves in a professional manner. Unless your company is a large multinational there’s probably not going to be a need for an Account Manager either. Therefore a typical company with useful products and services should in fact be looking for Sales Executives and ignore all the other types of sales people. So what are the qualities and skills of an ideal sales executive? Here are some that you should be looking for:
    • Self driven: sales executives are not the kinds of people that should be micromanaged. Instead they should only be given sales targets and expected to take initiative in finding new business. Although training is of course required, having a sales executive that needs to perpetually be told what to do and how do it defeats the object of hiring them in the first place.
    • Giver: most people can be classified as either takers or givers. Too often sales executives are focused only on what they can take from a customer instead of thinking about what they can give. The products being sold to the customers should be resolving their problems and generally improving their customers’ lives. Sales executives that ask themselves what they can do for their customers will enjoy repeat business, while takers will ultimately be shunned.
    • Empathy and emotional intelligence: you need someone that is good in in dealing with people. This does not not include being manipulative or aggressive in order to control people, but rather someone that that can manage their own emotions, know what they are feeling, what their emotions mean and how they’re affecting the people around them. A big part of emotional intelligence is also having enough empathy to put yourself in the customer’s shoes so as to understand their requirements.
    • Ego: although empathy plays an important part in relating to the customer’s needs, sales executive also need an equally strong ego to succeed. A sales executive’s self image should be linked to their success. Since they go through so many rejections, their self image will be chipped away continuously. Their ego needs to be strong enough to counter those feelings of rejection in order to persevere. Their ego needs to be continuously pushing them to chase the next deal to help them restore and boost their self image. However, their ego should not be so big that it inhibits their empathy.  There needs to be a fine balance between their ego and empathy because those two personality traits act as opposing forces. In simple terms their ego should be their driving force to keep them going while empathy should serve as the tool required to complete the job.
    • Good with numbers: in the corporate world it’s all about the numbers. It’s therefore incredibly important for sales executives to be able to conduct ROI (Return On Investment) analyses, negotiate prices, compile quotes, report on revenues etc. Having worked alongside sales executives and account managers I’ve often been amazed at their lack of competence when it comes to even simple things such as putting together quotes. As a technical pre-sales engineer at the time part of my job was to compile the BOMs (Build of Materials) but I didn’t have access to the prices. The sales executives/account managers’ responsibility was to search for the part numbers on the price list, calculate the markups and plug those prices into the quotes. Unfortunately many of them couldn’t even do that, let alone understand what the products on the BOM/quote were for or why the customers needed them. Ironically I know for a fact that most of these sales executives/account managers were getting paid higher salaries than the technical staff not to mention the massive bonuses and commissions they were getting paid. It therefore goes without saying that being good with numbers is an absolute must for any sales executive because if they cannot calculate prices how are they supposed to make money for the company. Senior sales executives should also worry about the profits being made in every sale as opposed to just worrying about the revenue. Ironically however, most companies set sales targets that are based on revenues instead of profits. The only reason that I can think of in terms of why a company would do that is to hide the profit margins from the staff. Personally I find it completely irrational as it creates this false illusion of money being made while in fact they might only be breaking even.
    • Technologically adept: regardless of whether sales executives work in the technology sector or not, they will at the very least need some basic IT skills to get their job done i.e. sending emails, using CRM software, putting together spreadsheets etc. When selling technical solutions, it goes without saying that they would need an understanding of the products and services that they’re offering. I remember having conversation once with a sales executives where he was proudly bragging to me that it doesn’t matter whether he’s selling a tech solution or he’s selling Coca Cola. It was all the same to him because he figured that it’s the technical pre-sales engineer’s job to discuss the technical requirements with the customers and compile the BOM while all he had to do was plugin prices. Obviously this is complete and utter nonsense because part of a sales executive’s job is to convince a customer to purchase the company’s products and one cannot do that unless one understands what the products do. What many sales executives hope for is that the technical pre-sales staff do the job for them while they receive the commissions and bonuses. This obviously defeats the object of hiring sales executives in the first place. It is for this reason that I have never really understood the need for a technical pre-sales role as it seems their only role is to compensate for the incompetence of the sales executives. As far as I’m concerned the sales executive and technical pre-sales should be one and the same job.
    • Communication skills: sales executives need to be well spoken and coherent in their communication. There is noting worse than a sales executive confusing you with illogical, inconsistent and contradictory statements. All this does is create the perception that they have no idea of what they’re talking about.
    • Strategic: sales executives will  be dealing with a multitude of customers and prospects and will therefore have to make an endless number of decisions throughout their day. For example, some customers are more trouble than they’re worth, stealing valuable time that could be used for more lucrative customers. Customers therefore need to be prioritised accordingly, which requires some form of strategy. Among many other aspects that need to be taken into account, some other examples include the life spans of products and whether they will be discontinued. For these reasons, sales executives that are not able to strategise can often find themselves running around like headless chickens.
    • Organised: most products and services that are sold require several steps after the customer has agreed to go ahead with the purchase. Some basic admin/finance tasks include the issuing and processing of purchase orders from the customers, placing orders with the suppliers, invoicing etc. When offering professional services the technical staff need to be briefed on the customer’s requirements. Hardware products and software licenses that are needed for a solution need to ordered ahead of time to ensure that they arrive in time for the go-live of the project. The customer’s expectations need to be managed correctly right from the start of the project when the sales executive is negotiating the deal. Failing to perform these tasks correctly and on time can wreak havoc on the technical staff, the customer and the project as a whole.
  • Irrational criteria used to hire sales people: now that we’ve established what the requirements for an ideal sales person should be, we have to ask ourselves how we end up with so many sales people that do not fit that mould i.e. what causes sales people and more specifically sales executives to be dodgy. Based on my own personal experience, I am convinced that the blame lies solely on the hiring managers putting way too much emphasis on personality when interviewing for sales positions, while completely ignoring all other attributes that would be required in any other job. Here are a few mistakes that are made by hiring managers when they’re recruiting sales people:
    • Mistaking narcissism for sales aptitude: as mentioned previously, sales people are required to have a strong ego in order to handle rejections and stay motivated. Their success needs to also be linked to their self worth prompting them to chase the next deal to restore their self worth. Unfortunately, all of these personality attributes are typical attributes of a narcissistic personality. On the other hand, the single personality trait that most clearly defines a narcissistic personality is a lack of empathy. A lack of empathy can be incredibly destructive in maintaining customer relationships and therefore getting repeat business. It can also be destructive in maintaining relationships with colleagues thereby creating toxic work environments inhibiting productivity. Ego and empathy are therefore opposing personality attributes but equally important to have in order to succeed as a sales executive. Ego is needed in the short term, while empathy is needed in the long term. The mistake that hiring managers make is being shortsighted by putting way too much emphasis on ego and too little on empathy when hiring sales people. This is essentially how we end up with so many narcissistic sales people in the world.
    • Too much emphasis on personality: conversely, throughout my career I have seen numerous sales people that have very few (if any) of the typical characteristics of a sales person but they happen to be phenomenal at their jobs. You might say that those people are the exceptions, but if that were true, then how is it that those individuals can be so good at their jobs despite lacking the personality traits of a typical sales person? You might say that a sales person deals with people a lot more than in any other profession and therefore personality should take priority. However, I think that people who believe that sales is all about personality are clearly undervaluing the products and services that their company is offering because as a customer I’m not looking to purchase a salesman, I’m looking to purchase a product or service i.e. I don’t care how charming and charismatic a sales person is, but I do care about the product I’m buying and the service I receive thereafter. What is the point of having a sales executive that can be charming and charismatic when they cannot explain the products they’re selling or even put together a a simple quote. This theory would therefore explain why telemarketing companies hire for personality since they’re mostly selling useless products that nobody wants. We can then conclude that the value you place on the personality of your sales people should be indirectly proportional to the value of the products the company selling i.e. the higher the value of the products, the less the personality of the sales people should matter and vice versa.
    • Purely focusing on sales track record: given all of the above, i’s quite clear that a sales executive’s skills should extend far beyond just personality and negotiating skills. It therefore boggles my mind as to why so many hiring managers fail to look at non-sales related success stories in their candidates’ track records i.e. whether the sales executive being interviewed has ever accomplished anything outside of sales. To drive this point home, let’s look again the at the types of people that end up in a sales positions and try to determine which would be a best fit for. The entrepreneurial types would be fantastic at the job, but the problem is that you normally won’t be able to hold onto them for long. Shortcut people would make for the dodgiest and laziest of sales executives, so I wouldn’t recommend them at all. Those with a useless education might be okay and could even survive in the industry, but they have no track record of ever achievement anything other than completing their education. Given their choice of getting a useless tertiary education you can also count on them being impractical, which can be disastreous to a career in business. Based on my own personal experience I can honestly say that the best sales executives are those that have decided to leave their past careers behind and try their hands at sales. Every single great sales executive that I have ever met was in a different profession before they got into sales. To give you some examples: one of my first managers studied mechanical engineering, thereafter started coding on the side and went on to launch several software companies. Another fantastic sales lady who was also the Country Manager at an OEM subsidiary was previously a pharmacist and then decided that although she loved the chemistry side of things, working in a pharmacy wasn’t for her. Her predecessor was an electrical engineer turned salesman and her boss who was the global sales director for EMEA was previously a mechanical engineer. Another great sales executive and businessman I work for was preciously a chartered accountant. There are lots of other examples that I could give, but the point is that what all of these people have in a common is a track record of succeeding in some other profession before they became sales people. It undoubtedly shows that a charming and charismatic personality has very little to do with sales compared to the long list of skills required to be successful as a sales person.

Pros and cons of working from home

There’s always been a lot of debate around the idea of working from home (for those who can) vs going into the office every day. Some people strongly believe that working from home is a lot more productive while others (mostly managers) believe that to be nonsense. Having done both for many years, I think there are a number of variables to consider in this debate. In other words, it depends. So here are a few practical advantages and disadvantages of working from home.

  • Advantages of working from home:
    • Save time and money on travelling: this is obviously the most common argument for working from home. It means no longer having to waste valuable hours of your of your life sitting in traffic and wasting money on petrol and trains tickets. It means having extra time to work when under tight deadlines or using that time for leisure or spending it with your family.
    • Save money on food: most companies do not offer free food in their offices and therefore people are often forced to buy their lunch at cafes and/or restaurants close to the office. Since a lot of these offices are located in affluent areas, the prices of food in those areas can be considerably higher than making your own food at home. Of course there is the option of packing your own lunch, but in the rush of getting to work or perhaps for the sake of convenience, many people still purchase their lunch at places close to the office.
    • Fewer interruptions: when you’re at home you don’t have people unexpectedly dropping by your desk to ask you questions or starting up random conversations. Having less interruptions means it’s easier to focus and get into “the zone” when trying to work.
    • Less background noise: most company offices nowadays are open plan generating a large amount of noise, with people chatting, telephones ringing off the hook all day and sometimes even having workers drilling and bashing down walls in the office. Again, working at home in a quiet environment allows you to get into the zone more easily.
    • Removes the need to clock in: depending your job’s requirements to communicate with other people, working from home largely means having the freedom to decide on your own daily schedule and routine. As long as you get the job done and achieve the set out goals within the scheduled timelines nobody will really be bothered too much about what time you start and end your day. Early birds can wake up at 5am and finish their work early, while night owls can sleep in and work later at night.
    • Saving time on running errands: since most people work in offices from 8-5pm, they inevitable have to schedule their errands during the weekend where possible. For example, going to the bank, renewing drivers’ licenses, sorting out bills with the municipal etc. Some of these errands can indeed be accomplished during the weekend, but since everyone is that during the weekend, it means spending your Saturdays mornings in long queues of people. Some errands cannot even be done during the weekend, meaning that you have to take time off from work during the week. When working from home, you can easily pop into the bank without having to sit in the queue. You can then easily make up that time at night or during the weekend. In the grand scheme of things you end up saving a lot of valuable time.
    • Work in your preferred environment: working in a company office means being forced to use the provided company facilities whether you like them or not. Everyone gets the same kind of table and chair, gets told where to sit and and in some places people work there for decades before they get a seat by the window or a corner office. Furthermore, many offices have very little natural lighting, with workers being forced into cubicles where they never see the light of day. Air conditioning is another issue where everyone is forced to work at the same temperature; if it’s too hot or too cold for you, you need to become a politician to convince others to change the temperature. Working from home on the other hand, means having the freedom to chose which room you want to designate as your office, the lighting and temperature conditions as well as the desk and chair you prefer to use. The work environment and ergonomics are on your own terms.
    • Reducing contact with people you don’t get along with at work: maybe you’re lucky and you work in one of those companies filled with only nice people and you all get along fabulously. However, for a lot of people that’s not always the case and unfortunately we sometimes have to endure having to work with people we don’t like. We’ve all known someone at some point in our careers that we didn’t get along with. Working from home gives you the ability to reduce the amount time spent with those people. This can go a long way towards improving and maintaining your mental health.
    • No office politics, rumours and gossip to worry about: even if you do get along with people in the office, there will alway be rumours and gossip in any office that you work in. Working from home means not having to waste time dealing with any of it. It means no longer having to worry about rumours and gossip of people getting retrenched, promoted, rewarded, complimented or reprimanded. Instead you can use all your mental energy on your work, instead of wasting it on things that you cannot change.
    • Living in larger properties: most company offices are located in central business districts in the heart of major cities. Due to the high demand for property in those areas, workers are often forced into paying exorbitant amounts of money to live in smaller properties closer to work. Being able to work from home on the other hand means being able to live in cheaper and larger properties further away from the city, without having to worry about additional time and costs of travel.
    • Access to larger pools of talent: due to location and distance constraints most companies have had little choice but to hire people in areas that are in close proximity to their offices. Allowing people to work from home on the other hand, removes that constraint giving companies access to a larger pool of talent.
  • Disadvantages of working from home:
    • Cabin fever: many people who have never worked from home underestimate the notion of cabin fever. They don’t see it as something that could happen to them, but rather as something that happens to a few extroverts. Unfortunately that is not the case and can happen to almost anybody especially to those that live alone. Human beings are social creatures and are not meant to be living out their lives alone. There is a reason that solitary confinement is used a punishment for prisoners that misbehave in prisons.
    • Temptations to not work: as mentioned above, there may very well be less interruptions from other people when working from home, but there is also something to be said about temptations. Interruptions are caused by other people, while the temptations at home are those that get you to do anything other than work. Since you don’t have anyone looking over your shoulder at home, it’s easy to be distracted and lose countless amounts of time browsing through your social networks, watching TV/Youtube, reading the news etc. All of these distractions will suck the energy out of you, leaving you unmotivated and struggling to concentrate.
    • Home duties/responsibilities: there are numerous responsibilities you may have at home, which you wouldn’t normally have have to worry about during a regular work day at the office. These  include washing your coffee cup and dishes, vacuum cleaning, doing the laundry etc. You may also be tempted to save costs by no longer paying for child care and instead taking care of the kids yourself since you’re at home the whole day. All of these responsibilities at home will strip away your ability to focus on your work.
    • Additional costs at home: while you may be saving on travel costs, working from home doesn’t come without other costs. Your water and electricity bill will be higher since you don’t have your company paying for those costs any longer. Since most companies offer free coffee in their offices, this is yet another benefit saving you’ll have to forfeit when working from home.
    • Lack of social pressure: many of us believe that we are self motivated and do not need any external pressure from others in order to motivate us to do our work i.e. I mean we’re adults after all. However the truth is that most people compare themselves with others and even if we don’t, having other people waiting on our results or pushing us to achieve our goals has an immense impact on our motivation levels. The fact that nobody in the history of the world has ever started a new company by themselves is testament to the fact that none of us are completely immune to the effects of social pressure.
    • Lack of team cohesion and culture: there are numerous chat, project management and conference call tools available that we can use to facilitate communication between coworkers. However, the problem with remote correspondence is that it’s only ever done when it’s necessary i.e. conference calls and chats are only initiated when we need to discuss work related tasks. Some people may think that’s a good thing since it prevents wasting time on small-talk. Personally, I beg to differ. In this kind of remote work setup, you can work from home for years with other coworkers, and not ever share a single joke or know a single personal thing about them i.e. what their likes and dislikes are, what personal struggles they’re going through, what ticks them off or what motivates them. One might say that all of that is irrelevant but I don’t believe that because ultimately we are working with other humans not robots. Therefore it is important to understand that all people have emotions, worries and aspirations, none of which you will ever be aware of without the daily/weekly lunch breaks, smoke breaks and water cooler talks. All you have to do is watch any one of the hundreds of movies about team sports to understand the impact that team cohesion has on performance. The emotional connections and knowledge we have about or colleagues may be intangible but that does not mean that it has no impact on team performance. Managers should especially be concerned about these aspects when managing remote workers.
    • Integrating new staff is difficult: some companies that switch over to a work from home policy may not immediately pick up the issues mentioned above especially related to team cohesion and this is because they already know each other within the team and the company’s culture. The problem arises when new people get hired and they struggle to adapt to the company culture, simply because company culture is almost invisible when working from home.
    • Coaching junior staff is difficult: things get even worse when you have new junior staff that need coaching, training, and hand-holding. It becomes very difficult if not impossible to do all those things while working remotely.
    • Barriers to asking for help and sharing or discussing ideas: while the most talented, experienced and skilled workers may feel that they don’t need help from anybody, the truth is that nobody is an island. At some point or another we all get stuck with some issues and it always helps when you can ask for help from someone that’s sitting a few meters away. Working from home imposes some  barriers to that approach since you cannot see what the other person is busy with and therefore have to resort to scheduling a conference call. This somehow almost always feels a less casual. Brainstorming sessions will also not be the same through remote correspondence, that’s if they even happen at all. The truth is that most creative ideas do not come about in formalised meetings that are scheduled in one hour intervals, but rather in casual and impromptu chats.
    • Transparency and visibility between colleagues is lost: when working in a company office setting, you can always see who is at work and whether they’re busy or not. Remote working does not offer that visibility i.e. you have no idea what your coworkers are busy with or if they’re busy at all. So when you ask someone for assistance or to attend a meeting and they tell you they can’t because they’re “so busy”, they could very well be busy watching TV and you won’t know any better. From my own personal experience I can tell you that the “busiest” people that never seem to have the time to help are always the ones that work from home, while the ones working at the office always somehow manage to find the time to help.

Keeping all of the above in mind, you may still be wondering whether a work from home policy should be put in place or not. In my personal opinion, I don’t think a work from home policy is a good idea in general. In a perfect world, I think every company should aim to get workers to come into the office at least 80% of the time i.e. allowing a one day per week to work from home which they can use at their discretion when they want to take advantage of any of the above mentioned benefits of working from home. Having said that, I do concede that it is not a perfect world, and exceptions should be made. For example you may have a valuable employee that lives three hours away from the office, and having that employee spend six hours of their day travelling would be ridiculous and you could end up losing that employee purely for that reason.

N.B. although I mentioned all of the above practical pros and cons of working from home I do want to offer a word of caution especially to managers that are weighing up their options. At the risk of sounding negative, I’m going to go out on limb here and say that a lot of the debates that happen are often superficial, with productivity and the like being brought into the debate as shallow excuses to circumvent other underlying issues within the office culture. I am not saying that this is always the case, but I do believe a some of the debates are not so much about productivity, travel time and costs, but rather about exercising control and being controlled i.e. some managers feel they lose control by allowing people to work from home while workers want to avoid being controlled by working from home. It is very sad when this happens as it can point to underlying issues that are never brought to light and never dealt with. Some of these issues can point to a depletion of trust between employees and managers or even abuse of power. Therefore I would advise that when an employee requests to be allowed to work from home, you should listen very carefully to their reasoning and determine whether their request does indeed have practical merit or not. If their reasoning sounds superficial you should dig a little deeper to determine the underlying reasons for them wanting to work from home. Could it be that the office equipment are inadequate, or perhaps they want to distance themselves from the work environment, another colleague, or even distance themselves from the manager? If that is the case, you should try your utmost best to improve whatever conditions they’re trying to run away from. Conversely, if you are very opposed to the the idea of work from home, you need to ask yourself whether your argument against it does indeed have real practical reasons for it, or whether your reasons are simply superficial excuses for not wanting to relinquish control over your employees. In other words, are you being a control freak?

In conclusion, my overall view on this topic is that managers should put in every effort to make the workplace as comfortable and as work friendly as possible while considering full-time work from home policies only as exceptions where there are valid practical reasons to justify it.

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.