[Reply “1024”, send you a special push]

Warm winter in D

The original address: http://www.jianshu.com/p/6ebf289d0e05

Special disclaimer: This article is D tune warm winter original and authorized to publish, do not reprint without the permission of the original author, reprint please contact the original

  

Programmer confusion – find no value

In the vast software world, as an ordinary programmer, appear very small, and even feel confused. In our hearts, we worship technology, but also have a deep fear of technology changing fast. The technology market is just like the moody heaven. Today, the big data will rain, and the artificial intelligence wind will blow tomorrow. Facing the impact of the dazzling technological tide, programmers will inevitably feel powerless, fearing that they will miss the technological trend and lose their competitiveness in the workplace. Sometimes I wonder whether it is my value to keep up with the latest trends and improve my skills in the technical field? So am I a master of technology or a slave to technology?

The reason why people are confused is often unable to find the focus of work and life, feel the value of work or life. So what is value? The big thing is THAT I changed the world, the small thing is that I did something to improve something. If you don’t know the relationship between your actions, goals, and values, how can you focus? How do you know what is important and what is priority?

The confusion of programmers is not only caused by the feeling of powerlessness in the face of complicated technology, but more importantly, because they have been buried in the vast division of labor system in the software world for a long time, unable to see the value chain from business to software architecture, unable to clearly locate their position in the division of labor system, and unable to deal with the relationship between themselves and technology and business.

A lot of programmers don’t like business at heart, and I’ve been there before. I’d rather be working on framework tools, technical components. A friend of mine used to tease me by saying, “You guys work overtime every day to write all that code, and then what? Has anything changed? It’s a bunch of crap.” Think about it carefully. Most of the time, what we keep in our mind is only logic and process. What we lose is the feeling of business scenes, the feeling of users’ pain points, and the thinking of business development. These are the parts that are closely related to value. We naturally cover up our strategic laziness with tactical diligence! The result is that we lock ourselves into an assembly-line position, emasculating our ability to see business value and focusing too much on the value of new technologies to our workplace competitiveness. This is also the fundamental reason that we are faced with complex technology and produce technology learning anxiety.

Value chains for business, technology, and software systems

So what is a business? It refers to some kind of purposeful work or work project, the purpose of the business is to solve the human society and food, housing and transportation closely related field problems, including material needs and spiritual needs. So that the main body of business activities and the audience can get benefits. Generally speaking, business is the pain point of users and the profit point of business providers (such as companies). Technology is a tool and a means to solve problems. For example, in order to solve users’ business problems of shopping anytime and anywhere, programmers use Web technology to build e-commerce apps, and when the demand is upgraded to help users buy goods quickly, programmers use data algorithms and other technical means to build recommendation engines. If the technology is separated from the business, the application of technology cannot be well implemented, and the research of technology will lose the scene and direction. If the business is separated from the technology, the development of business will become extremely expensive and inefficient.

So let’s go back and think about the value of the software system that we built by writing all that code day and night. It’s about solving business problems, so if you’re not doing something that’s going to help you solve business problems, you need to make changes. So how does a software system reflect its own value? In my opinion, it is reflected in the following aspects:

  • Business fields and functions: For example, Alipay launched transfer and payment functions based on the payment field, such as artificial intelligence automatic driving system, etc.

  • Service ability: This is just like the ticket purchase window of the railway station. The standard of its service ability is how many users’ ticket purchase business it can handle at the same time, whether it can complete the ticket purchase business within the specified time, and whether it can continue to work for 7*8 hours. Corresponding to the field of software system, is

    • System correctness (the program can correctly express the business process without bugs).

    • Availability (can work 7 * 24 * 365).

    • Large scale (high concurrency, high throughput).

It is with the help of large-scale software system that Internet companies carry a variety of business functions, which enables them to have a huge service capacity. With the help of Internet technology, Internet companies break through space restrictions, solve business problems efficiently and cheaply, and create rich profits, which is incomparable to human flesh.

By understanding this concept, you can understand the value chain: companies create value by providing business services with software systems, while programmers create value by building and continuously evolving software system service capabilities and business functions to support the company’s business.

With this value chain, we can reflect on how much our work and learning has promoted the service capability of the software system. Reflect on whether your work and learning are actually solving business problems in your field or just doing repetitive tasks that don’t make sense.

A few days ago, I interviewed a candidate who was engaged in ticketing system development. He said that he was studying Linux kernel and assembly language. I asked him how the learning of Linux kernel and assembly language helped you in your work. Can you give me an example? He was speechless, and I felt in my heart that such a good seedling who loves learning is confused and can not find the focus, and is doing a waste of energy. The correct way of learning should be to combine learning with specific business scenarios, and the company creates value by developing business services through the software system, while programmers create value by improving the service ability of the software system. The priority should be considered from the degree of helping these values. Learning itself is not wrong, wrong is often the original mind.

Now when you look at highly concurrent distributed knowledge, it’s not because it’s sophisticated and trendy and there’s a need for many companies to learn it, but because it actually contributes to the value chain.

Value-driven architecture

When it comes to software systems, architecture comes to mind. The reason to talk about architecture here is that every programmer is essentially a part of the software architecture system, and we may be buried in the pipeline of the system, not feel the place and value. But when you look at these issues from an architectural standpoint, it’s very clear. So what exactly is architecture? What does it have to do with the value chain?

What is architecture

In my opinion, software architecture is an activity that organizes resources such as personnel and technology to solve business problems and support business growth. It may be abstract, but I think we can understand what this means by looking at some of the specific tasks of the architect:

  • Organizing the business: Architects build their own “worldview” of the business by exploring and researching knowledge of the business domain. Based on this understanding, he breaks down the business lifecycle, establishes business boundaries, and builds a domain model to solve specific business problems. And identify the relationship and collaboration between models and domains. The organization of elements within the business domain is completed.

  • Organization technology: In order to operate the business model of human society in the computer world, architects need to select appropriate framework, middleware, programming language, network protocol and other technical tools in the computer world to organize a software system scheme according to the previous design scheme. In my opinion, a software system is just like a technical organization. That is, the technical components, technical means are organized according to some logic, these technical tools are defined responsibilities, have a clear division of labor, and to achieve business functions for the purpose of gathering together. For example, an RPC framework or message queue is used to communicate between internal systems as a messenger, while the database is responsible for recording the results, more like a clerk.

  • Organizer: In order to be able to achieve the goal of the use of software systems to solve business problems, architects also need to pay attention to the process of the construction of the software system, he in order to realize the software system is called for, gathered a group of software engineers from the company organization, and the personnel according to the different type of work, responsibility, system organization, the collaboration among these is determined, And pay attention to whether the organizational system is functioning well, such as whether communication is smooth, whether output meets requirements, whether it can be completed on time, etc.

  • Organize globally, deliver externally: The architect’s primary goal is to solve business problems and drive business growth. So he was very concerned about the health of the software. Because only after the software system runs, can external services be provided, in order to solve business problems in the process of user access. The architect needs to pay attention to the data generated during the operation, such as business success rate, system operation resource usage data, user feedback, business growth, etc., which will help the architect to determine the next architectural goals and direction.

So software architecture is not just a matter of what framework you choose and what technical components you choose. It runs through the organization of people, the organization of technology and the organization of business, and organically combines these three organizations to solve business problems.

Many interview candidates, when asked about the architecture of the system they are developing, will only list some technical components, technical frameworks and other technical elements, which seems to fail to clarify the deep meaning of architecture. There are some architects focus solely on the study of the underlying technology and thought to build an excellent system is very cow force, but he ignores the value of the software system is the ability to solve business problems, support business growth ability to measure, so finally produced a lot of the organization, has no help for the business system.

Costs and benefits

As mentioned before, software system can only create value when it is running, that is to say, whether the software system can work steadily 7*24 * 365 days is related to the profit level of the company. As a result, the development team is always cautious about releasing in production and working overtime to solve production problems. The cost of the software system is reflected in the software construction process. At this time, we can understand the value of engineering techniques such as project management, agile development, unit testing, continuous integration, continuous build, version management, etc., either to ensure the correctness of the software system, or to reduce the cost of communication. Some to improve the efficiency of development, but in general is to reduce the cost of software construction. Therefore, while improving system service capabilities and creating more business benefits, reducing construction costs is also an effective means of improving benefits.

As a software engineer, we are often in a certain part of the software construction process system. We can think about the value of each skill based on the relationship between cost and benefit, learn new valuable skills, and even choose appropriate technology based on the consideration of cost and benefit in work. For example, in places where logic does not change much, there is no need to do too much design and use various fancy design patterns to waste time. So that we can become masters of technology.

Architectural goals need to adapt to the evolution of the business

The goal of architecture is to support business growth, to improve the service capability of software systems. But that said, there are many trade-offs to be made. For example, the start-up team immediately constructs a high-performance and highly available distributed system before confirming whether the product can solve the business problem. Such an architectural goal is far beyond the needs of business development, and the final result is a waste of a lot of manpower and resources but no improvement. The architect needs to weigh the relationship between correctness, scale, and usability. For example, if the business is booming this year with 3 million orders per day, and based on a possible forecast of the future, there could be 30 million orders next year, the architect should focus on scale and usability. And the degree to which each point of improvement needs to be measured by the architect, such as two or three nines in usability.

Looking back on my previous work, I often wasted a lot of resources of the organization because I didn’t set architectural goals. For example, in my previous entrepreneurial team, I was obsessed with code cleanliness, and often spent a lot of time arguing with colleagues about code quality, so functions that could have been launched sooner had to be delayed. The overzealous pursuit of correctness at the time was incompatible with the business need of the startup team to test ideas quickly. Another profound case is that when I was in charge of a technical team, the leader asked me what plan I had for the next team work during a duty report. I said a bunch of things about improving code quality, having morning meetings, making tasks transparent, building an iteration mechanism, etc., and I got shot down. At that time, the team was dominated by outsourcing personnel with poor personnel level, and the developed financial system was also riddled with holes. However, the most important business value of this business line was to fulfill the needs of potential investors as planned and strive to attract investment. Therefore, the leader soon called the relevant personnel of the testing architecture to sort out the testing work of the core functions together with me, and automated the process of research and development, testing and launching. Didn’t understand what the core value was? But looking back, this way of working just meets the needs of business development, that is, to ensure that the system is in line with the design requirements, to ensure that the system can achieve acceptable correctness, to lay a foundation for rapid progress, the most important is to reduce the construction cost for the enterprise. Therefore, if a programmer wants to achieve good performance, he or she must recognize the business value behind the system and sort out work priorities according to the value, rather than obsessing over details and pursuing idealization of technology like ME.

Into the division of labor, failure also division of labor

As mentioned in the chapter of programmer’s confusion, programmer’s confusion is caused by being buried in the vast division of labor system in the software world for a long time, unable to see the value chain from business to software architecture, unable to clearly locate his position in the division of labor system, and unable to deal with the relationship between himself and technology and business. So HERE I want to talk about the division of labor. In order to make the software system serve the business better, the architect must split the software system life cycle, such as development life cycle, test life cycle, user access life cycle, software operation and maintenance life cycle. And according to different life cycle divided into different responsibilities and roles, such as developers responsible for the development cycle responsible for completing software research and development, testers responsible for testing the results delivered by developers, so the division of labor is formed. Once the division of labor is formed, each division of labor organization will have its own value pursuit. The top-level value that architects focus on, namely whether the software system can support business growth, is broken into each organization in the form of division of labor. Division of labor is valuable because it allows complex and expensive tasks to be solved in simple, parallel, replaceable pipelining ways. But over time, the problem of value fragmentation appears, such as testers who focus on finding more problems, developers who focus on developing more systems quickly, and operations personnel who focus on ensuring system stability. The three often only stand on their own position to ask each other what to do, no one pays attention to the overall value, resulting in many contradictions and increasing the cost of software implementation. As a member of the assembly line, his creativity and inspiration are strangled because he is troubled by repetitive work and confused about the meaning of work. So my friend teased me that it was quite reasonable for you to write so much code and not do anything about it, because I only focused on the value requirements of being a pipeliner and didn’t see the value at the top of the ecological chain.

Let’s think about the team leader, the elite leader who is not responsible for the larger value. For example, the project manager is only concerned with the business value of his own project, while the CEO is concerned with the overall business value of all the businesses in the company. So the greater the value of attention and the higher the position. These senior leaders control the overall value chain and timely correct the deviation between the value goal of the bottom division of labor and the overall value goal.

Start from value – look for new ideas of study and work

Confusion leads to thinking, architecture shapes vision, and value is the logical starting point for why we live and work. Based on such a value thinking, what can we learn and work to change the enlightenment?

  • Identify your business stakeholders: Identify the business and customer side of the collaborative network you work with, so that you can identify the closest business value points from your customers and extract more resources from your business side. You can even explore the value chain up and down the network in this way, integrating more resources upstream and downstream to achieve greater value.

  • Step forward and be accountable for greater value: Don’t stop focusing on software operations just because you’re a developer. Don’t stop focusing on software development just because you’re testing, because the more you focus, the better you’ll see the overall value goals. If you only pay attention to one mu three points, then doomed to this life can only be trapped in this one mu three points, become an assembly line anxiety to the death of the code farmers. Try to shift your thinking to value from an architect’s point of view and see if you can move technology across the business, to the user, to the ultimate value. My friend was talking about kicking the product manager into operations, kicking the programmer into the product manager, that’s the right way to do things. It’s a similar saying, lean in and know how to do it better.

  • Think like an architect, use value to find the focus: People are confused because they can’t find the focus, and the meaning of value is to guide us to think about what things to do to achieve value, which things to do first will be more profitable than what things to do later. Think holistically like an architect, break down the problems encountered, connect the things learned, and strive to form a complete value chain.

  • Learn to connect and build systems: A few days ago, I saw an article criticizing Toutiao’s product form, accusing its intelligent algorithms of locking humans into their own preferences and further fragmenting human society. This seems to make sense, and the interesting thing is that the Internet has connected us to the big world, but it’s also locked us into our own little world. The same friend of mine, he said that his greatest value was in connecting, connecting different people, and interesting things could happen. Perhaps the nature of algorithms is obedience and pandering, but ultimately people need to rely on their own actions to establish connections with different people in order to understand the world, which is also an effective way to get rid of the restriction of assembly lines. In addition, we are also the product of something connected, such as an architect, which is a product of business, technology, and management connected together. Therefore, we should establish our own knowledge system to absorb and integrate new knowledge, connect isolated concepts and form our own value chain. For example, this article combines my experience in technical development with my understanding of architecture and my past experience, which is also an internal system sorting.

Afterword.

I was reading some performance evaluation articles on Saturday night, and I had an Epiphany and pulled out this article. What’s interesting is that following this line of thought, we can see a lot of things in the past. If my colleagues are interested in reading this article, we can have a private chat and review the past. In addition, I would like to thank Teacher Wang Gukai for his book “Talk about Architecture”, which gave me inspiration and direction when I was at a loss and in a hurry. It is recommended for those who are interested in architectural ideas. There is not much technical content in it, but it is very enlightening for technical practitioners.