Skills for the workforce of the future.

In today’s world, we use a lot of software, whether that's small apps on our smartphone or an enterprise level applications we work with on a daily basis. Upon every usage, a person will find negative and positive sides of that software product. Using that many applications on a daily basis give users an ability to compare those, and that way person would build a perception of how good that product is. As a user I feel like there is really hard to find quality in any technology products today, whether it’s software or hardware, or maybe not even technology product. Hardware products at least guarded by some warranty, so that’s sort of confirmation from a manufacturer that they will replace the product for users free of charge during that period. However software vendors does not give their users any warranty, in other words, they can’t guaranty that their product will work at all. With the complexity of software growing every day and becoming an essential piece of self-driving cars and other AI systems where software is granted an ability to make decisions on behalf of their users. All of that becomes yet another piece of software without any warranty where manufacturers pouring a lot of money into marketing and cutting on R&D, like some exploding phones from one manufacturer.

It does not have to be that way! Today software developers have enough tools to control the quality of their products in more or less automated fashion. Developers could use automated testing in many cases to simulate users behavior; they must use unit testing; there are tools for static code analysis which will check code for most common problems, like copy-pasting for example. Finally, we are all humans, and different human beings have different opinions on a particular solution, that’s why code reviews by another person are sufficient. Those code reviews could reveal many things and it's not just senior developer reviewing a code of junior developer, the other way around works too. All of those tools could be combined with continuous integration or continuous deployment which will gradually drive quality up.

However, developers have to be given enough time to do all of those analyses. It just has to be accounted for at the planning stage instead of dropping those things into a backlog for another day when they have time. It seems like in the race for market share and sales companies forget that they delivering product to their users. In many cases companies usually spend large chunks of money on marketing and then when the product gets to potential users it’s full of issues, and then they must spend more money on marketing to recover from bad feedback and win those users back. It’s just large waste of resources to get first to the market with a bad product. "Lean" is the buzz word today, but it actually means delivering an almost perfect product with only must have features rather than delivering half working product with all possible features user would need.

How do we control quality? Would that mean hiring more QA? Not necessarily. I think one of the best possible ways to control quality is to educate developers. Let them learn about tools they have at their disposal, don’t let companies sales cycle to drive product's schedule. Companies need to reserve time to let developers participate in conferences, let them browse forums, even subjects may not necessarily benefit those company in a short run. It's investment which will grow developers and then eventually make company's product better. Large companies already started to understand that and already doing it. Surely startup would always say: "Large corporations have millions of dollars at their disposal to do so, but we don’t have any money right now". Of course, but it is still possible on a budget! Making learning a part of the company culture is one of the options on the budget and I think is very crucial to startup survival. A startup, for example, could make different members of the company learn about each other functions and spark up collaboration. In that sense being small is an actually huge advantage. For example, you could ask regular members of the company to take CEO seat for the day, and that person will run its business with help of real CEO of course. Encourage people to switch roles for some time, encourage developers to work with customers and listen to the feedback. Companies could push customers support specialists to work on product development and research tasks along the side of people from R&D department.

Those are just a few ideas and any company at any stage could come up with a handful of their own ideas. At the end of the day, every company is a single organism and just like human body all the parts has to organically work together. Driving one part of that body to death won’t give company positive results in long run, while surely could improve cash flow for an immediate need. For many companies hiring people based on skills they currently possess became a yesterday. To be relevant to the future, I think, companies need to hire based on learning abilities. Personally, I spent more than 16 years in software development industry and I saw new technologies evolving every day and then technologies dying as fast as they came to the market and so on, it's just a natural cycle. From a personal experience, I can tell that once you learned basics of how software being built, basics of engineering, basics of how it being executed by a computer it’s easy to learn any new methods and techniques and new programming languages as well. Many fresh developers missing those type of basics, they've been taught to code but no one explained them at coding boot camps on how things really work. For example, a person who does not understand how HTTP protocol works may be in troubles switching from say PHP to Java, but as long as you understand things at the base level you could rewrite same product in any programming language.

With raging war on talent in software industry ability to adapt and learn new things has become a must have skill for good developers. Companies, who able to recognize that, will definitely succeed in that war and will bring better products to the market which will eventually improve their bottom line. Stick to the long term goal and let's make the world a better place!

Comments

Popular posts from this blog

Ethics in software development.

Bitcoin - consumer's perspective