Evolution of Tech companies to Branding and Financing Bureaus
And the stagnation of innovation in the West
The other day I was reading around in HackerNews and found this article about how companies are getting more and more bureaucratic and become management companies instead of technological ones. It hit me deep, as I had that kind of intuition already, and that intuition was the reason I took the risk of becoming a contractor and start working in the start-up world. Never regretted that. And this is my experience and how it led me to arrive to similar conclusions as the article above.
By the way, I strongly recommend to read the article no matter what you think about this or about your job. It is interesting and important in the long term. Hopefully, we can change things slowly but steadily towards the good direction.
In my years as a software developer, engineer or whatever you want to call it, I had the sensation that the idea of the job I had in mind was not real. What I mean is that in my early years, it felt like the job consisted in fixing bugs, maintaining code and not much more. Obviously I knew at the time that my experience and knowledge was not enough to being involved in design or architecture of software solutions, but the sensation was that even those that were in those positions were pretty much building on top of something that was already there. Where was the “sandbox” part of it? Where were the toy projects and prototype of ideas that I though developers were doing every other day? The closer to that I was finding were “experiments” like:
setting up configurations in VS to run debug mode inside it instead of in a virtual machine…. and it was way more slow, sluggish and painful anyway.
some tweaks and scripts to create different reports for customers.
new processes to improve something that didn’t need to be improved as each of the devs had some script that did it for us.
“projects” to use more modern versions of libraries or tools already in use, so those could be used for production development, because they had better features that were not used (not kidding, updating for the sake of it).
I looked around and all the “amazing” companies around me were essentially doing this kind of work. At the time, I shrugged it off by thinking: “I am a junior and don’t have the experience yet” and tried to learn more and more. However, I kept noticing that every time I talked with some senior developer, or people in other companies, they were talking big as in “we are developing the lidar software for autonomous cars”, or “we are working on the cloud infrastructure”, or “we use cutting edge technologies and try new things every day” and similar things, but when either working there or asking deeper questions to understand what I needed to learn to get that job… well, they were basically doing the same maintenance job, or regular bug fixing of something that was developed by someone else. Essentially saying they were developing cloud technology just because they were using AWS in their work, or research in ML and AI because they were learning how to use ML libraries for their data.
On top of that, I kept realizing that when I joined some of those companies that advertise themselves as the innovative ones, the reality was more than disappointing. The last one, one of the biggest providers of components, electronic systems and software for “smart cars”, like cameras that detect traffic, potential collision trajectories, traffic lights and signals, radar sensors… that were used to implement safety systems as emergency braking, cruise control, etc. I joined to the team in charge of developing the camera system for one of the big car companies in Europe (and the world, by extension), as a software engineer for embedded devices. So as I was told, the team would be in charge of implementing the software for the front camera, meaning the above: lane detection, trajectories of other cars to prevent collisions, traffic signal detection… The dream job!
I imagined I would have to step up my game and start learning all about image analysis, modelling dynamic systems, low level development such as interrupts, memory management, ports, microarchitecture of the devices… I was excited as a child with a new toy. Boy, how wrong I was! First problem I found was that it took ages to have any IDE installed in my laptop, not to mention having access to the source code repository. In this big corp the IT team was… well, less than efficient or knowledgeable. As a simple example I would say that they only had 2 main profiles set up in the laptops: the one for IT that had admin privileges (totally fine) and the rest. By that I mean that software developers had the same privileges (better said: no privileges) as, for example, someone from HR or finantial. This meant that for installing anything, or running any executable, you had to send a mail request form to IT explaining the thing you needed, why you needed, and for how long you needed it. If it was software, you better hoped it was already in a sacred list of allowed software, or you would need a confirmation letter from 2 managers of your team and an explanation of why you needed that.
In my case as a developer, I needed to install Visual Studio, Notepad++ and other editors and tools. Well, I had to make a request for each one of them, including small tools that were single executables. And each request was processed independently, one after the other with days passing in between. In each case, I had to agree with one of those guys a time when he or she would connect remotely and install the tool or the software.
But, sadly, that wasn’t all. Because a tool like an IDE once installed, is fine, it works. The problem was that if I compiled something and wanted to test it or run it… yeah, you guessed it, it was blocked because I didn’t have privileges to run “non-registered executables”. This settings were for developers… for developers!
Then I learnt more funny things: the camera was made by a different small company and it had in its firmware the image analysis software, meaning I didn’t have to do anything related to image recognition. Bummer, but ok, at least I would be able to develop the code that got that data and analyze it, the logic dealing with interrupts and alerts in the system, communication between ECUs… Nope. I found out that we would be essentially reusing the code of another project already in use. TL;DR we just had to modify the software so it could go to the right bus, pin or output of the new device, and variables would have the correct name. But that was all.
But how that was possible? What were people doing in there with all these obstacles in the way, even before a single line of code was written? Well, as an example you should know that in the team we were 3 developers and, be ready, 3 managers. Different titles ending in manager, with overlapping responsibilities between them, so messy that sometimes they didn’t really know who had to do what. Eventually I moved to another team in charge of the development for lidar sensors, just to discover that it was essentially the same. So much the same that the most interesting thing they did in a year, was refactoring the code, that was originally developed by a small company that was contracting for the big one. And yes, they were the ones developing new features, implementing new detection algorithms, modelling and playing with the physical device. This team I was in only had to rename some things and change superficial details. Again, maintenance and simple bug fixing.
The conclusion of the 9 months I was there was: they paid me for doing nothing but reading e-books, watching youtube (until it was blocked, because apparently everyone was so bored they only did that), and writing useless paperwork every other week. Heck, they even asked us to fill a table each month with the times we arrived and left for every day… and they had badges to enter and exit the building! That was the “big technological company” experience.
Why? That was a question I couldn’t understand at first. But then it hit me. They. wanted to have in house developers for two main reasons:
To charge their client by the amount of engineers they had in each team, and
in case some typos or if someone forgot to ask for some small non-functional change in the last iteration, they didn’t need to wait for the other company to deliver, as the contract was quite strict in regards of how the delivery was done.
At that moment, I was puzzled but started to realized that the bigger the company, the more likely it would buy software and technology to smaller companies. It made sense in my mind, as the bureaucratic structure inside it made almost impossible to be efficient or good enough to develop software in house. Even if all of them claimed to be Agile by using some kind of evil variation of Agile. Well, it was Scrum, that is the corrupted version of agile ideas, designed specifically to be sold to managers and other non technical bosses so they can keep doing the same top-bottom thing but saying they are agile.
So, how could I find that someone else? Where was that dream job I wanted that meant to work, if not from scratch, from the bottom of a new system or solving a new problem that nobody else solved before?
As it was stated at the beginning of this text, I got an opportunity to move to a startup. I took it and never regret it. Actually, I am worried sometimes regarding the future as I realized that going back to work for such a big corporations as an employee is not an option anymore. Not for me anyway.
I saw this in other industries. I mean heavy machinery and Aviation. When some build a rocket you do bureaucracy.