The current trend of creating and delivering dedicated software for companies has greatly promoted the development of outsourcing models. This is a very convenient solution because the customer (company) no longer has to maintain the entire programming department. It eliminates the investment problem of training one's own programmers, testers, analysts, and even IT managers.This is …
The current trend of creating and delivering dedicated software for companies has greatly promoted the development of outsourcing models. This is a very convenient solution because the customer (company) no longer has to maintain the entire programming department. It eliminates the investment problem of training one’s own programmers, testers, analysts, and even IT managers.This is a convenient and flexible method. The benefits are obvious, and the growing outsourcing demand for IT professionals and emerging software companies can be used as proof.
What happens if we do it differently from others?Will it be successful and make sense to create a department responsible for providing software in a company that has little in common with IT?It is possible, because after all, you can always hire qualified people to develop all processes and form a team. Well, let’s raise the bar now. What if we decide to build a team of employees who are completely based on a good understanding of our company’s business but have nothing to do with the programming and IT industries before?In addition, the goal is to create and implement a new production management system from scratch within a few months. This sounds like a crazy plan, right? It’s possible, but in this article, I want to show that sometimes this crazy method is very effective. I invite you to read a case study of a company that decided to follow this path and train its own development team.
First introduce the customer’s company profile. It is a large organization engaged in the automotive industry with branches in many countries. The main areas of its activities include the production of automotive equipment. The company has implemented systems for monitoring, controlling, and planning production in its branches. It is written and maintained by a programming enthusiast and self-taught employee. The system works well, but it was written without using any architectural patterns, good programming habits, or even using a version control system! In order to be able to reasonably develop and implement it in subsequent production plants, it is necessary to rewrite it in a professional manner using the best technologies and tools. Psc technology. We helped the company achieve its goal of writing an appropriate system in about 8 months, and at the same time transferred expertise about the entire software development process. It is worth mentioning that the cooperation with customers is almost entirely online. In the next part of this article, I will focus on how to train four developers from scratch in such a short period of time, so that they can reach the level of a solid junior developer, and train a zero-level worker, even to the level of an ordinary developer.
Step 1-Training and Workshops
.NET “he said.In addition, we are still looking for a marriage relationship. In order to complete this agreement with the signing of this agreement.First, we started a series of training on the above topics. Within a week, we provided a lot of knowledge by holding the following training:
Kit.,
Bitbucket.,
Visual learning?,
Development process workshop,
Jenkins.
Jira application form?,
Each of these training must start from scratch and last for up to 8 hours. Therefore, this is just an introduction to related topics. To learn more, the team conducted a separate 3-4 weeks of training, focusing on: C#,ASP.NET Depending on the core, the core of the entity framework, JavaScript and jQuery (yes, the old-fashioned jQuery, I decided that for complete beginners, the entry threshold of the modern js framework is too high).During this period, access to a platform that contains a large number of high-quality online training databases is essential.In addition, it is worth mentioning that as part of the self-study, before starting the actual project, some programmers independently implemented their own development projects, and then we commented on this project.For this reason, the initial comments on the beginning of programming can still be made in those so-called demonstration projects, and the people who entered the correct project have gained a wealth of experience during the implementation of the project demonstration.
In the later stages of the project, we hold 2-3 days of workshops on the company’s site every two months.During this time, we were able to explain and train the currently required topics to the people involved in the project.When meeting face-to-face, it is much more convenient to answer all the annoying questions and provide the necessary information. With a projector or a whiteboard, you can draw something on it to solve more difficult problems.
Step 2-Control, counseling, consultation
When we started working on the right project, my team of four programmers was still dealing with newly learned issues and felt a little vague.However, their ambition and willingness to learn should be emphasized.We don’t have time to train them until they are at a high enough level before starting the project implementation.It is necessary for us to start right away.Fortunately, everyone knows and accepts the risks that team learning can cause.I am responsible for managing the entire project.For customers, the most important thing is to create high-quality products, even if the execution of tasks is delayed.To this end, I used all the tools available to help us work.By using Jira, our single source of truth about the project (“one source of truth”), we can easily check the current status of the work and identify problems at any time.
Due to Bitbucket’s submission request (pull request), every task or bug fix must go through my code comment before it can be migrated to the main branch.Initially, it is understandable that there were a lot of comments.Good download, this is a good place, not a good place.It turns out that if a person handles multiple tasks at the same time and has multiple characteristic branches, when it is necessary to modify one of them, the modification will first fall on the branch they are currently working on, and then they manually copy it and apply it to other branches.This means that there is code for another branch on one feature branch.This leads to many merge conflicts.Only after re-training git to focus on actual problems will the benefits of code separation and one branch working mode for each task be fully understood.Unless I didn’t expect that it would be difficult to use git correctly before, I thought they would have problems understanding and performing tasks correctly in accordance with the recommended architecture and good principles (such as object-oriented design: solid).I will understand that for inexperienced teams, these topics may actually be difficult to absorb.Before I FOCUSED on TEACHING EVERYONE HOW TO RESPECT THE SOLID principle, AND SHOWED SOME SIMPLE EXAMPLES OF HOW TO WRITE CODE WITH THIS METHOD AND WHY IT IS SO IMPORTANT.In addition, I want to implement the first user story, asking them to go through every layer of the system and show it as a model example.At the same time, I tried to modify other errors regularly during code review, but this also seemed abnormal at first.Why?As you may have guessed, there are many errors.It is extremely important for my comments to be factual and constructive, and to convey where I did something wrong, how to do it better, and why another solution is more effective.In order to explain the meaning of comments and ensure that they are well understood, we usually need to have additional chats with screen sharing.This method aims to learn and eliminate similar mistakes in the future.In addition, because the comments are not stubborn or malicious, but hope to spread my knowledge and experience (for example: please understand that if you use a different method of operation, for some reason, it will be better to do so), this method allows me to establish a good relationship with the programmer. Relationship.Through such a difficult work system, the team quickly gained experience.The only advantage of this method is that it allows them to learn from their mistakes.They experienced for themselves why code duplication is not very good in many cases, mixed responsibilities can also bring bad results, why naming conventions are so important, and why unit tests basically take so long to write.
Like any project, sometimes you have to solve more difficult problems and come up with solutions. Such issues are usually planned to be discussed during customer on-site workshops. At that time, we could sit in a room together, brainstorm freely, and then come up with an outline and detailed information about the solution. For programmers, this is also a great encouragement and development. This also taught them how to find solutions to critical and complex business needs so that they can also consider the efficiency, extensibility, and security of the entire system. By participating in this process, they not only learned to focus on the issues discussed, but also analyzed the impact of their entire system.
Such work has brought considerable benefits. There is progress the science that the developer is determining has arrived. How to implement the follow-up recommendations on improving the design obtained from our record of lessons learned, and how to affect the quality and performance of the work measured by the burndown and velocity reports. It can also be seen that there are fewer and fewer comments from code reviews, and the speed of submitting requests for consolidation is getting faster and faster.
Prepare to work independently
The final step is to prepare the team members and let them become independent programmers to confirm that they can understand, understand and apply. The basic route and mode of the network center. They should be able to solve (or find tools to solve) the most common programming problems. It is also important that they can identify errors in another programmer’s code by conducting code reviews themselves.
The process of reaching this level is gradually formed.First of all, when a programmer makes fewer and fewer serious mistakes, he himself can notice the error, and only when he needs help in performing more difficult tasks, we appoint him as a critic.At that time, he can review the code of others and accept the submission request, but he also needs a second reviewer to conduct additional review (the so-called double review, English: double check).This gave him a different perspective because since then, not only did his code need to be reviewed, but he also had the opportunity to seriously study the code written by the team and report errors to others.In addition, in the so-called double review, you can access the submission request again and see what other errors the second reviewer has reported, but he did not find it himself.The previously prepared document lists the principles of correct coding in the project, the so-called “Developer’s Guide”, which helps with comments.When a programmer has conducted a large number of code reviews and its quality meets the requirements, he can become an independent critic.Since then, his acceptance of the submission request has led to its merger with the target branch.
In this way, we have reached the stage where the team is already at the level of a reliable junior developer, and at least one of them has reached the level of a regular developer. Therefore, the team no longer needs further continuous guidance, control and teaching-they can further develop on their own. If a serious problem occurs and requires a lot of knowledge and experience to solve, the customer only leaves a door in the contract, that is, he can consult and train with us in a short period of time.
Summary
Has the team formed by people with no experience and expertise been successful? Of course it is! The project has been implemented as planned. Their product passed the first safety test very smoothly, and only one serious incident was detected. At the end of our cooperation, the software was ready for production implementation. Of course, only after running in production for a period of time can the quality of this project and its success be comprehensively evaluated. However, I would like to emphasize that as important as the implementation of the project itself is that the company acquires the capabilities and knowledge related to software development. In this way, customers can further expand the team of experts to include not only programmers, but also testers, analysts, and developers to build and develop this ability.





