It’s good that the creator of your favorite instrument didn’t listen to donkeys when he invented the bicycle



Last summer, the guys and I talked about our lib, which our customer did not accept and threw in the trash. We bombed, because we believed in our decision, and told the community about it - ordinary developers would definitely check it out and would not exchange for any nonsense.

Well, of course. We were literally washed away by a wave of criticism. There were many people who did not like my conceit and I personally - this is ok, I have no problems with them. I was infuriated with seemingly smart people who didn’t even want to look into the code and delve into the context, because they said from the threshold: “You guys made a bike.” And everyone picked up - reinventing the wheel is bad, terrible, nightmare, unacceptable, shame, execute them, lynch. Indeed, only an idiot will develop a new tool for a task that someone has already solved.

It amazes me how quickly the designs are carried out for this trick. I asked even the most critical and deeply thinking people - “is reinventing bicycles bad?”. They answer “yes” in less than a second.

Well no, men, that won’t do. Let's stop here, take a look around and think in detail.



I once did a front-end application at home for quite some time. I used the reagent, but I didn’t take it for state management - I didn’t have such a problem. Then the problem appeared, and I began to make "my bike." Smart uncles told me that I’m an idiot and I need to take Redux. I took.

Two months later, most of the project code was an adaptation of the editor to my architecture. This tool created a lot more problems for me than it solved. Not because the editors are bad - it just didn't fit.

A person from a large corporation made a decision to work with the state of the web application of a large corporation. Editors solves a bunch of problems that such an application faces, and does it well. And what is the industry doing? The industry says - Dan Abramov gave us the way. Now my website in two forms will use editors to work with the state.

Friend, editors are made to work with state - but not with your state. You don’t need a persistent chain of all slices of the application’s state, you don’t transmit the action on the network and you don’t do much more that the editor should automate. At the same time, using editors is not easy. You will have to reward a hundred kilometers of code to explain to the editor what your condition is, where and how it is updated, which changes are significant and which are not. So that the editors automate a problem for you that you did not have. Seriously, have you seen at least one vacancy for a reaction, but without an editor? Me not.

There are analogues - but they are also bulky. Sometimes the cheapest way to solve a problem is not to take a tool for everything, but to write a domain solution that is right for you. My god, typescript is powerful enough to write a basic mvm, mvc, or whatever you want in a couple of hours - so that it solves only the problems that you have. Make it come out cheaper and faster. And maybe your solution will work cool, grow with the project, and become the standard.

But this is forbidden - because other developers told you: “Man, do not reinvent the wheel. Just take the most popular on the market. ”

In my project, for example, MobX was more suitable, but also not super. It would work best for me exactly the bicycle I invented. But it seemed that they took away my right to make a good decision, because no matter what I did, no one would even listen. No one is ready to believe that it will turn out better and cheaper.

This creates a vicious circle. If everyone will use only the invented before them, then progress in development will stop. They tell you, if you want to do better than in the finished - do it at home in your free time. You say ok, you start working at night, you finish it, you go to tell people about your decision, but no one is even ready to look under his hood - “this is a bicycle.”

But in fact, all we do is invent bicycles. “Bicycle” is simply a harmful rhetorical ruse to justify your laziness or to assert itself in a dispute with another developer.

The creators of the editorial, react and mobix - after all, they also "made their bike." Well, what, unless by the time the angular appeared, we did not have a library for working with the browser UI? Jquery knockout This is also great, by the way. After all, there was always vanilla js and a browser API. So why did these idiots solve the solved problem?

Douglas Crockford invented JSON. The incompetent boob doesn't seem to know that we already have XML. Long before him, programmers invented a way to exchange data. Who did he think he was there?

Bad examples? Well, of course. Indeed, in your heads, people from large corporations have the right to invent bicycles. They have, but you and I do not.



The most enterprise IT in the Russian Federation is banks. And if you look at the technical products of any Sberbank, Tinkov or Alf, you will see - they all have the same applications with approximately the same design. These are almost identical systems. The same for the user, they are made in different ways, on different stacks, by different people. All of these banks have their own unique development approaches. The global IT giants also have a lot of the same products. When big bankers get together and decide that they need digital products, they hire an army of developers and force them to do the same things that other banks have already done, for the hundredth time - but in a new way.

This is all about bicycles.

There were long-lived problems in every project that I worked on, because something was not automated. Because once someone was told - do not reinvent the wheel, just close the ticket. Yes, the business is waiting for its tickets, and it needs to be fed, but let's be honest - I know that we always have more budget than the business thinks.

I have everything just with the money of the business that I spend on it. A big business has a lot of money, and it drives them into development. This huge pile of money can be spent by developers who solve problems, and at the same time conduct some research. And managers may spend, but managers will spend them to pay for our senseless sitting in millions of useless meetings. Business has already spent money on development, and if you do not turn it into programming, then business henchmen will spend it on their stupid processes that are not needed by anyone except themselves.

I've seen enough of dudes who “work” for 18 hours a day. And I know well that if you stayed in the office for 18 hours, you will really work as much as if you were sitting 8.

Our collective manner of deceiving a business is explained very simply - it does not fumble. Business does not understand why we should not do features for two weeks, but put legacy in order. This is normal, and we know how to resolve it. You work for a business for half a day, and work for a project for half a day. I came to work, closed the daily norm - that's all, you have a carte blanche for research.

While we are solving practical, momentary Wishlist business - he is ready for us to pay for this work. In fact, the real development begins where there is programming for the sake of programming. When you revel in pure mechanics for the sake of fucking nothing, a momentary click and engineering enthusiasm, because this is the only way the boundaries are pushed, new ways and tools appear to solve practical problems again, only better.

When I develop something, something that has already been done, I don’t re-invent it exactly like theirs. I come up with my approach. He is always something better, always something worse. And it is always an invention. The vast majority of my inventions go to the dustbin of history, but there is always a chance that I will invent something really cool. Even if in passing, even if I myself do not attach any importance to it, it doesn’t matter. Someone will see, somewhere else, the industry will receive a new standard that will begin to solve our problems. Only this idea drives me to write code.

The open source also has many of the same projects. Those who solve the same problem. Are you ready to say that everyone who makes them is fools? I'm not ready. When I want to make a batch for serialization, I get five or six top solutions, each of which has unique advantages. Sometimes one of these advantages is critical for me, at such moments I am full of gratitude to the guys who decided to make this “bike”.

When they say to me that everything has already been invented in development, I ask: “what, haven't we got any problems?”.

Do we not write a day-to-day boilerplate? Do we not take out automation over and over again when we fill our files with the same code? We are still doing a lot of what the machine could do now. And we do this because we have not yet invented approaches, because we always insert sticks into the wheels of bicycles.



Watch my podcast

All Articles