📜 ⬆️ ⬇️

Maslow's pyramid in software development

I propose to the readers of Habrakhabr the translation of the note “Maslow's Hierarchy of Needs of Software Development” , which I found on Scot Hanselman's blog.

I've been experimenting a bit with my diet and I think to switch to a “paleo” -diet. However, it is very presumptuous on my part, so, fundamentally, to change my attitude towards food. Nowadays only very wealthy people can afford to fully experiment in this area.

A person is not inclined to take care of the benefits of a higher order until the needs of a lower order are satisfied. Below is an example of the Maslow needs pyramid:
')
image

Recently, I spoke with the customer, where one good person was mostly concerned with the code style: the location of curly brackets, the use of proven solutions (“best practices”) in interface design, and a bunch of important, but hardly critical things. At the same time, unit testing was not delivered in their organization, unit deployment was performed manually, and builds were poorly verifiable (verifiable build).

To put it another way, he was focused on the problem “Do I consume enough vitamin A?”, Losing sight of the problem “Do I have anything to cook for dinner?”.

I thought: what if we project Maslow's pyramid of needs on our domain - software development? Under the cut is an example of what I did (thanks to Phil Haack , John Galloway , Jonathan Vanagel and Paul Stovel for participating in a brainstorming session).



Beautiful code


Paul put it best of all, saying: “At the top of Maslow's pyramid, self-realization lies ... to some extent I am convinced that we like to express ourselves through the code so that, for example, after a couple of years, a person busy supporting our project exclaimed, looking on code: “Class! That's because Scott did, right? “.

In fact, do you “write software” or do you “develop” it ("crafting")? At what point does development become an art?

This is a very noble and uniquely attractive goal. But, in my opinion, it is necessary to strive for it only after more pressing needs have been satisfied.

Restructured ("refactorable") code


How easy is it to refactor your code? Do you feel despondency at the mere thought of such a task? Does it comply with the agreements adopted for this programming language? Do you follow the “spirit” of the selected PL, using the appropriate design patterns, implementations and solutions of typical tasks? Do you use testing automation in your work?

Supported Code


Answer the following questions: is it really possible to make changes to your code? Fix bugs without tears? If so, after editing, is it possible to check if something has broken? How's it going with the unit tests?

Assembly and Deployment Automation


Are you able to deploy your system as easily as you build a version? Continuous integration (“continuous integration”) is undoubtedly a standard in the modern world of software development. However, there is something an order of magnitude more important - continuous deployment ("continuous deployment") ... with the ability to roll back to the previous version.

Change management


Do you use a version control system? Do your standards for working with changes are obvious and understandable to everyone in the team? How easily can you roll back the changes made in the code, mark the current working version of the code? What about branching and merging? What? Do you keep everything in the archives? Friend, don't be so ... Even stutter about class design and stop conjuring over UML diagrams until the version control system is raised.

Instead of an epilogue: the importance of leadership


The above points highlight the importance of having a strong and sane leader on the team. Creativity is, of course, good, but not always what is needed for the next step to the delivery of the project. A technical leader must distinguish when creative impulses are appropriate, and when it is time to seriously invest in fundamental development processes.

In other words: “Is there enough green in the diet of our team? Hmmm ... let's start by organizing dinner in general, and then we'll see. "

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


All Articles