Development stages, mistakes and benefits

In this article, I will try to consider software development: highlight processes and steps, point out the advantages and disadvantages of certain techniques, and warn against errors.



Statement of the problem

The most important step in software development is the statement of the problem - the final result will depend on the correct statement of the problem.

Drawing up technical specifications.

The terms of reference is a document that describes all the features of the software, an exaggerated example:

Creating an online store

Write an online store with the ability to add categories, add products by category with a picture and description.

System participants:
1) Administrator
2) Buyer

User

features Administrator features:
1) Add delete and edit categories
2) Add delete and edit products
3) Add delete and edit requests for the purchase of a product

User / buyer capabilities
1) Add goods to the basket
2) Checkout The

task looks like from the customer , add obligations here and this may become an addition to the contract.

Let's take a closer look and break it into stages:
1) Drawing and layout of the design.
2) Database design.
3) Designing architecture.
4) Writing program code.
5) Writing a database. A
6) Purchase of hosting and domain.
7) Website promotion.

And if we want to, add 2 more features:
1) User registration
2) The user can add products

It seems to be a difference in two lines, but this is no longer an online store, and the task can be transformed into a service similar to avito, alibaba, and the timing and complexity increase significantly (tables will not be 5-10, but 100).

Errors in designing examples :
Often, the time complexity and cost of development can increase due to errors in the architecture and formulation of the problem, examples:

1) There was a service that showed the geolocation of a product or service on a map using the Yandex API or Google maps, and then specific calculations were needed that third-party services do not provide as a result: you need to install the map engine, change the database, convert data, write the necessary formulas, adapt old code for card module capabilities. This will entail time and money costs.

2) The database was incorrectly modeled; you need to add several fields and change the program code.

3) The terms of reference are not drawn up correctly: full rewriting is necessary.

4) Technologies for development were chosen incorrectly: you write a multi-tasking multi-threaded application in a language in which it is not provided, in the selected framework there are no necessary capabilities.

The list can be continued indefinitely depending on the situation, it is better to have a competent technical task and present the whole picture.

The right choice of development tools
1) IDE - in many modern development environments it is provided: autoplate (automatic code completion), integration with version control system, version build sisters, error tips, integration with testing systems, integration with debug systems.
2) Version control system: reduces the risk of losing program code, enables team development, makes it possible to split code into branches, a date the ability to restore old versions of code.
3) Project management system: makes it possible to set tasks for the team, separate tasks, control the development process.
4) Framework: allows you to speed up development, allows you to split the logic, can have a specific set of features for your tasks.
5) The choice of language and database will not be considered here - personally, my opinion should be chosen from the task.

Iterative and team development and errors
The team has three developers, their responsibilities are divided in parts of the code, on Monday they got together and decided what tasks they will perform in the next two weeks:
1) The first decided to change the model, so that it would be possible to display and track the date creation.
2) The second decided to correct the registration.
3) The third changed the design.
Within a week, all three wrote code and made changes to the repository, as a result, the first developer changed the code so that the part for which the second programmer was responsible fell off. Parts in which changes were made work well, and in other places where he did not notice errors began to pour in.

Implementation of testing
I began to write my framework for developing an online game, having defined a set of features I began to test it using standard language functions (java). Further, in order to test the capabilities of the framework, I had to write several more global tests that emulate the user. Of course, running a bunch of tests is inconvenient and pretty expensive - so I have to make them automatic.

Benefits of refactoring
I recommend correcting flaws in the architecture and program code as soon as the error is noticed. Constant reforring takes more time during development, but it gives a tangible increase in time costs in general than if you started to make several global changes (serious rewrites) with a bunch of errors.

Correct setting of deadlines

How long will you create a typical online store? Everything is set up for you, you have been working for a long time, you are fluent in languages ​​and content management systems and work as a team. 5 days can be a week (you will not receive a high-quality resilient application for this period)? Feel free to multiply by 2, in order to take into account force majeure and avoid conflicts.

I think it’s not difficult to imagine savings: effort, time, money and nerves. Taking into account all the nuances, tricks and errors described above.

Also popular now: