Good day to all! Today I would like to talk about how a client interacts with an outsourcing company, and also to receive comments from you on how you interact with your clients / software developers. This article is written based on work experience and, for the most part, is intended for software customers. The goal is to find "bottlenecks" in matters of relations between the customer and the company that offers software development services.

About the author.Allow me to introduce myself: I am Yury Korhov and this article is the first in my blog. He graduated from the Belarusian National Technical University (security engineer), Belarusian State University (investment manager). Work experience - over 6 years in IT in almost all positions: webmaster, layout designer, web designer, programmer, project manager and part-time UI developer, department head ... In total, over this time, more than 80 projects have been implemented: from small sites, games for mobile phones to major Internet portals ... The main profile is the management of the development of projects in the IT field. He worked both on the customer side and on the developer side, both on the Russian market and on the foreign one.
Background to the creation of the post or Thank Wargaming.To bypass the history of the creation of this post would not be good, because Habr I have been reading for a very long time, but to write an article hands did not reach, but here is a matter of “chance” and now the article is ready.
')
For a couple of months I have been resting from work because I was tired of outsourcing, I decided to find the meaning of life and leisurely prepare my project for launching, and one fine day the bell rang. The recruiter of Wargaming (the founders of the “tanchiki” and, in my opinion, one of the best firms in Minsk) called me with an offer to interview the Vendor Manager for a job (here it should be said that I was not looking for a job, and judging by their vacancies, I not very suitable for them). “It's interesting!” - I thought and decided to perform a test task, especially since it was interesting enough for me. The recruiter said that they had all the conditions for a pleasant, healthy (fitness, insurance, etc.) and well-paid work and also, which is not unimportant, it would take me about 3 hours to complete the test task. I doubt that someone would be able to do all the test task during the specified period, as for me - it took about 6 hours in total.
To my regret, the feedback from the company was in a telephone conversation and was expressed by the dry phrase “everything is fine, everyone liked it” (literally, I don’t remember, but this is the essence) without any specificity. I doubt that I managed to specify all the main “narrow” places, and since It’s not good to work, I decided to post answers to the test task (with minor changes, for convenience) to the public and I will be grateful to the habra audience for additions and healthy comments to the article.
The scheme of interaction customer - software developer from the first acquaintance to the end of the relationship.
When developing a circuit, I mean:
- A software developer is able to complete a project.
- Previously, the contract was not signed with the software developer and there were no projects.
- TK is ready.
- Payment terms are governed by the contract.
- Project management systems and software development methodologies (XP, Scrum, Lean, Kanban, ScrumBut, etc.) are used.
- Filling application content (if necessary) is done by the client.
It is beneficial to avoid aspects of the contract between the software development vendor and the customer to the vendor (simplify, generally remove from the contract).- Responsibility for meeting the deadlines lies on the developer’s side, and if deadlines occur at the last moment (that is, the developer has not notified in advance that he doesn’t have time before closing), penalties should be imposed (there is a large selection of options).
The reason: disruption of terms is one of the biggest problems and it is not very interesting to mention this in the contract, since most of the deadlines lie on the developer’s side. Here it is necessary to take into account that it is difficult to calculate accurately, but to warn in advance that the developer does not have time to complete the development phase within a certain period of time - he is obliged and this should be prescribed in the contract.
- Terms of warranty fixes "bugs" due to the fault of the developer who were not identified in time. The usual warranty period is 3 months.
The reason: it often happens that some “bugs” were not eliminated or appeared already in the process of work, therefore this item is often attempted not to indicate or reduce the guarantee time. My opinion is that less than 3 months is not enough. - Rights to developed software, modules, blocks, etc. belong to the customer and can not be used for resale.
The reason: it is beneficial for the developer to have intellectual property rights or to be able to sell / use the work for other clients, which in turn can put the customer in an uncomfortable situation in the market. - When developing a new module in a system that affects the operation of other modules or the entire system, the developer must ensure the functioning of the entire system.
The reason: often the development of one module can harm the work of another module or the whole system in general, and further refinements can lie on the “shoulders” (financially) of the client. The developer is obliged to take into account the structure of the entire system and in the case of “bugs” found by the client, edit for free. - Technical development documentation should be tailored to customer requirements.
The reason: it is beneficial for developers to fully bind themselves to the customer and it often happens that documentation is not kept. - In the case of website development, the contractor is obliged to consider SEO optimization for the site, namely: the description of images, pages ...
Reason: saving time on “trifles”, which, depending on the terms of the contract, can lead to financial losses for the customer (the software developer saves time / finances). - System testing should be provided by the system developer.
Customer acceptance of the finished module should not turn into system testing, i.e. The developer is obliged to take the elimination of the identified “bugs” by the client at his own expense. This is necessary in order to ensure high-quality testing of the product by the developer. By the time the developer says “done” and testing begins on the client side, the “bugs” are corrected for free. - Responsibility for placing the project on the side of the customer assumes the developer. In this case, the customer is obliged to ensure compliance with the technical requirements for the site.
Reason: placing a project on the customer’s side can sometimes cause some difficulties, which can lead to “capturing”, therefore the responsibility for hosting and setting up the server should be on the side of the software developer. - If a software developer is forced to resort to the help of specialists outside his team, he is obliged to take on all the attendant risks of data leakage, data loss, or any other damage that an outside employee may cause by his action or inaction.
The reason: it happens that the developer may get sick, quit, etc. someone from the staff. In this case, the customer must be insured. - Project backups should be provided on the developer’s side at least once a day. Any problems with the loss of data on the project must take the developer.
Reason: here you need to indicate who is responsible for the safety of the project in case of any failures. - The developer should proceed from the popularity of the use of technology applied to them when choosing.
Reason: a binding to own technologies which will complicate life in case of transition of the customer to other developer.
Known ways of overstating the cost of outsourcing work relative to reality. I suppose they are more.- Surface evaluation of the cost of developing the project as a whole, without splitting into stages, which can lead to 2 to 3 times the excess of the cost of the project.
- Failure to provide reports on the work done within the period specified by the contract or not the ability to monitor the development progress on the part of the client
- The wrong choice of technology in the implementation of the technical part, can significantly increase the cost of development.
- The absence of the necessary specialists in the development team, which increases the time and cost of development.
- Fixed setting the cost of developing a project or module and further increasing the cost for every little thing that both parties understood differently.
- Fixed setting the cost of developing the project - a higher risk makes you put into the cost of the project.
- When developing the design, prototyping is not used, and the design is developed on the basis of textual TK, which ultimately leads to a large number of improvements / corrections and, accordingly, an increase in the cost of the project.
- Adding / complication of functionality. You can make it easier - make it harder.
- “Beautiful” where they are not needed (you can say about the admin. Part of the site, if you can use css frameworks to quickly customize the admin. Parts - start developing from scratch).
The customer-software development vendor relationship pattern, which I think is closest to practical use.Many outsourcing companies prefer not to provide access to their project management systems, without providing detailed information, I personally believe that access should be provided at the request of the customer. The client is responsible for the implementation of the project and see the development progress in real time - it is important!
Also, I think that developing software taking into account the calculation of the full cost of the project is a waste of money and a nerve, such development usually leads to conflict situations.
The main points in the interaction of a software developer and a client that I consider optimal:- Payment of work based on hourly wages of employees or the average cost of the work of a specialist of the entire development team. Evaluation of the development stages is necessary. Why I consider this form of pricing optimal:
- It does not require a very scrupulous approach to project evaluation, which is almost impossible to make 100% accurate. If the assessment is done incorrectly and the software developer begins to understand this, then there is a “restraint” of the functional wherever possible, which ultimately will affect the usability.
- Improves mutual understanding between a software developer and a client, since The main task comes down to the principle - “do it well and quickly”, and not “invest in a tight budget and how it will work so well”.
- The client, based on daily reports on hours spent, can see how much time employees spend on different blocks during development, which gives an understanding of the speed and quality of work of the software developer's employees.
- The interaction between the customer and the project manager is as direct as possible, i.e. when using skype, phones, etc.
- Only 2 weekly reports and plans must be sent by mail (for control).
- The client provides a prototype of the application or it is developed by the software development team, if necessary:
- Simplifies the understanding of the basic functionality of the project.
- Increases overall project development speed.
- Understandable requirements for the functionality of both the customer and the developer.
- A clear understanding of where the project will move.
- A project management system for managing project progress and the ability to monitor the process, development time spent on each task separately. Unfortunately, developers rarely provide access.
- It is desirable that the whole project be done by one team, i.e. there should not be such that one stage is done by one company, the other is done by another, etc.
- Control points (“running”) every 2 weeks are the optimal time to control the project.
- In development, preference is given to well-known frameworks, also for easier adaptation in the event of any situation when it is necessary to transfer the project to other developers.
- Qualitative testing on the developer’s side is a direct responsibility. When transferring a project to the client or any part of it, everything must be thoroughly verified.
- Supporting different browsers is a direct development task.
Conclusion : the main thing is to stick to a partnership / mutually beneficial and trusting relationship with the understanding that developers are the same people and by complicating their lives you complicate life for yourself! Everyone should be responsible for their part of the work, the client for providing a distinct TK and respond promptly to emerging issues, not forgetting to pay for the work, and the developer - for quality, time, speed. The ideal, of course, is not achieved, but we are on the right track.