One of the most important things to most customers is customer service. And how do users rate customer service? Typically, by two criteria – the speed at which results are achieved and how satisfactory the results were. You can look at review websites for any product or service and see people complaining about one or the other. As consumers, we want what we want, and we want it now! Of course, there’s nothing wrong with that – capitalism encourages such a model.
But here’s the problem I see in my business – consumers who want something, but won’t communicate what it is they want. Or consumers who are quick to complain about an issue but won’t provide the information to resolve that issue. I have customers who will send me an email about an problem wanting it immediately fixed. But when I send email after email to gather more information, they are ignored. Then, the customer sends me another message asking if their problem is fixed. I have software customers who will report a high priority bug, but won’t tell me how to reproduce it and ignore emails from the ticket tracking systems.
Fortunately, the resolution to the problem is simple: If you want excellent service from the companies you work with, be prepared to offer excellent service to those companies when they are trying to resolve your problem. Otherwise, you only get out what you put in – and that’s not the fault of the company servicing your problem!
Yesterday, I started up my spare laptop to load an Android Studio project. The laptop I normally use for this project was at the office, and I was sitting at home. I had to upgrade the version of Android Studio first, and then load the project. But, after over an hour, I still had not written a single line of code. On my Mac, I could have upgraded and had the project open and running in under ten minutes – but my old Windows computer is so slow it’s painful.
Consider the company you work for or the projects you work on. What is the cost of using slow hardware to your organization? What about to your productivity on your projects?
Many people look to buy a cheap computer for work and, indeed, a large number of companies do the same. Why spend too much on computers? Here’s why – when you buy a $500 machine instead of a $1,000 machine, you saved $500. However, during the lifetime of that computer – say two years – you will be less productive than on a more powerful computer that doesn’t have you waiting to work. Do the math and you quickly see that the $500 you saved in cheap hardware is dwarfed by the losses to productivity. If a faster computer allows you to work just a marginal 5% faster, that would mean that – during the course of 2 years – you would accomplish an additional 208 hours of work. (40 hours / week * 52 weeks / year * 2 years * 5%) Even at minimum wage, that comes out to over $1,500 dollars of additional work. Some may argue that the work they do doesn’t require a fast computer. That’s fine, buy cheap computers for those tasks. But for me, as a software engineer, the computer is often a limiting factor to my performance. And, I suspect many other fields are the same.
The power of the machines you purchase for your employees has a direct impact on their productivity. You may think you’re saving money with bargain computers, but long-term you’re losing far more in productivity.
This morning, I woke up to a light dusting of snow outside. I went to sweep the snow from the front steps, and ended up knocking a vertical bar off the hand railing. As the steps are less than 6 months old, this was very disappointing to me. I contacted the contractor and am waiting for a response. I wish I could say that was the only issue I’ve had with another organization’s quality or customer service this month, but I’d be lying. I purchased an annual subscription to an online news site only to find that their computers say my subscription started in March – instead of December – so my annual subscription will be due 3 months after I paid for it. Their support has still not responded to the issue. I contacted a university in Pittsburgh to get information on taking the HSK exam (Chinese language proficiency) and never heard back. A second university I contacted replied within minutes – with two URLs that were both wrong. And, for one more poor customer service issue, I have been unable to get Google to fix a problem with my account for almost two months now. The problem is on their end, it’s documented in numerous places, but all I am ever told is to upgrade to Silver support to have it fixed. I have to pay them more money to fix a problem that is on their end.
These stories are all just from this month. We live in a world where people have become lazy and sloppy. Quality is increasingly difficult to find, and support is often so bad we’d rather not even try. For me, as a software engineer, this is unacceptable. Every line of code I write – whether for my projects or for a customer – is written so that it can be maintained long-term. I take pride in the quality of my code and the applications I develop. I am more than happy to support the applications and code I write because I create a quality product. My code is a reflection of me.
When you’re looking for development resources for your projects, do they feel the same way? Or will you regret your decision this time next year?
At a recent chamber of commerce meeting, a fellow member asked me what my company does. I replied that I create custom software solutions for businesses. He was incredulous that people actually paid for custom software. Sadly, this wasn’t a small business that might struggle to see the benefit of custom software — this was a large, well-established local business. Exactly the kind of customer that has much to gain from custom software development. But what do businesses stand to gain from custom software development? First and foremost, custom software allows the organization to have tailor-made solutions to their problems. Software is not a one-size-fits-all solution. The application that works great for a small business may not be flexible enough for a large business. Conversely, an application that works great for a large business may be needlessly complex for a smaller business. Even more importantly, off-the-shelf solutions don’t take into account the things that make a business unique. After all, doesn’t every business have something that makes them special? Maybe your organization makes custom products — how do you quote the product? Maybe your organization is an innovator in your market space — how do you implement process to aid in that innovation? Whatever it may be, your company is like no other — and custom software solutions can aid you in exploiting the things that set you apart from the competition. Second, off-the-shelf software may be updated or changed in the future in ways that break functionality you depend on. Remember the last time you updated Windows? Did everything go smoothly? Off-the-shelf software is the same thing — maybe it works great, maybe not. But as a business, is that a risk you’re willing to take? Custom software can mitigate that risk since you — the customer — are in control of any new features in the application. Furthermore, you can have the software modified to ensure compliance with new laws, new processes, or new requirements of any kind. Try having off-the-shelf software updated to meet your new requirements. Third, custom software can be written to integrate with your other systems. Integration of systems can ensure that data is not required to be entered multiple times, it can enable faster processing of information, and it can greatly improve operational efficiency. Custom software can be written to read inventory from your existing inventory control system, update employee data in your employee management systems, integrate with your customer management systems, or interface with any other systems your company depends on. Off-the-shelf software simply can’t compete with that. Fourth, custom software can be supported by the developers who wrote it — developers you have interfaced with, developers who understand your business and what makes it unique. Off-the-shelf support may or (more likely) may not meet your needs as an organization. Late on a Friday night, do you want to call a foreign call center for your software and hope someone can help or would you rather call the local software company and have them stop by tonight to diagnose and solve the problem?
As a software engineer for nearly 20 years, I can site countless samples of work I’ve done that has improved an organizations revenue, improved workflows, aided in reporting data to senior management, and ultimately aided the organization in increasing market share. And isn’t that exactly what businesses want? To increase market share? Why a company would not want custom software is a better question!
The IT world is full of certifications. When I started in the tech world, CompTIA’s A+ certification was the standard for computer techs and the Microsoft’s MCSE certification showed you were a master of the Windows system admin world. Today, the IT world has numerous certifications available to indicate proficiency in networking, system administration, hardware, security, application proficiency, and so forth. The world also has numerous programming certifications now too. Two of the more well known certifications include Microsoft’s MCSD and Oracle’s Java certifications. But are they as useful A+, MCSE, CEH, or other certifications? I personally don’t think so. In all my days as a software engineer I have never once interviewed a single developer who had any programming certification. I have never had a fellow developer tell me about passing the newest version of a developer certification. I have never been asked by anyone if I’m certified in a programming language. It has literally never once mattered. In the past, I had considered seeking certification as a Java developer. Then I saw the sample test questions. My first thought? If I ever saw this kind of code in real life I would do everything in my power to ensure that the author was immediately fired. The questions test your ability to remember esoteric language rules — not things I want to ever see used in production systems. Many of the questions ask “what is the output of the below code” and provide a code snippet. If you have to ask what the output of a complex code fragment is, you probably wrote it poorly. If I really needed to know, I’d copy the code and run it. None of this is really of any value. So, your brain is a human code compiler — that’s great. But the real questions remain unanswered — do you understand design patterns? Can you decompose complex problems in to proper object models? Can you write maintainable code? Do you have good coding style? Do you document your code? Do you understand networks and databases? When I interview a developer, these are the questions I need answered — not what the output of a horribly convoluted nested loop is.
Anybody who knows me knows well that I value education. I have studied countless languages, formally trained in both locksmithing and herbal medicine, achieved a third degree black belt in taekwondo, and earned an associates degree in psychology. But what surprises most people is that I don’t have a degree in computer science. In fact, even the degree I do have was earned through a correspondence school less than 10 years ago. I did not go to college out of high school, I joined the army. And, just about everything I know about programming I taught myself. Why does this matter? Well, in today’s society there still seems to be a strong desire for candidates applying for programming positions to have a bachelors degree in computer science. Many job listing require a bachelors at a minimum. The unfortunate thing is that most of the best programmers I have ever encountered did not have a degree in computer science and many had no degree at all. Throughout my career, I have always been identified as among the best when it came time for reviews — so a degree is not necessary for someone to ascend to the top of the class. So what is needed? Programming is an art that is learned through doing — not through formal education. And that is where the problem begins. I have interviewed countless candidates for programming positions with degrees and, sadly, few of them really knew the first thing about programming. They had attended years of college, but couldn’t identify the objects in a problem or design a trivial database to house the corresponding data. Why? Because they had never actually programmed much of anything. Maybe they implemented a stack, a linked list, or a sorting algorithm. And, while an understanding of those things is important, they already exist in the libraries of every language out there. Have they ever written anything more than that? Typically, I hear graduates tell me about one or two projects they worked on. They have a degree, but they’ve only ever written one or two real programs. What’s the value to that? Their piece of paper has come with no actual knowledge or expertise. We seriously need to revamp our education system to focus on real world training and spend less time on the things which bring no value to the business world. If we do not, we will continue to watch computer-related jobs go to foreign firms that are better trained and cheaper than our own fellow Americans.