📜 ⬆️ ⬇️

Minifest (minimalist developers manifesto)

From translator

The other day a mini- site minifesto.org appeared on the network with a sound, in my opinion, abstract presentation of the experience of approaching start-ups (and of development as a whole). The manifesto of the text softens from the beginning to the end, but this does not make it worse.

Again I apologize for the lack of translation of the phrase “computer science”.

Briefly




Fight for Pareto's Law


Pareto's law says that eighty percent of the result is achieved by twenty percent of the realized capabilities of your application . Keep this in mind when planning your next sprint / goal cycle.
The best engineers are those who can estimate the costs of implementing the exhibited requirements so as to save 80% of the effort for the future.

Crush them for yourself. This is not an army, in our industry you are paid for what you think and take on responsibility. Always voice your position if it seems to you that the requirements are superfluous.
')
The worst code you can ever write is code that is not used. For this, there is an abbreviation YAGNI (You Are Not Gonna Use It) [literally - "you will not use it"; here is given literally in accordance with the original text, approx. translator] .

The best code you write is code you won't write. Just because it can not be wrong.

Prioritize


There is a way to correct the mistakes, which I call “precipitation” . This is when the error is corrected by the accumulation of other errors. There is another way that I call "erosion . " This is when the customer changed his mind. The very examples in which prioritization and endurance will protect you from unnecessary work.
After all, minimalism is not the way to do work. Minimalism is a way to focus on the important .

Best the enemy of the good


Look for perfection, but not right now. Iteration is your friend who gives you the right advice at the right time.
First, just do it , then do it right, then do it better.

Engineers often think that the world can be modeled, but the world every time shows that it is not. It is impossible to design any rather complicated system without a hitch. Design is always evolutionary .

Treat everything as an intermediate stage of your work. Do not strain when something is not working as it should - remember the law of Mosher , which says: "If everything works as it should, you are left without work."

Kill in the bud


Destroy . The faster the better. Do not be afraid to throw in the trash what you have been working on for several months.
When you start from scratch, something new appears by itself. It comes from your experience.

Constantly evaluate what you are doing. This is what is written in the book Lean Startup . Develop your MVP (Minimum Viable Prototype, Little Live Prototype). Check it out. Not suitable? Throw away, you already got the experience.
The faster you make a mistake, the faster you learn.

Increase your value


No one can know everything.

Ask yourself the question - how can you help the team? What does she need most? Which of you is an expert in scalability? Who knows your programming language thoroughly? Who cares most for the product? Who coordinates the effort?

All teams are different, so you have to adapt and choose, look for the strengths and weaknesses of you and your team.
Learn to love one thing and go for it . Try to feed yourself correctly. After all, you yourself like what helps you solve your problems, and not something that somehow does your work.

Of course, it is easier to work with those with whom you can share the task - but the real strength of the team is in complementary people. Remember, at least, Team A.

First basics


At some point in our lives, we will understand the importance of the basics. For some reason, it is assumed that a return to basics is a topic for older people. Try not to be silly and do not wait. Put on the basics right now.

In the annals of Computer Science there are time-tested excellent solutions that you can apply in any new project . We must try to think consistently, starting from these decisions.

Paraphrasing the famous proverb: there are three critical aspects of software development — architecture , architecture, and architecture, in that order.

Examples of such fundamentals are the division of responsibility , the general theory of systems , the design patterns of the Gang of Four , the general patterns of assignment of responsibilities , the principles of SOLID , pure code , the principles of Agile , algorithms , data structures , HTTP specifications , etc.
Of course, you can plunge into some framework tests of unit tests like Jasmine, JUnit, Mocha - but, of course, it will be more useful to learn how to write code that can be covered with tests (for example, isolating the code from the state and reducing the connectivity of components).

Look from different sides


The simple is obtained with much greater effort than a complicated one. Minimalism requires creativity in order to find a way to do more with less effort.

Technical skills are responsible for complexity, creativity is responsible for simplicity. Creativity is like a “research fun”. Enjoy the opportunity.

Do not try to work more, try to work less, but more intellectually. Think! Think about what you are working on. Disable autopilot. Leave the comfort zone . Take control of your hands.

Do not be afraid to lose the status quo. Remember that the world around is built by people who were not smarter than you, they just believed that such a world is possible.

Of course, people may start thinking about you as an odd person - simply because you will do strange things, but you cannot become a leader until you can do something strange and innovative. Something that no one else before you did.
For an example: I am sure that each of you thought that a lot of time in the company is wasted on all sorts of meetings and meetings. Well, on those who talk about everything and nothing. That is what prompted Jeffrey Bezos (founder and CEO of “Amazon”) to approach the holding of meetings in his company slightly out of the box . When all participants in the meeting meet in the meeting room, they have 30 minutes to read the meeting theses in complete silence. And only after that you can proceed to the discussion.

Syntax


We write code for people , not for machines, syntax is the basis of their interaction.

A good example in Pasteur’s quotation: “If I had more time, I would have written a shorter letter.”

Try to give methods shorter names, and classes - as little as possible responsibility. Reduce the number of parameters, avoid obvious comments ... Your work is finished, when nothing can be thrown out of the code.

Do not tangle


Any software development problem can be solved by adding another layer of abstraction. Anyone except redundant abstraction . Unfortunately, this limits us in the complexity of the architecture and makes us look for a certain balance between simplicity and redundancy.

Abstraction is great. It allows you to create a new semantic layer in which you can accurately express your thoughts. But it also for some aspects of the activity (for example, for refactoring) complicates the understanding of the huge and over-detailed scheme of the system.

That is why it is necessary to look for natural points at which we can make a dissection and try to consider some compromise solutions .

As an example: the “root / leaf” paradigm of the domain model, the “Controller / tools” paradigm, the principle of “ high density - low connectivity ”, inter-level RESTful interaction interfaces .

Clean out the left-in-case


There is such a thing - “abandoned, just in case” [in the original - “kippel”, approx. translator] . This is what we leave just in case, but never use it again. In your home such a bulk, however, as, certainly, in your code. Any inherited methods that we are afraid to remove due to the fact that some part of the project may break; the instantly needed libraries that we will never need again; outdated comments ...

In human nature itself lies the fact that we have to create complexity in order to heroically simplify it later. It is necessary to periodically go over the project, find the “abandoned, just in case” and destroy it.

Minimalism fights with distractions from the core.

Source: https://habr.com/ru/post/176813/


All Articles