Let's talk about the technical management and Cost Control of Small and Medium-sized R & D projects from a fictitious example (full text)

Source: Internet
Author: User
I recently think about doing something like this (I may already have it in the market and haven't done research. I am just wondering what I will do if I do it ):
Demand: a middle-class family, working, no one at home. You can monitor important points through the camera. You need to watch a video every day when you return home to check whether a special event has occurred. How long does it take. It would be nice if the video could automatically prompt at a few o'clock! This is very useful for the office environment.

It seems hard to do. The first problem is:

It requires identification and search for logs of log g, which requires a large amount of computing. It takes several minutes to "warm up" every time you read it.

(1) solution Selection

The solution is actually very simple-apportioned the computing workload, recognized during video recording, and indexed. What kind of motion detection and Topology detection. If the performance does not keep up, you can reduce the resolution and/or perform several frames at a time.

This decision should be critical. If you choose to first record and then search, it will certainly be a batch, which cannot meet your needs.

(2) language selection

C is not selected. Because the index structure may require a special data structure, it may take a lot of effort to write data in C. Selecting C #/Java poses certain risks (performance risks and the difficulty of decompilation is low ). In view of the fact that some of the available image recognition libraries are almost all C/C ++, it may be difficult to package a large amount of work if you choose a library in the future. C ++ is conservative and moderate.

(3) database selection and basic architecture
Find a video, a recognition object (a good thing for recognizing people is found on sf.net), can recognize motion, first, we will build up these three items to form a demo and build our own index architecture. The index system should include two points: 1 is the index of static objects, 2 is the index of motion obtained from static object analysis. The interface is better designed to facilitate the replacement of several underlying libraries. But the specific structure is like this. A gui is built on the upper layer to read dynamic indexes and call videos Based on the index location.

(4) identify several major application scenarios as test scenarios, tests, and adjustments to make them useful.

After such a scheme is determined, the project risk is basically eliminated. I have some confidence in my mind. In this way, the project is divided into five parts: video, static recognition, dynamic identification, index, and GUI. There is no risk in the GUI part. The first three parts have risks, but the risks are relatively small. Generally, there are open-source components. Instead of using GPL directly, GPL does not want to read and write it again. The fourth part has certain risks. In fact, there is nothing, not an index.

Only C or Java? This is not the reason for changing the language. The cost and risk of learning C ++ is far smaller than that of using familiar languages.

Then, select the candidate, select the database, learn the API, select the data structure, and selectAlgorithmModify algorithms, develop policies, expose parameters, and test the policies and parameters in scenarios. At the same time, another line begins to write the GUI. Project process control.

The above is an example I have imagined, but it should be closer to reality.

In this example, I think the key to understanding a language is to understand the language compilation model, runtime model, programming model, tool support, library support, and key APIs, the main advantages and disadvantages and possible compensation solutions are developed based on the above, including technical selection, architecture control, and functional design. These are very valuable things that are not learned much in books. An effective learning method is to analyze the design of existing software. In addition, this is my personal summary. How to quickly and easily run to the demand. This is a first-level problem.

The second layer is to consider design and control functions, performance, encapsulation, abstraction, development process, class design, maintainability, and so on. This involves a deeper understanding of the Language Programming Model, compilation model, memory model, key tools and libraries. My project management principles are as follows:
(1) automation of the development process involves many problems such as automatic building, document generation, unit testing, and version management. I want to stick to the following principle: write less comments, write more documents, and write more documentsSource code. Write makefile more. Each CPP corresponds to a test case to ensure that the sourceProgramQuality.
(2) Abstraction and encapsulation. At present, the main experience is stratified. After the layers are well divided, different layers generally have similar open-source implementations, which can be directly inserted into them. If it doesn't work, use another one. I can't write it myself. Abstract should be abstracted to the logical level to minimize the semantic gap. This is mainly an empirical problem. The water is too deep and related to the programming model of the program. For C ++, the four programming models should be clear. The longer the name, the better. If it is not long, it is too much.
(3) Select a key data structure, which has a great impact on performance and encapsulation. It is recommended that you select a pluggable data structure. The simplest data structure may be selected in the initial stage of the project, and the complex data structure may be changed in the later stage, or the data structure you write yourself.
(4) select key algorithms. Generally, projects are not used, and difficult projects may be used. However, only a few key algorithms are used in a project. You just need to look up the paper.
(5) familiar with resource models: several key resources, including CPU (process, thread), memory, network, hard disk, and other devices. Familiar with common resource scheduling methods.
(6) familiar with the selected tools, libraries, and important APIs.

The third layer should be the specific implementation layer, such as how to design the class, memory management, problem solving, and bug debugging. These questions are basically answered in the book or Google. There are more things in principle in the book, and more things are implemented by Google.

In my personal understanding of project/product development, the key factor for the success of small and medium-sized research and development projects lies in the first and second layers. The risks and progress of the project are closely related to this. The third layer has a great impact on costs, and has little impact on project risks and progress. First, a good design on the second layer requires fewer programmers with Level 3 skills and less skill requirements for programmers, greatly reducing labor costs. First, if the layer-2 design is poor, more programmers are required to possess the level-3 skills and have high requirements on the skills of programmers. The first and second layers of design require cost considerations. If it is well designed, it is possible to reduce development costs by 2/3.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.