For our company, ODC accounts for a large proportion of our entire company's business, and most of the business that our branches perform is ODC as well. But do every one of us have a correct and proper understanding of ODC project? I do not think so, which is why I am writing this article and to share my understanding of ODC. In this article, our engineers can learn what ODC is; and on the other hand, our customers can also learn what the real ODC service is, its advantages and the potential consequences if not handled properly.
There are some explanations of ODC which can be heard inside the company, such as:
• ODC is Paid on a monthly basisIn my opinion, paid on a monthly basis is only a form of payment for ODC. It is not a service at all.
• ODC is Paid by time
This is also a one-sided understanding. One hour, one month or one year, they all are time. But if the service requires only a couple of days, could it be called ODC? I do not think so.
• ODC is Offshore Development Center
This explanation is too "shallow". Offshore development center, offshore research and development center, if we understand it this way, then ODC is merely an offshore office!
For our company, I think ODC is a form of cooperation. Its output is a kind of service, and the service could be the delivery of the following:
• Software - high quality software
• Consulting services - enterprise information (software project establishing, planning, vendor's evaluation etc.)
And the main factors to deliver a good ODC service should include:
• O (Open): both sides need to be open and transparent. This is the only way for trust building and better information sharing.
• D (Development): this is the implementation process of software development or of consulting services.
• C (Cooperation): cooperation. We all know customer cooperation is better than contract negotiation.
I think ODC has some very important advantages:
• For software development, the requirements are often difficult to be fixed, especially in a time of rapid change. Once the requirements are fixed, the competitiveness will be lost. Take mobile phone development for example. If you define a mobile phone at the beginning, and develop it strictly in accordance with the plan, then when your mobile phone comes into the market one year later, you will find most of the mobile phones have the fingerprint feature, but yours don't. So your phone will lose all its competitiveness and all your hard work will be wasted.
• ODC contract is generally more suitable for long-term customers. It can make the team members more stable and serve the customers on a long time basis, consequently greatly reducing the risk of the software.
• The payment term of ODC is on a monthly basis, which can significantly reduce the risk of customers' costs and preserve cash flow.
• The delivery of ODC is mostly incremental. For instance, one iteration per 2 weeks allows the customers to detect problems and give feedback for improvements as soon as possible. In some cases, even to terminate the project at an earlier stage to reduce losses..
• For ODC service, both sides of customers and vendors need to see each other as their colleagues, open (O), cooperation (C), no information hidden; both sides share the same goal: to deliver a better software product.
• ODC is more likely to inspire the creativity of both sides, instead of focusing on the function defined at the beginning and KPI (Kill people idea), ODC can help you realize business value is a far more important thing.
• ODC provides more time for developers to continually enhance their understanding of the customers' business areas, so that to deliver better software products and services.
• ODC makes it easier for vendors to work out the plans, and let developers focus more on one client's project instead of working on a couple of projects at the same time as some other software vendors usually do.
• ODC projects are also easier for the company to plan the developers' personal development, so that to increase their recognition of the company. And a company that can retain talents is certainly able to provide better services.
We have used ODC to successfully deliver a large number of projects and the benefits of ODC are far more than the items mentioned above. But as one type of the cooperation model, what ODC can do is still relatively limited; it's not that easy to deliver a high quality service under ODC model.
ODC model of course has many advantages, but at the same time, there are also many disadvantages. One of the biggest advantages of ODC is stable developers, you can keep developers, but at the same time this just happens to be the biggest problem:
• The project cycle is too long and the developers feel bored
Some projects have been developed for a long time, such as more than 5 years, which makes the technologies the developers have been using out of date. Although it's not a problem for the project the developer is working on, it emerges when the developer discusses the issues with other developers. They will realize their skillsets are getting old, which will easily cause them to be impetuous.
But in fact, there are several ways to solve this problem:
o Use new technologies in the existing projects.
o Use new technologies for some features or subsystems, such as using NoSQL, Elastic Search, Cloud and other new technologies. In addition to improving system performance and reducing maintenance tasks, the developers can also learn a lot of new things.
o Replace part of the team members: add some new members to the project, and send some old members to other projects.
However, all the above changes require strong support from the customers; it's very difficult for vendors to make changes unilaterally.
• The price of the quote is increasing too slow to meet the expectations of developers
This is also a common problem. The developers want a salary increase every year, but most developers' salary increase is based on the value/income that the developers bring to the company, that is the quote.
There are also three ways to solve this problem:
• Reduce profits
• Customers accept the corresponding quote increase
• Developers leave the project
If developers' productivity is not reduced (theoretically, it shall be improved every year, as developers are more familiar with the technologies and customers' business), I personally think the second method is the most cost effective choice for customers.
• Work efficiency is reduced as developers have been working on one project for a long time
When we are good at some skillsets, we can finish a piece of work which required 8 hours within 6 hours. Although at some level the output does not change, but for a long time, we'll become negative. And when we work in a negative mood, we cannot produce a good output even with a little bit of a new challenge.
The only solution for this problem, I think, is to replace THE developer!
• Too comfortable to learn new things
If a developer works on an ODC project for a long time, they will not feel much pressure, which will easily lead them into the comfort zone. And if they stay too long in the comfort zone, they might not be able to adapt to the new work pace, accept new knowledge or lose learning ability if they are transferred to a new project.
The solution for this problem is to constantly improve our quality and efficiency of ODC service by adopting the correct and appropriate development process.
Simply put, here are some last important factors:
• ODC is not selling Time, it's the Service
• ODC is only a type of cooperation model
• The output of ODC is Service (software or consulting service)
• The main purpose of ODC is to improve quality and efficiency, not to make more money, making more money is only an accessory of ODC
• ODC is the foundation for better employee development planning. Only when the employees are happy, they can deliver a good job and keep the customers happy