- The software industry still has a long way to go, and it can borrow a thing or two from more mature industries.
- Make sure you define the roles and responsibilities necessary for your project to succeed and hire the right people to fulfill them.
- Clearly define the development process (it’s helpful if you have the right people to advise you about that).
Disclaimer: the opinions in this post are mine and are based on my own experience.
Putting aside the “community message” at the bottom of the poster below, we see these kind of signs in every construction site we go by, and that’s a good thing, because it gives the impression that the professionals trusted with developing the project know what they’re doing, and they do. At the very least, they know who is responsible for each aspect of designing and developing the project, whether it’s the architect, contractor, project management, or electrical engineer.
Therefore, It only makes sense that before starting a new software project, we should at least know the roles and responsibilities that are required to get that project going and the people and/or organizations that will assume those responsibilities. To me, this seems the logical first step before starting any real work – casting. And indeed, in every mature industry, this will be the first step, whether it’s the construction of buildings, filming of a movie, designing electronic devices, vehicles, planes, etc. However, In the software industry, this isn’t always the case, and if you get the casting wrong, especially in the management level, everything else won’t matter. For example, in one of the companies I consulted for, the CEO decided to recruit an accountant for the position of the project manager. That person had no knowledge in software engineering and did not possess any management skills. Since then, every new employee hired by that manager wasn’t suited for the job and the rest is history.
Ok, but why is it so?
I believe there are several reasons for this:
- Our industry is relatively a young one, especially when compared to other veteran fields of engineering.
- Software is “soft” while other industries are “hard”.
- There has been a shortage of talent for quite some time now.
- Companies seek to save money, and, as a result, often aim too low.
A young industry
Software is indeed a young industry, especially considering that computers have only been around for 70 years or so (wow! time sure fly!) and the advancements in software are tightly coupled to the advancement of hardware. Moreover, computers keep getting faster and cheaper on a daily basis, and faster and more capable computers create new opportunities to develop more sophisticated software. Regardless of hardware, software also keeps evolving faster and faster, to the point where it’s extremely difficult for software developers to keep up with recent advancements.
The fast pace, at which software advances, causes confusion when trying to decide on the “best” project management methodology for each project, be it SCRUM, Kanban, or SAFe, and while the jury is out on that matter, many companies still struggle to find the “most” suitable process to steer their development while others have no process at all. Since not having a clear process makes it hard to define the roles required for running the project, it only makes sense that it’ll be hard to know what to look for in new candidates. As an example, if you decide to go with SCRUM, you’ll probably need a scrum-master and a product owner, but if you have no process at all, you won’t know that these are the roles you need.
Software is soft
A software system (at least any system that has real users) keeps changing during its lifetime while actually being in use – more so than tangible products like a car, a building or a smartphone. Some of the reasons for this are:
- Customers and users keep coming with new demands.
- Bugs are being detected and solved.
- Quality attributes, such as security, scalability, throughput, and latency, change.
- New regulations, such as GDPR, apply.
There are many reasons why software systems must evolve over time and accommodate new requirements, but I think the most important one is that it can evolve.
To be fair, it’s not so much about the ease and cost of changes as it is about the speed at which we can push those changes to our users. For instance, with a website, a simple refresh gets you to the newest version, and with a mobile app or a desktop app, simply update it from the app store. In short, the “soft” nature of software poses a challenge that other, more mature, industries need not face.
A shortage of talent
The software industry is rising and has been rising mostly steadily ever since it came to the world, and until we’re all replaced by code-writing bots (or not), it will continue to rise disproportionately to the growth in population. This is to say that we are in a dire need of as many engineers as we can put our hands on – even if it means we have to settle for their quality.
Hiring junior engineers is not a bad thing. In fact, it’s a necessity. An industry cannot grow without juniors and a senior developer must start somewhere. However, this does mean we need at least some more experienced developers to guide and mentor the junior ones and, while this seems obvious to most of us, it really isn’t, especially since many companies (mostly startups) can’t afford to hire senior developers. OK, but why is it so bad, you might ask? The best case scenario is that the project will fail. The worst case scenario is that of real danger, and us developers, as Uncle Bob says, have important ethical responsibilities to write quality code. What happens when we don’t?
- Private and personal information leaks to the public.
- Identity and account theft.
- Credit card frauds.
- Confidential information is disclosed.
- Autonomic vehicles and drones get hijacked.
- People die.
The software industry, is a young industry and highly dynamic which takes its toll on its development, but the most basic step towards a more mature industry is the casting: hiring the right people for the job, or at least getting someone to tell you who are the right people to hire.
Whether it’s waterfall or agile, monoliths or microservices, big-bang release or continuous delivery, the one thing we must get right is the clear definition of the roles and responsibilities required for a software project and the casting of the right people to these roles. By doing so, you will give the project a real chance and avoid throwing money away. One way of doing that is investing more in the hiring process. Another option is to turn to seek help with an experts company.