Alchemy (1): How many people do many things

Software development is very divisive, only continue to use the principles and rules in order to bring quality.

Recognition Project Development MVP

As long as not a toy nature of the project, the project should be roughly divided into three important stages 0-1,1-10,10-100. Wherein 0-1 is confirmatory can only be considered a Demo. The 1-10, it can make the product reached a preliminary stage may be the first release of the last 10-100 you need to do to continue to project iterations, complete the full functionality of the project.

You can do the project of assuming that a person can always start to design and control requirements phase portion 0-1. Can also directly assume the items 1-10 is always ignored, many projects have started to run to 100 from 0, resulting in some degree of project development time will be the emergence of runaway labor costs.

The reason most people MVP is difficult to cut a good product, only to maintain a keen sense of smell to risk, have a strong incentive to cut out a product doom true MVP portion, which is shaded below. This section should be sufficient to support the 0-1, 1-10 and complete version can be released in a controlled time and labor costs.

If you do not do a good job between requirements, manpower and time strictly controlled, high probability would be postponed, and can not form a virtuous cycle of short design project - development - testing - Post - feedback loop. In particular, if the first stage shaded just completed the Demo capabilities, then you'll be able to get the whole thinking of the pyramid, and that is a recipe for disaster, you can wait find the heart of a shaded area developers.

Distinguish between front-end development / client development / back-end development / core development

Front-end development, refers only had HTML, CSS, JavaScript and the ability to use built based on various types of Web UI framework developed, e.g. React, Vue, Elm other Web framework, while the next Gulp NodeJS ecological Webpack and other packaging tool chain, somewhat familiar. Front-end developers also need the PC side page rendering, mobile side page rendering, or rendering somewhat familiar response. Essential, front-end developers also need to be familiar with the development of micro-channel, H5 develop micro-channel environment, and the development of a variety of small programs and so on.

Client development, refers to the complete development through the PC-side program, developers end mobile (Android, iOS, or ReactNative and other cross-platform development framework) program. Client development complexity index to be treated higher than the front end of the developer. The client will generally develop an understanding of the UI layer, logic layer and data layer separation architecture, and can take the initiative to do this classification. The client may also need to develop multi-threading to read and write local files, network communications, multi-process architecture and other issues.

Relatively speaking, a skilled front-end development could have an advantage on the ability of the skilled Web-frameworks and tool chain. But another aspect, front-end development with respect to client development, it may not have any awareness of the layered architecture within the end of the common OOP package also no concept, because they consume a lot of energy in how to adjust Web Components how do styles, how to write the interaction. So how do they stratification, how do the package, how do statute experience slower growth.

Background development, need to master all the basic commands on Linux, and on this basis the ability to master these series: gateway configuration, such as nginx, need to be familiar with the service gateway routing allocation strategy, the reverse proxy strategies; static routing guides static websites , it may reverse proxy internal Web-oriented services, such as Java, nodeJs from other internal Web services; Web services might be behind a series of Rest interface or implement RPC interface; further layer might be behind caching, database CRUD read write layer. But this is only the most basic form, the background will be a step by step evolution of the architecture, the evolution of the final turn into developers only need to write business code, through a deployment tool chain.

In fact this part of the background mix of developed and developing basic business logic components. Technical requirements and technical requirements of the business logic underlying component surface is not the same. Basic component parts, the need is to make cloud resources resource abstraction, virtualization technology to master the components, scheduling, messaging middleware, etc. distributed components, and business-oriented, it is the most conventional to the design of the cache, the database have a good grasp of business processes as well as a complete whole process, all the ends of the timing of the event, the data stream grasp.

The last one is the core of development. In fact, the word has a core role deceptive, like other developers have become insignificant, it is not. Generally it refers to the development of the underlying core technology development Kill certain level, such as Google's web QUIC protocol design and develop a system to meet the specific requirements of the storage / database, a vehicle identification system and the like.

Understand and distinguish between these different types of development, for a project staffing and scheduling is necessary. I deeply understand the delay time a project is basically determined by the end of the longest. Can someone put the fly end, end put some people do not fly it? risky. Basically, in order to make high-quality project, we need to put the right people at the right end. If there is no way to meet the people above, means that that person can not end on that side Hold live independently, this time it must be on the whole there is a framework has been designed for that end, the risk to the Statute of the framework, and I think architecture role at this time will be revealed the nature of the need, rather than decorative.

Full stack is a lie, fists face four hands, TeamWork should not be a person to do everything, it is not right. Good software development process, if a person appears to do too much work role, it must be a warning signal that the software process, not a good thing.

Enterprise development platform / private deploy / for / to individuals

One technique to achieve it, can be made into a development platform. But if there is no advantage to some aspects of the development platform, such as cost advantages, the development of the difficulty advantages for a wide range of advantages, developers trust advantage. Finally, it may also be based on this platform is no way the formation of ecological and market, and can not form the ecological market, which means that the above is not a good business model. Simply put, technology is good, but to make money.

Well, maybe this time, the need is to develop into a platform for customers to deploy proprietary products. Private deployment actually need to develop more quality, have all made internal deployment capabilities that can be distributed, built-in components you need to be made more flexible, configurable or can be updated. Private technology deployment easier to sell out, which is from the people trust to buy things to consider.

Oriented companies make products and personal products for do vary widely. For enterprise development, the ability to have a good service in this area only some vague feeling.

The estimated time is still difficult

If a technology never done, is still difficult to estimate the time, there are many times I could not answer that, "This function about how long." Because people do not need to ask the question of what to do to come out, and answer questions people need to do things out. To do it is to consume the time to explore, validate, implement, test, and then resolve various error handling, there are a lot of assumptions and conditions may be wrong, I dropped my weight to the need. Only done 1-2 times in order to give an estimate of the time, however, people always underestimate the problems, so the doubling time is a common thing.

把东西做出来的价值在哪呢?如果是一个科学研究,一个研究者把一个东西做出来,他会获得同行的赞赏和尊敬。但是开发活动常常是做了就做了,因为人们只关心结果,不关心过程中谁解决了什么问题。原因是,马上就有下一个新问题。已经解决的活在软件本身中。

这就是再次回到了经典的问题:“在一个开发周期中,要拒绝不在周期计划内的任务”,不坚持这个原则,就是一切混乱的开始。我发现,好的软件过程,都是因为坚持了原则,而不坚持原则,都必然会出现问题。然而,很多时候你没的选择,比如某个端就是没有靠谱的人负责,你就只能曲线救国,很多时候效果就是会打折扣;比如,人们就是要塞变化的需求,或者就是需求被低估了,或者根本不知道需求。不过本来很多事情就没有什么合理不合理,遇到了算倒霉,增长的经验用在下一次即可。

好的软件过程,要坚持用燃尽图,坚持用Issue管理。

--end--

Guess you like

Origin www.cnblogs.com/math/p/rule-001.html