freelance - you're doing it wrong!

    Good day, dear habrozhitel, my name is Yura, and today I will tell you about the problems of high-tech offspring of remote work - freelance, namely the development of mobile, desktop and web applications, layout and design. I have been working in this area quite recently, literally since 2008, and I have accumulated quite a lot of good and bad experience. The purpose of this publication is to show the difference between ordinary employees and freelancers, as well as to show the main organizational problems that arise in the development and design of software. I hope this post helps clarify some of the manufacturing points that might not be entirely obvious to developers and their management.

    The judgments in this article are subjective - a continuous concentrated “gag”.
    They are based on my personal experience and the experience of the people I communicate with.

    Further multibook

    I apologize in advance for the confusion and the oversimplified nature of the story in the article.
    I understand perfectly that there are many people for whom false scientific formalities and officialism are too important, so you can simply not read.

    The main causes of conflicts and organizational problems are

    1. Compensatory processes of psychological problems

      • I want to be the most important and / or the smartest ...

        The position of an adventurer player requires the quick satisfaction of his desires and needs.

      • I want to obey ...

        The position of the martyr victim requires suffering, not any real benefits.

      ... and not develop quality, competitive and reliable products

      Of course, when both groups of people find each other - they work for a while, and are even able to produce products. That is why no sensible start-ups were released on the territory of the CIS about which it was possible to tell grandchildren, and most people migrate - it is often customary to solve problems intensively rather than ignore them, or to increase staff in vain, and the very concept of a problem is by definition completely different. However, here it’s also customary for a startup to call names of any young small business in RuNet, so we have, comrades, have survived ... In principle, there are exceptions, but you can count on your fingers: Yandex, VKontakte, Odnoklassniki yes something dying convulsions twitched, but something began to do in the last 5 years. These are all offices for which an intensive solution to most problems is characteristic, and it’s difficult to compensate there,

      Unfortunately, we live in a sick post-Soviet society with rather primitive book problems on which it is also customary to earn a lot of money. These problems are transmitted from generation to generation, and this is strongly encouraged by the environment and is most often taken as the norm.

      As an example, I can give a group of "help" in the framework of the average "training" or psychocult, as it is commonly called in the States and Europe. Instead of solving the problems of a specific group of individuals, they are told that they do not have these problems, they stop compensating, and as a result they work with double enthusiasm, there is no talk of real exhaust at first. When the monkeys narrow their eyes under cocaine, they ask for more. In general, this is a dependence on primitive illusions that only slow down, but do not stop, compensatory processes. The volcano will still rage, and how it will get angry ...

      There are exceptions to this rule, but usually no one conducts an audit of psychological training and the work of a psychologist within the office. Trainings, most often, are the requirements of some foreign bosses.

      1.1 Communication problems

      Most often communication problems arise due to
      • Inadequate self-esteem and inadequate perceptions of people
      • Separation of "friend or foe"
      • Team role mismatches
      • Lack of resources - time or money

      The first three points are most often compensatory processes that lead to communication barriers with subsequent conflicts. Lack of resources often leads to isolation and neglect of existing problems without any desire of management to participate in the product development process.

      It is especially important for a freelancer to deal with communication problems already at the stage of developing requirements, or immediately at the first acquaintance. The features of the market are such that more than half of the teams are built absolutely spontaneously and inappropriate behavior on the part of the management is absolutely mundane, and the minimal discrepancy between levels of trust or expectations leads to quite large conflicts. In any case, the issue of identification and resolution of communication problems is worthy of a separate article.

      In the case of remote work, the most important factor is the equality and distribution of roles. It is important for management to pay attention equally to both remote and local employees - to make the resources, their work results and plans public and available for general discussion, to try to transfer local employees to the remote and back to prevent social inhibition .

      Often you come to a team and don’t understand what people eat their bread - the DB model is not normalized, noodles from the “re-polished poltergeist” seasoned with a pair of “divine objects” with “singletonization” of everything, a person who is very fanatical about his creation and tries to lead you not able to withstand any criticism. He really wants to lead, and those who did not even test his competencies above. Therefore, I just stopped working with PHP projects - the percentage of amateurs is too large.

      Roles in the team can change as projects are implemented and this can be used as an additional means of motivation and strengthening cooperation.

      Next, I'll look at a couple of basic cognitive biases that I have to deal with all the time.

      I almost always put an end to people who insist on a "first personal meeting."
      Due to their amateurism, they were thrown many times, but this does not mean at all that such a contingent is ready to learn from their own mistakes. The first personal meeting means that they need to create a positive impression, with which they will then compensate for any subsequent irritations due to delay in terms, lack of a visible result, etc. They do not want to be part of the process, delve into its components and make efforts in order to get the product that they really need. It’s easier for them to create and believe in the illusion that “this smart guy will solve all my problems for money”, and you yourself perfectly understand what will happen next ...

      I also put an end to projects with phrases of the type “it's all very simple, for a professional it is 2 hours of work” with penny budgets. This is usually written by amateurs who believe in supermen and justify their rogueness. Of course, they may have some technical help behind them, and they themselves can be able to do something, but if they are so smart, let them do it themselves. No matter how you try, you will not hold out to the abstract superman in a vacuum, in any case, do not live up to expectations, and this will be a good excuse that you are paid a penny. A similar opinion is formed when one amateur meets another, and they very superficially argue the timing for the implementation of any tasks. Again, these deadlines are broken, not the fact that the problem will be solved at all ... but the mess about simplicity and 2 hours of work in the brain remains for a fairly long time.

      People are not inclined to test in practice the skills of a freelancer about which “someone said well,” or who left a good impression of a person who is able to “do everything for money,” but these actually do not exist. You need to remember the development needs and try to understand what kind of experience a particular artist needs, and why is it here? .. Make a template project, cut money, and run on? .. But who needs such products? They are needed by greedy people who, to the extent of their underdevelopment, believe in the illusion of quick profits from publishing a product of any quality, and then what? .. And then ads in the style of "finish it ... finish it ... for 1000 rubles. without documentation and tests. " Such projects are carried out by people who are stuck on a single tool and are not able to develop further as a developer. However, often they are not able to develop as a person.

      If people cannot communicate normally online, they will not be able to do this live either.

      If the communication problem cannot be resolved, the freelancer simply “pours”.
      But it’s more difficult for employees: too many people are mentally tied back to their chair.
      Accordingly, freelancers who develop their skills and are not “stuck” in any specializations very quickly learn from the organizational mistakes of their leadership. But for a long time in one place they do not linger.

      A mature person is able to look at herself from the outside, try to evaluate the decisions made and their consequences, realize her stupidity and learn some experience. And the rest need a psychologist.

      Although psychology is not particularly developed right now, large quack clinics are being opened, working according to one method, which mystically solves all problems for money, and where is esoterics and where psychology still needs to be figured out. Therapy in some especially advanced cases can last about five years. One tablet from all diseases can not be cured.

    2. Lack of quality control

      • No requirements

        It is clear that any customer will start with a desire to solve a problem by developing a specific product for this. Strange, but often they begin not with the formulation and formulation of a specific problem, and the problems they want to solve, but with the vision of the solution itself from the point of view of the customer. Unfortunately, he does not collect “cars”, and he does not think what “forms”, “metals”, “parts” and “compounds” are better suited for his tasks. He did not go to the car factory and did not tell local workers what his real car should be like. He can say what he likes, but that doesn’t mean that he will get it in the end - others will ride his car, and they don’t need “cats and rainbow ponies”. Of course, you can say “the customer is always right”, but why release products that are then embarrassing to show?

        It is clear that no one will write 80+ pages of TK according to GOST for automated systems from the start, but the requirements for the project can change in the process of researching the sales market and target audience. So the development of requirements is a separate development process that requires direct communication with the customer and / or management, it cannot be carried out by managers alone, any point of view of not only the designer or programmer, or maybe even your relatives, is useful, the more views on the product and the tasks that he solves, the more accurate the requirements. Feedback from the target audience is more relevant than the initial requirements, which leads to their subsequent evolution. Usually, 2-3 cycles of requirements development take place before they are formulated completely.

        There can be any form of requirements - you can keep user stories, or you can simply record thoughts on a voice recorder or shoot videos, keep magazines, which you will then rewrite or make up user stories. In any case, one should not be strongly attached to the papers, it is necessary to formalize the intentions of the target audience, and not the ways of their implementation.

        This is how the requirements usually go.

        Why would anyone draw seven red lines?
        What problem are they trying to solve in this way?
        For what target audience is this functionality intended?

        Similar issues are resolved when developing requirements, and not by the customer on their own.
        Problems begin when the customer imagines himself the main boss capable of correctly formulating tasks.

      • No accounting for staff development

        For management, you always need to keep abreast, and the most difficult thing is to implement means of monitoring the development of personnel, not only freelancers, but also simple office and remote workers, of course, no one will stretch more than 6 hours a day in IDE’s even if it does, it’s probably in vain. But even these 6 hours are already talking about something. You can safely run some kind of Harvest or RescueTime - the results are quite interesting. Everybody drives away, and the leadership is the most. The numbers are motivating.

      • No tests

        For me personally, the sad thing is the frequent lack of acceptance testing, for projects in 1-2 bodies - this can save quite a lot of time. You click your hands - you don’t respect yourself. Acceptance tests are also a good indicator of job progress for managers. If acceptance tests are a must have and it is rather difficult to manage without them, then most often you have to refuse functional (modular), integration and load ones before the first release.

        Lack of tests, this
        • saving time and resources now (about 20%), but large costs in the future, naturally with an exponential dependence
        • cross on product support and BusFactor = 1
        • management's inability to think about product prospects, and give guarantees to customers.
          Rather, on the contrary, this kind of management is inclined to delegate responsibility to third-party vendors, to create vendor lockin and rather intricate dependencies with a bunch of side effects. Although in fact, the more ready-made uncontrolled structures are used to maintain the product’s operability, the greater the risk of component failure.

      • No repository

        If you come to work, it doesn’t matter either as a regular employee or as a freelancer, get ready for a large granite shard from which you will need to sculpt candies. Well, or not sculpt, and give choking to customers, perhaps even with a traumatic outcome. If management is interested only in profit, this usually happens. In order to saw granite, you need at least acceptance and functional (unit tests) with a source repository. Most often we have to rewrite both tests and code in parallel with the development of requirements. Naturally, without a detailed history of all changes, even to one person, this can be quite difficult.

      • No audit of existing solutions

        You need to understand how many people there are - so many views on the problem, and this is good. An audit of an existing solution within the office can bring many new fruitful ideas and solve a fairly large number of problems. The more a person “walks” through the code, the cleaner they are, and at least there will be no spaghetti code, bloatware and pattern-hell.

      • No refactoring

        No one writes perfect code with perfect architecture the first time. If this happens, then most quickly a person has already solved the problem earlier and faced some of its aspects, but even in this case he will come up with the idea of ​​“how to do better” and not let him do it - to kill the trust and potential of the project . On the other hand, without an external audit, such decisions end with the code “Public Morozov” in which no one can really figure out except its author.

        Software development is a recurring process. In general, according to GOST, for automated systems there are only 2 iterations: a preliminary sketch and a technical project, then design documentation is being developed. Although in practice, you usually need 4-5 before the product can be safely used and maintained. For refactoring, you must have tests and a repository.

      • No audit of resources and corresponding optimization of expenses / income

        People do not know how to profit from the product, assess risks, and spend everything wisely. It makes no sense to buy 100 servers with 64GB of memory each and with used screws of 500GB in RAID-10, when the project has only three dozen clients. There is no point in saving on the organization of processes, but any decisions made without discussion and external audit imply some risks, you need to take these risks into account, otherwise the money will go to waste.

        It makes no sense to store all honey in one pot - to receive money in dollars in the European Bank, to distill them into rubles, then again in dollars in order to pay for the next service.

        There are no things that you can buy and receive right now.
        Any consumable resource or service needs a stock, or the ability to compensate for its absence at the time of delivery. It is necessary to conduct comprehensive risk assessments, with the construction of a dependency graph of all resources.

    3. Lack of proven development methodology

      I recently wrote why SCRUM is not very suitable for the post-Soviet space. And the reason for this is just psychological problems and compensatory processes. People replace the analysis process with discussions, and suppositions are taken for facts. These are also various cases of cognitive bias in decision making.
      It turns out “Meeting for the sake of meeting”, “Code for the sake of code”.

      You need to understand that methodologies need to be adapted to a specific team and selected for a specific project.
      It’s not the managers who invented the methodologies, the marketers came up with the methodologies - this is another “beautiful candy” for the leadership that is unable to lead, and which needs guarantees from the outside that this “candy” will solve all their problems. So, a rather large number of abbreviations with three or four letters was developed, on the standardization and issuance of certificates of which people earn millions.

      Stop shouting “we have Agile here”, Agile is four fun rules that everyone wants to strive to improve the quality of software and the happiness of developers ... Agile methodologies are a set of abstract methods that can be used to achieve the goals of Agile. But this does not mean that they will work for your team.

      You need to start with something small - take the V-model and adapt it to Leanc Kanban 'ohm.
      Instead of building highly recurring processes, perform only 2-3 tasks at the same time on the principle of “divide and conquer", and then, when you finish 2-3 projects, you can already play with all sorts of SCRUMs. From the documentation, there are enough user stories, a description of the database model, descriptions of services in SOA , tests, and an API scheme in the Swagger 'e thread or JSON-WSP.

    4. Organizational antipatterns

      • Analytical paralysis - the development of abstract specifications is put above the development of even the rawest product implementation. The development of requirements and implementation are recurring processes, and trying to “swallow an elephant without chewing” is pretty stupid.

      • Cost migration - transferring the task of cost optimization to a potentially vulnerable partner or unit that may not be interested in this. In general, any contractor will be more interested in remuneration than in guaranteeing that a product will be developed and completed on time.

      • Cash cow - money should bring money, it’s not worth it to “eat” everything, spend profit from projects for the implementation of larger ones. There is nothing eternal.

      • Continuous obsolescence - porting poorly structured legacy code due to changing conditions or project requirements results in terrible expenses and delayed deadlines. This is probably the most typical antipattern for existing crutch projects in which "why rewrite, and what have we eaten our bread for nothing?"

      • Creeping improvements - the introduction of new functionality without processing an existing one leads to more side effects and “detonators” in the code.

      • Development by a committee - design without a centralized and competent leadership. This is found in 80% of projects in the CIS and in Europe. A lot of people gather and “poke a finger that is popular, they’re moving there”, they don’t measure and analyze anything, they make decisions in the style of “if it was used in a large project and it works there, then it will work for us as well”. The result is "a lot, but bad" and bloatware .

      • I told you this - ignoring the opinion of an expert by management. Such a situation arises when subordinates are more competent than management, and instead of changing roles, a conflict situation arises - only those decisions that they make are important for management. This is done in order to compensate for the internal tension that occurs due to a sense of inferiority.

      • Escalation of devotion - continued support for outdated solutions, even if their inability to current tasks is proved and existing erroneous solutions are shown. It doesn’t matter how far you go on the wrong path, it’s important to turn around and move right now.

      • Number management - the introduction of an excessive amount of surface metrics, the appropriateness of which is under great question. Managers and managers like it to imitate activities and justify their usefulness.

      • Vendor lock-in - lack of adapters for various vendor solutions, very strong connectivity with their functionality. As the saying goes, "no one has been fired yet for the purchase of IBM software." This is especially true for solutions based on Oracle and Microsoft - it can be quite difficult to switch to OpenSource later.

      • Mushroom management - the absence of sane elaboration of requirements with the subsequent requirement of solving various problems that are not directly related to the project and will most likely be rewritten anew. It happens because of the mediocrity of the leadership, which is not able to consider and accept any implementation options other than its own. Usually, then you still need to rewrite this 2-3 times and cover it with tests. My most hated case.

      • One knowing head is when one person in a project more or less understands all processes and makes reasoned decisions, and everyone else just observes. Without normal documentation, this is BusFactor == 1. If a person still inflates his significance, he turns into the antipattern “knight in shining armor”, even when he makes rather stupid decisions, everyone continues to nod his head in response.

    5. Architectural antipatterns

      I don't want to copy wiki or lurk . But in general, the problem is that people get stuck at a certain stage of development and tools, do not even work out the most common design patterns. I'm not talking about the difference between proactor and reactor, or about monsters like CQRS-ES. But you need to read a couple of books on templates on any one and immediately put everything into practice and cover it with tests, otherwise there is really little sense.

      The web has become asynchronous, maybe uneven, but everyone will soon have to come to terms with this. Mobile and desktop applications should always be asynchronous, perhaps we did not always understand this, since there were no good tools and the market requirements were many times less than now. The very question of asynchrony, reactivity andreactive extensions within the framework of CQRS-ES , and how to make friends with SOA then , is worthy of a separate article.

      I believe that the architecture of asynchronous multi-threaded applications should be worked out by all developers who want to release competitive products in the next couple of decades. Another thing is that this is a real headache, especially debugging and testing ...

      If you get into the project, the first thing you should pay attention to is
      • Normalization of the database model - the fifth / sixth form is already MustHave, and not the “third form is enough for everyone” as well as 640 Kb of RAM
      • Dependency Management - Composer / pip / Bundler / Gradle / npm / bower ... this is what should be in any project.
      • Continuous implementation - if the project is fragmented into a bunch of small services, you need to constantly test their interaction and deploy test assemblies.
      • Deployment of infrastructure and monitoring - the ability to configure a server for a particular service in a minimum time is very valuable. Now the trends in monitoring infrastructure have changed a bit - people got down from Zabbix / Nagios to Kibana and index logs from logstash / fluentd in ElasticSearch. Monitoring is a feedback tool for horizontal scaling and determining the scarcity of existing resources.
      • Profiling a solution - you need to constantly measure the speed and resource consumption of individual modules. Do not think that if you have a project on a node and you rewrite critical sections onto a wire it will be faster - measure, measure and measure again.

    How does all this usually happen?

    Consider the cycle of developers in nature, the main causes of migration of flora and fauna, as well as the most common tools and tasks for each stage.

    The concentration of "gag" very much "rolls over", you can just read item "3" from this list and go to the end if you break it.

    1 Basic knowledge of a technical university not supported by real practice

    At the level of the third year of Computer Engineering (CI), Computer Science (CI) and Software Engineering (PI), or even Automated Control Systems (ACS) and Telecommunication Systems (TS), unfortunately, most teachers do not explain the difference between related departments , even if more than half of the main items are the same. In the case of "non-computer departments" that focus on proprietary solutions, Vendor Lockin and empty theory, the situation is rather unfortunate - people often know a lot, but they can’t put into practice and adapt to existing development processes. Most of the applicants act "because it is prestigious," and not because "I know what I want to do, and how I will help these others," and this is rather regrettable.

    There are exceptions to the rules, and especially fanatical schoolchildren saw Sishka with home-made ATMEGA8 scarves ( TQFP , not DIP ), LUT'om, and simple 0805 SMD components. Arduino is part of the POP culture, and quite expensive, so it usually passes by. And already by the 1-2 course, such a contingent easily and naturally masters Cortex-m0 , Cortex-m3 and even Cortex-A5 A9 and ARMv7 ARMv9. In this case, administrative skills often develop and the advent of OpenSource software occurs between the ages of 15-16. Most often they are leaning towards ArchLinux or the more friendly Ubuntu / Mint (if they had money for Arduino). If this period has not been completed “at school”, then it is delayed until the 3rd and 4th year of the university, and everything ends with work in some more or less prestigious outsourcing.

    Most often, schoolchildren and students go in the direction of layout and development of simple sites on popular CMS, naturally, such solutions do not differ in special quality or stability, but they have a specific target audience. Administration skills are most often at the level of "I can put LAMP to work."

    In principle, for schoolchildren, all this proceeds rather chaotically, and what comes to hand will be read ...
    The first school holivar is “the best programming language”, or “the best framework / CMSka”. Unfortunately, a very large number of amateurs are asking this question. The truth is that there is no ideal solution - try everything, then you can pick up one more suitable toolkit for specific conditions and tasks of a particular project. To believe that your favorite SomeRandomName framework is suitable for everything - naive and risky enough for the customer, this is the children's golden hammer antipattern, and sooner or later everyone goes through it.

    Usually people in this period read books, articles, start their toy projects, learn something new.
    These classes are often returned during work, or during a change of job, for a variety of reasons, which will be described later.

    The problem is that it is not always possible to find people from whom you could really learn something, but as practice shows, the availability of information in our time almost eliminates this problem. It is important not only to receive information, but also to implement some simple things to consolidate. Bicycles can be written when, for example, you know most of the popular tools of various platforms, and you are sure that you are doing something new and it will be better than what it is. The thought does not come to one head - there is always something ready, it is better to check 300 times than to waste your own time, and sometimes because of prejudice and the time of the customer / management.

    Usually people start implementing their first projects on
    • Wordpress / Drupal / Joomla
    • C # WinForms ASP.NET
    • C ++ qt
    • Python django
    • PHP Yii / Symfony2 / Zend / CakePHP / Kohana
    • html5 / css3 / js jQuery Angular
    • node.js Express.js / Sails.js + mongodb

    But almost no one starts with java now :(
    Well, at least I somehow have not noticed in the last 3 years, although the language is quite simple.

    At this stage, people still do not understand how important testing is, how to ensure quality and long-term support, bad oriented in the existing design patterns and typical services of service-oriented architecture. Quite often one of the problems is the normalization / denormalization of database models, statistics on atomic counters and management application dependencies.

    from this place freelance begins, perhaps even remote work.

    2A project to learn

    If a person develops his skills on his own, develops his own solutions and conducts their audit, then this happens infrequently. The main feature of such projects is the presence of an established team, possibly even spontaneous. Any compensatory processes are slowed down due to the intensification of development processes, but they do not stop and are often expressed in the form of not-so-pleasant “initiation rites” for beginners.

    In this case, there are two possible causes of conflict situations:
    • Violation of the formed idyll with new approaches and tools.
    • Existing solutions are valued too high, including organizational ones. Optimization proposals or criticisms cannot be perceived adequately *.

    * Adequacy is generally a very popular word recently, no one knows what it means, but everyone is scattered - they understand that the situation with the psychological health of people is rather sad, and not everyone has enough to deal with their brain problems. In this case, I mean the inappropriate behavior of the individual due to cognitive distortion.

    Nobody likes to babysit, but the “mushroom management” in the “chimney” is also not a good situation - the publicity of existing resources and processes allows avoiding it. The main thing is to help management understand the difference between a sufficient amount of information about a project and its lack or absence.

    The main problem of the formed collectives is “initiation rites” and other “production rituals”. Making social connections can be quite a challenge. Ideally, all members of the team and leadership should have mutual empathy, and the implementation of existing tasks should lead to satisfaction, even if this work is not related to specific individuals. But these are just utopian groups, too much everyday problems affect work.

    Knowledge needs to be earned, since it is quite difficult to understand it in most cases and you need a more or less competent person to support.

    Of the tools now very popular:
    • Angular React and frontend build based on gulp + browserify / webpack
    • node.js solutions based on express.js / sails.js, and / sock.js for communication
    • Play2 and Typesafe stack, sometimes Xitrum
    • ElasticSearch and Kibana with logstash / fluentd

    PHP / Python / Ruby today is poorly suited to the modern requirements of the market, with its reactivity , RESTful services, rich front-end, push notifications for websites and mobile applications. An exception is ports under the JVM, such as jRuby, with their optimized compiler at the Project Graal level. I don’t know anything about Jyton’s performance, so I can’t say anything. Groovy is also pretty quick now, but I am deeply disgusted by the J2EE servlet sandwiches.

    In the desktop, now, in principle, nothing new, Qt and .net rule the show.
    Java and Air are less and less used for desktops, although I personally am thrilled with JavaFX2.

    People who start developing mobile applications usually do not start with them, they are either different J2SE, not J2EE, Java projects after which they switch to Android, or these are different sites on the jung, rails and node after which they switch to Objective-C / Swift and development for apples. Therefore, it is from this moment that the development of mobile applications begins, people should have an average income in order to steadily start developing for various mobile platforms, and there should be a lot of skills in the desktop and web.

    In principle, in such projects you can work long enough and get very good experience. But when minor conflicts arise because of management and organization problems - people most often go “further to study”, it happens that they remain to work “as is and suffer dissatisfaction”. Suppression of any conflicts leads to compensatory processes and cognitive distortions, which in turn do not reflect very well at work. For good leadership, it is important to understand when and whom to send for retraining of all wisdom, to provide materials and possibly even mentors. And people usually run away from the bad.

    Again, you need to understand that the money of people in such projects is almost not motivating.
    And the question of motivation is decided by personal and professional development.

    3Project "meat processing workshop"

    For such projects, the most important result is even the poorest and poor quality, simply because it can be sold. There is no normal competent leadership in them, antipatterns are very frequent. People who “work for food” most often get here - these are former students, or just lovers of frustrating abstract, unreasonable deadlines. History is silent about competence or even the simplest discipline and responsibility, so you need to hope for the best.

    People who work “for food” are not able to see the future, their main task is to receive any income, and not to prevent the headache of customers / management and, as a result, of their own. Their development quickly stops, they become rigid, and most often they are not able to produce quality products.

    This includes people who did not have an example of how "good" is done, or people who "wanted well, but it turned out as always." They can work long and hard and steadily receive their salary, as Victor said “the main thing is stability!” Well, we’ll leave the quality for later.

    The team is spontaneous, with a lot of conflicts and communication barriers, completely unformed. Due to the lack of audit and quality control, the budget is inflated 3-5 times, and all terms are delayed as well. The requirements for the project are minimal, and accordingly there is no documentation, no tests, simply because no one cares if someone understands something and that it works for a long time.

    In an unformed team, the defensive reaction will be the rejection of any innovations, followed by complete isolation. Naturally, no one will say directly about this and they will pay money, but everyone who is not lazy will be looking for a moment to “bake the white crow”. In the best case, everything ends with the scenario “children in the sandbox”: “here it is bad, let's not play with it”, without any discussion and adoption of subsequent decisions. The truth is usually these people are already under 30tnik ... If you do not quickly figure out the attitude and make appropriate decisions, a "mushroom garden in the chimney" arises.

    Such projects are characterized by a static rate per hour, regardless of the competence of the developer or his skills and role in the project, managers or team leaders can get 1.5-2 times more, simply because they are “higher”, and not because they have more experience . At the same time, their contribution to the project is rather doubtful.

    Here people measure experience by time.
    Experience is not measured by time, it is measured by the ability to adapt to the development conditions of a particular product and its team, solve problems in optimal ways, and for this: analyze, research, implement, measure, optimize product components, positioning and monetization. Accordingly, it is important for management to maintain the cyclical nature of these processes.

    You can darn sites on CMS for 5-6 years and enjoy life, imagine yourself to be a great person, and for amateur customers it is then easier to rinse your brain with these numbers and develop holey products. Well, yes, it brings money for food, and nobody needs anything else.

    Here, leaders, due to their amateurism and inability to see development prospects, cannot guarantee the performance and availability of their products. They tend to delegate any responsibility to employees and third-party services, they believe that in this way they can be sure of the product’s performance, usually no one thinks about quality. They believe that if we use this third-party solution for a couple (maybe tens) of thousands of U. Dmurdskikh E., then we will reduce the risks ... If we hire some kind of cool manager who was involved in managing teams with cool products - he will be able to organize everything for us too ... In fact, these are very big prejudices that only increase the risk of a complete failure of the project already at the design stage and the initial stage of implementation.

    One of my favorite special cases of such projects is “quasi-start-ups with pseudopods”.
    As one young lady with Luxoft said, in one mediocre presentation three years ago, “whoever has no startup, he’s a sucker” (literally). Uh, how did I then want to embed on ... though I wasn’t there then :( Given the primitiveness and sometimes the complete absence of Luxoft’s corporate culture at that time, this behavior of their employees did not surprise me. They started working with the community now, and the development of corporate culture - we realized that it’s not only “cats training”, but also attracts customers. There were even a couple of articles of indignation by their leadership on the Habré - again, people simply did not have the motivation and opportunity for personal and professional development. In any case tea, I am pleased that there was a rotation, and they decided most of its institutional problems,

    The concept of startup has become a part of pop culture, and more and more amateurs apply it to any small and medium business, in any way connected with IT. Again, you need to understand that startups are primarily tools for researching and creating new sales markets, and only then small and medium-sized businesses. Their advantage is that they can very quickly pay back five-year investments in case of success, and in case of failure, partially compensate for them. If you can’t give investors at least 10 times the initial investment in five years, then you have very serious problems.

    Standard issues that are not resolved in quasi-startup
    • Целевая аудитория и позиционирование — чем уже позиционирование одного продукта, тем проще управлять его сообществом и осуществлять поддержку. Никто же не мешает выпустить 10ток продуктов под различные задачи и целевые аудитории, как это было с atlassian и salesforce. Очень много сервисов в РФ тянет к Bloatware и «параноидальному-фьючеризму». «Проект будет полезен всем, и он лучше всего, что есть на рынке» — этот примитивный предрассудок я слышу очень часто.
    • Основное отличие от конкурентов и привлечение клиентов — к большинству проектов применяется свойство «очередной», и для целевой аудитории не понятно, чем он лучше того, к чему привыкли. Учитывая общую ригидность рынка сбыта, это очень критично для РФ и СНГ в целом, но не так критично, к примеру, для рынков США и Европы.
    • Вертикальное/горизонтальное масштабирование по требованию и мониторинг — часто возникает волна посещаемости, которая в 10-20 раз выше ожидаемой, нужно иметь возможность добавить быстренько железа и снизить нагрузку. Иногда перспективные проекты теряют достаточно большое количество существующих и потенциальных пользователей. Был такой сервис «спрашивай.ру» когда-то в 2009ом — он очень быстро лёг от большего количества школьников и студентов, после чего количество пользователей снижалось экспоненциально.
    • Долгосрочная поддержка и профилирование — нужно учитывать, что если вы разрабатываете продукт на 5-10 лет минимум, то и используемые инструменты этого продукта должны прожить столько же и сохранить обратную совместимость. В случае с Rails / Node.js / PHP / Python приложениями это довольно сложно. И опять же мерить, мерить и ещё раз мерить скорость работы и потребление ресурсов всего и всея.

    If these issues are not resolved, then the project is definitely waiting for a vague prospect.
    Although it is not a fact that there is someone in it who is able to imagine what will happen in a couple of years, or even in a month.

    Again, people can roam the "workshops" of undersites on CMSs and Bitrix for a long time, and this is a good experience.
    The worst thing is if they stay there for a long time. A change of perspective greatly contributes to personal and professional development, but it is too bad to change work too often - at least something needs to be brought to the end. You need to loop when a “problem” arises in the English meaning of the word - this is something insurmountable, a conflict that cannot be resolved, and everything else is an obstacle to the realization of the product.

    It is a lot of fun with the foundling manager, who stands in the way of communication with the customer and the subsequent development of requirements under the pretext of "I will translate everything into a clear language." Naturally, their contribution to the development of the project itself is very doubtful. Typically, such individuals do not have any competence in terms of quality control and long-term support, can not ask the right questions, and are a "damaged phone." It turns out that the development of requirements is delayed, and an abstract product is developed, which may have nothing to do with what the customer wants. Instead of formulating specific tasks and usage scenarios, they operate on “Wishlist” and “Pink Ponies”, because the wallet is thick and someone is drooling. Here they produce “irreplaceable” and wake up at 3 a.m. because something “fell off”. It’s difficult to develop skills

    If the customer / management in the "meat processing workshop" plays in the "most important and most intelligent", then there can be no talk about any development - these are people who avoid problems, they don’t solve them, they don’t get experience, and therefore they don’t develop . This is very well seen when emotional stress is ejected - the suppressed consciousness itself spills out the most rooted images in the subconscious, and people themselves, without realizing it, project what they think about themselves on others ( primitive projection- a cool cat, I have it “very angry and dissatisfied with what is happening”). They replaced the task of development with the task of obtaining material benefits. Not only will the brain cut “how to live,” but also any delay in payments will explain your any “failure”. If they are so smart - let them do it themselves to scratch their tongues - the brain does not need much. Trying to explain something is useless, as they will either deny any suggestions or criticism in their favoror in the subconscious mind they will simply hate themselves, and this hatred will be successfully projected onto you. Usually I simply ignore such and suspend any cooperation despite any agreements - my nerves are more expensive. Yes, “I’m bad” because I’m not trying to part with customers “for good,” but in this case it’s unrealistic. Being good for everyone will not work, this is obviously a very flawed position. If you have a solution to this problem - write in a personal. Psychologists advise just to send , and I depreciate - this is a subconscious blocking and suppression of the feeling of anger, which I compensate for by writing this article.

    Between the change of projects, most often people are looking for new methods of solving problems at their previous place of work, and also return to training and researching existing approaches and tools. True, the likelihood that they will again fall into the same fun place is too high. This will continue until they begin to analyze staff behavior, existing organizational problems, and the decisions that their management makes. If they succeed, after “enlightenment” they often fall into normal projects, but this is a matter of luck.

    4Small startup or outsourcing

    I already managed to talk about “quasi-startups” above, this is a case of a “meat factory”.
    And start-ups include people who have experience in good and not very good projects. These should be those who are able to implement everything in the shortest possible time and get the first feedback from the target audience for better positioning and implementation of the product. Otherwise, the startup’s tasks are stretched for boundless periods along with the budget, and investments are simply being consumed. Here you need a lot of experience in application development. Without an audit, any startup just eats money, and now, unfortunately, the majority are those. But to live and develop is quite possible. After a full-fledged startup, people almost never end up in a “meat-processing workshop." Unfortunately, often professional development at this stage completely stops, people get used to tools and approaches, and are very, very hostile to everything new - they become rigid fanatics of their decisions,

    In the case of outsoros, everything is more fun - it combines both “bad” and “good” projects. True, in conditions of intensification of development processes, most often staff rotation just happens and many problems can go away with poor leadership. Outsourcing is the case when you don’t have to think about organization yourself - a lot of people already do it for you, and in principle it does it very well, and if it’s bad, they’ll get rid of them quickly. There is a lot to learn in good outsourcing, and outsourcing partly simplifies the life of a developer. But this leads to a slowdown in professional development, and sometimes to a complete suspension: they feed well, there are bubblegum, problems are solved - life is good. Unfortunately, up to 30 people in such conditions become very rigid, and almost do not adapt to the new needs and tasks of the market.

    The main thing here is not to get stuck.

    5Becomes a cat trainer

    Teaching other people and sharing experience is an integral part of professional and personal development. If you have to audit other products or recruit staff, this is usually accompanied by feedback and the training process - you need to explain to people what they are doing wrong and how to do it so that there is a basis for further development. When they say to me at the interview “you don’t suit us”, I usually reply “why did you get the idea that you are suitable for me?” You cannot directly say that you are not happy, that means you yourself don’t know what you need, and the lack of personnel selection criteria is a sign of organizational apparatus disorders - solve your problems, then we’ll talk, ”and then a protective reaction follows - people go over on the individual due to the inability to recognize their mistakes. When I recruit staff

    The project manager in our time is most often become for two reasons
    • Owner / customer prejudices regarding competency
    • Family ties, good relations or a purchased chair
    Naturally, such leaders can only “hold onto the chair tightly,” and it is not in their interests to develop quality products.

    Exceptions to this rule successfully manage their projects, and can even implement a horizontal organization of authority. As my personal practice shows, freelancers who have seen everything become excellent leaders: they build teams and monitor the cyclical development processes. Although usually it comes to this very rarely and if we are talking about a developed personality who is able to learn from their mistakes and the mistakes of others, you still need to fill a lot of cones, the main thing is that this does not greatly affect the final products.

    Different personality types require a different attitude, and their motivational processes are very different. Some of them are very difficult to interact with others, and some compensate for their internal stress by procrastination. You can read a good article about procrastination here . When building teams, it is very important to pay attention to the tasks and characteristics of the motivation of each individual individual - not all are compatible with each other.

    If the leader “fails” with his post, then he will again have the stage of accumulating knowledge, from which he will probably not return to the managerial post, since the training processes are replaced by compensatory ones - many people compensate for the “loss of the chair” with a “glass”.

    6Opens its small projects

    When a developer goes through all the previous stages of development, and begins to teach others organizational and architectural wisdom - Zen is comprehended. If he has enough experience, he can start successful OpenSource projects, and even have passive incomes with their support. This happens extremely rarely, and this is the way of a person who “filled up cones”, or watched others “stuff” them. But this is the only way that is suitable for creating competitive products. So before you work with someone, it’s better to ask about the problems solved in the industry, and not about the number of products implemented on some framework, or using some kind of library.

    Well, I'm talking about ideal options, there are very few of them ...

    But usually someone spends a lot of money with burning eyes without any experience in organizing the processes of development, audit and quality control of products. Moreover, this happens, according to my subjective estimates, somewhere in 90% of all projects with which I had to work.

    Again, being a developer and understanding the organization of processes are two different things. But you can’t, for example, be a developer and go to managers or managers, or vice versa to be a good manager / leader and go to developers - as a result, under-managers-underdevelopments are obtained. There is no understanding of the complete and clear picture of production processes, the advantages of each particular approach and architecture, there is no understanding of the personal characteristics of employees and how much they are “compatible” with each other. Therefore, at a fairly high level of professional development, developers are managers themselves, and managers, in the literal sense of the word, need projects with poor organization, where people themselves do not fully understand how the product will be implemented, and what its long-term perspective is.

    1Learn what was not enough

    It is clear that developers are returning to the study of new approaches and technologies at various stages of their professional development. In the case of startups, continuing education is a very difficult task due to complex complex requirements for projects and very tight deadlines, but rigidity also makes itself felt. For CTO or team lead, changing tools and approaches is often akin to heresy. Well, in general, this way you can determine those whose professional development has slowed down or even stopped altogether.

    Here, most startups develop rather rigid personalities who are not able to adapt to the new requirements of sales markets, respectively, they cannot quickly rewrite and adapt existing project implementations to new requirements and manage the positioning of their products. In view of this problem, it is easier for people to generalize startups as a simple business that brings a ton of money from the air.

    And everyone is drawn to Agile as a "universal weapon" for shooting "free birds" startups.
    Again, the rigidity and compensatory processes of the pack do not allow people to simply "take and implement." So there are angry posts on Habr that " Scrum does not work", and I’ll say that it works only in the case of healthy teams in which BusFactor at least 20% of the staff - was crushed by a bus, and no one noticed. But metrics are usually used very simplified and" simulated ", which have nothing to do to development and design processes.

    What is the difference between freelance and full-fledged remote work?

    The main advantage of a freelancer over simple workers is the possibility of intensive accumulation of experience - he can observe “how not to do it,” and accordingly develop his professional skills. They go to freelance not because it is warm and comfortable there, but because it has become impossible to develop promising products in offices. Either there are sufficiently developed individuals who are able to realize the existing problems of the industry and how all this contributes to their development (in any way). Freelancers become “masters” simply because they have to deal with a huge number of problems that ordinary workers cannot face ... Kong fu literally translates as “hard work”, and that can be harder than realizing the number of problems that are inherent IT market, and try to do their job better than yesterday?

    Remote employees are usually easier motivated than freelancers - they have attachments to the real world and living people. They know that somewhere they have an armchair and a table, possibly very dusty ... which they can see a couple of times a week, or they may not see it. In many ways, this is for them a kind of privilege that freelancers do not have. Recycling is not characteristic of them, but it is also not a fact that they will delay the deadlines. The team treats them as equals if they see the work done and its value for the project, and it is important for management to ensure this publicity. In the case of freelancers - usually they don’t care, the threshold for joining the team and overcoming communication barriers is much higher. And they need communication many times more in order to feel part of the team, and this is one of the components of their motivation, and management also needs to think about it.

    Simple rules for working with freelancers
    • Freelancers are approached when everything is bad, and not when everything is good, and a qualified specialist with remarkable self-education should receive an appropriate reward. You should not treat them as people who can solve any problem for money, you need to understand that they also have their own motivation once they got to work, and it is important that they do not lose it.
    • If a freelancer is not able to give guarantees of his work or guarantee long-term support without his direct participation in the project, this is not the one you need.
    • There is no such universal tool that would solve any assigned tasks - people who think so just stopped developing.
    • There is no person able to work on everything alone without outside motivation, and you will need to take care of its availability.
    • Вера в самоорганизацию слишком наивна, у дисциплинированных людей, способных организовать свою работу, должны быть на то причины — просто «взять и организоваться» не получится, а что может мотивировать к организации труда больше очередной ошибки или провала?
    • Для фрилансеров и удалённых сотрудников важно общение, доверие и равенство. Их отсутствие выльется во внутреннее напряжение, которое будет компенсировано не самым приятным образом.
    • Нельзя просто взять переделать фрилансера в удалённого сотрудника — старые неудачи и привычки миграций очень глубоко проникают в мозг. Чтобы от них избавится нужно сделать его полноценной равной частью коллектива, а на это нужно время.
    • «Голодные» всегда требуют предоплаты, и быстро её «проедают». Не ловитесь на этот крючок — вам ведь ещё нужны гарантии выполнения работы?.. Лучше возьмите любого сотрудника или фрилансера, может быть двух, и попросите подтвердить свою состоятельность к оплате, и сказать всё, что они о вас думают. Чем больше о вас могут рассказать плохого — тем лучше, покажите, что вы способны учиться на своих ошибках, и требуйте того же от ваших сотрудников и партнёров.
    • Работа не должна быть хобби. Когда подобное происходит — она очень быстро надоедает и перестаёт приносить удовлетворение из-за обязанностей. Люди очень быстро «выгорают», а хорошего способа отдохнуть у них не остаётся.
    • Фрилансерам бывает очень сложно сохранить цикличность процессов разработки:
      Анализ/Исследование -> Проектирование -> Реализация -> Измерение -> Оптимизация -> Планирование.
    • Все допускали ошибки, прежде чем работать с кем-либо — нужно расспросить о предыдущих провальных проектах и конфликтных ситуациях, не бывает такого, чтобы всё было хорошо и все всегда были довольны. «Плюсики» на биржах совсем не показатель.

    А как же вёрстка и дизайн?

    Everything is pretty sad.

    Like people typeset in 2008, they typeset: a bunch of nested selectors and divs / spans, a bloated CSS object model, the absence of any hint of markup semantics. Take HTML5 markup, change DOCTYPE, and in principle we get the same XHTML as it was 7 years ago. I generally support the separation of layout and layout - styles separately, structure separately. I have a lot of disagreements with BEM lovers about this, well, like that . For myself, I developed a rule: “if there are more than 5 divs / spans in the page layout or if there are nested ones, this is not HTML5”.

    In the case of design, people do not understand the difference between layout, graphic design and illustrations, and industrial design and usability, and often confuse and generalize their tasks.

    Layout is not only knowledge of html5 / css3, it is also the ability to work with fonts and typography, knowledge of its basic principles and the ability to build vertical and horizontal rhythms with the ability to adapt them to a different sheet format (screen).

    Usability tasks are tasks of industrial design, and not illustrators who draw beautiful illustrations, or graphics that draw icons. The main prejudice of the assessment of UX by the manual: if it looks beautiful, then it should be convenient for the end user, and the information is perceived simply. In fact, if we compare the clarity of the selection of contexts and the amount of information noise, then most promo pages usually have 2-3 contexts and 3-4 sources of noise are possible, most often contexts are not allocated at all for the formation of implicit user intentions. Some features of the user experience are not at all obvious and are revealed only during the process of split testing.

    Major flaws in most existing designs
    • Несформированная паллитра — 50 оттенков серого, и прочее «пипеточничество» фотошопа без какого-либо намёка на знание колористики или умение пользоваться Kuler'ом или Color CC.
    • Плохо подобраны шрифты — тяжёлые шрифты со сложными начертаниями, привет PTSans, приводят к замедлению отрисовки текста в браузерах и приложениях. Откройте тот же фрилансим — более секунды на отрисовку с кучей сторонних ресурсов, перестройкой и перерисовкой слоёв по несколько раз.
    • Нет чётких вертикальных и горизонтальных ритмов — позиционирование элементов «на глаз» и «на пиксель» без каких-либо явных пропорций и их гармонизации.
    • Нет чётко выделенных и упорядоченных информационных контекстов, и контекстов взаимодействия
    • Не контролируется информационный шум

    А что с биржами?

    They do not work.

    In general, 95% of the people work "for food" with all the relevant problems.

    You need to understand that the main task of existing exchanges is not to give guarantees to customers and freelancers, but simply to squeeze money from them under the guise of "certifications" or "safe transactions". These are all rather primitive manipulations that create the halo of a “smart and loyal freelancer able to solve any issue for money”, just for managers prone to cognitive distortions. Exchanges benefit from such a market position - they get more money from amateurs, since people who are able to clearly formulate requirements and argue their terms, guarantee wages, just will not use such things.

    These problems are quite easy to solve - you can instill the skills of quality control and organization of development processes right on the exchange, since all this is quite a template task. But again, exchanges need amateurs ...

    And what is “beyond the hill”?

    The situation is better, but people are much healthier, and in society it is customary to analyze and solve their personal psychological problems. The need for compensation is much less common, it is customary to “leave home” - everyone does their job, and they don’t waste time for some reason. True, in the family plan, work too much affects well-being - they “come off” primarily in the family. So the issues of family relations of employees are very important for foreign management, and offices often meet with their psychologists, most often it is family psychoanalyst interspersed with some kind of Freudianism and “pop” gestalt psychology. In Germany, you can generally meet an ordinary professor of psychoanalyst who will analyze why the developers at the offices so loudly and so much “blow the gas”, they have it is acceptable in terms of etiquette, but not in such quantities (true story) ...

    Product quality , which are developed by freelancers and remote employees in the States or Europe, is often several orders of magnitude higher than in the Russian Federation and the CIS as a whole, while maintaining the same price ranges. They honestly eat their bread, which certainly cannot be said about the locals.

    The situation with higher education is certainly much better, but it is also in crisis now. I really like the MIT approach with Case Studies - an analogue of our lab work. They learn relational algebra and database normalization - they saw a website on rails with CRUD and completely cover it with tests. Case Studies re-write every six months to catch up with changing market demands, new tools and approaches. And this simply does not enter into any comparison with Access'om ...

    As a result, students gain skills, including organizational skills, that will definitely come in handy over the hill. And ours ... well, in general, “a lot, but bad”, with 300 people there are 10 programmers who sit and figured out, the rest went “because it’s stylishly-fashionable-youthful.”

    As I understand it, MIT now wants to massively introduce paid industrial training with partial retraining at the university - and the workplace will be “clogged”, and the student will have money for food and bank loans, and the throughput of the institution will increase very much, which will lead to to reduce prices and possibly reduce the quality of training. But it’s not to sit in pairs for 7 hours and think “why the hell do programmers do this wastewater treatment and theology of Vaishnavism” ...


    I believe that freelance is a necessary part of the professional development of any developer, it instills flexibility of thinking and is able to cultivate a sufficiently large number of useful qualities that are not typical for simple office workers. A freelancer can “get more bumps” in a month than ordinary workers in a couple of years of his work, he always looks from the outside and his involvement in psychological games and compensatory processes is either lower or completely absent. Unfortunately, this only works if the cyclical development processes are maintained and professional development is available, such as what I described above. Of course, this is not the truth in the first instance - I tried to generalize and missed a lot of subtle points, you may have something different.

    Ты повторил over 100500 раз о ригидности и приостановке развития, я сам за собой это замечаю — что же мне теперь делать ?
    Not to be the same “good guy”, you don’t have to stereotypically indulge in any whims and succumb to manipulation - this is the “The USSR way”, which is deeply rooted in the brains of people with the behavioral pattern “Do not live, but work”. Suppression of the need for personal development leads to internal stress, which is compensated by excessive employment - this is a psychological game of the “holy great martyr”, who works at night. You will not make informed decisions - your task is to “work out”, and not the fact that this employment will be something constructive. Even if it does, then software is built here, not Khrushchev’s with the requirements of the 70s, although the requirements for both are not very different now.

    Enough, just enough, you are above all this!

    The rest “everything will be fine”, they will not take care of themselves, analyze their own actions, and accordingly, sooner or later, their development will completely stop, and will be replaced by the task of accumulating material wealth. The result is a mental hospital in the hands of patients .

    I can advise managers to encourage any attempts at introspection, both subordinates and their own. You need to understand that only those people who are willing to solve their problems and become “better than yesterday” are prone to introspection. People who do not want to realize what they themselves are are not capable of personal and professional development, making constructive decisions. They will delegate them to others, and grab all the laurels and encourage such behavior to compensate for the hatred of their essence somewhere deep in the repressed subconscious. There are too many of them, and I can’t give a “universal pill” in order to make any decisions with them. Himself in search.

    I did not write about
    • Features of the construction and management of advertising campaigns
    • Осуществление работы с сообществом пользователей, условия и способы его формирования и поддержания лояльности
    • Проведение UX-тестирования и ведение метрик для оценки качества позиционирования продукта
    But I think you already managed to guess that everything is sad there too - generalized abstract metrics are used that are not directly related to these tasks.

    I don’t have a psychological education, and by and large I am a self-taught amateur, but most of the processes are too obvious even from the point of view of pop psychology.

    Only a mature person who solves his psychological problems can become a full-fledged professional in his field.
    But in our country, society doesn’t have this at all - problems are passed down from generation to generation and this is also encouraged by relatives. From all the fuss.

    I hope that there are mature people here who will not be compensated by idle chatter and discussion for the sake of discussion. I’ll just ask the rest not to waste my time.
    I just wanted to share my experience.

    Please indicate in the comments which main antipatterns and cognitive distortions you most often encounter.

    Thanks for attention.

    PS In the comments, the primitive projections of unpleasant judgments on the author of this article are just such a defensive reaction when people read something to themselves. I am glad that someone “hooked”.

    Also popular now: