Success Stories for NOV Company

All Case Studies


NOV’s products include software components that perform monitoring, control, and analytical functions. The software is developed by multiple teams using a variety of technologies and programming languages. To streamline software development, a core NOV development team created a technology platform to be shared by all of the company’s software development teams.

After the successful release of version one of the new platform, the core team decided to reimplement it. In version two, the platform was designed to use microservices architecture with the intention of improving extensibility while boosting development productivity and technological innovations. This plan proved complex and difficult as each member of the core team of in-house developers had a different way of developing microservices and no prior experience with building complete microservices systems.

“Before working with the Enterprise Innovation Consulting (EIC) team, we decided to go with a microservices architecture,” said Suhas Rao, Development Director at NOV. “Our in-house developers, though they are talented artists, each went about developing microservices differently. When we had just a handful of services, things were fine. However, when we started adding more features and functions, maintaining and upgrading those microservices was a Herculean task.”

Unfortunately, the NOV team didn’t have prior experience with building microservices systems. Consequently, instead of increasing, development productivity decreased. Release cycles were slow, delivery of features fell behind schedule, and the quality of the platform was well below expectations.

Suhas knew that he needed to find help. “When I went to EIC, I discovered that they had a framework that could help us standardize our efforts and get the benefits we were looking for,” said Suhas.


We began by conducting a gap analysis, which involved learning NOV’s complex business structure and getting familiar with the stakeholders involved in the company’s decision-making.

“The EIC team spent several weeks or so just understanding our history, culture, and what we were trying to do so that they could diagnose our issues,” said Suhas.

Our gap analysis uncovered a list of critical problems.

Implementation of the second version of the platform had several flaws that caused coupling and turned microservices into a distributed monolith. Many best practices were overlooked. The DevOps role was unclear, and delivery processes were not well automated and lacked clear quality gates.

Additionally, deployment scenarios were not clearly defined, non-functional requirements were largely missing, and environments were not automated. Test automation was spotty and not integrated into delivery pipelines. The platform also lacked a stable backward-compatible interface, which resulted in breaking changes for external consumers every time the internal architecture of the platform changed.

Moreover, attempts to keep symmetry between backend and edge logic introduced extra complexity and prevented teams from utilizing certain technologies and patterns that would improve productivity and quality.

Finally, code organization was not ideal. The organization amplified bad practices, blurred boundaries between components, and further promoted monolithic development practices.

“While working with the EIC team, we realized that they had a reliable framework that would help us standardize our microservices and create what they called a ‘software factory,’” said Suhas.

Based on our gap analysis, we recommended several improvement initiatives.

We introduced a Platform Engineering team, defined deployment scenarios and automated environments. We also introduced a formal DevOps role and automated delivery pipelines with well-defined quality gates.

We also reorganized the codebase and separated components which allowed references only via versioned and released dependencies. We dropped symmetry between edge and backend implementations. Additionally, we implemented edge as stateful services that were optimized for performance. We also implemented backend as stateless microservices optimized for scalability, resilience, and throughput.

Next, we implemented patterns for microservices and introduced a number of best practices. After introducing facades and SDKs for the platform, we treated the platform as a product, providing a satisfactory user experience with regard to documentation, samples, product roadmap, and customer support.

Then we focused on improving test automation and used the untapped potential of manual testers and DevOps engineers to help with system-level testing. We also established clearly defined quality gates and integrated different types of automated testing into the quality gates. Furthermore, we clarified non-functional requirements and automated benchmarks then ran them periodically to meet established targets.

We established a clear separation between development and DevOps. That helped the NOV team focus developers on delivering individual components (narrow and deep) and DevOps on assembling components into a system (wide and shallow). Finally, we optimize onboarding processes for new team members.

“As a part of their consulting process, their team set up multiple, week-long training sessions for our more than 100 developers to ensure that they were up to speed, that they understood the new standards,” said Suhas.

To deliver results, we collaborated with the NOV team and implemented
the following:

Defined EIC’s platform Infrastructure and scripted five environments (dev, test, on-prem, cloud, and edge)
Recommended a repository structure that is optimized for GitHub
Provided templates for component CI/CD pipelines on GitHub
Implemented microservice templates using pip, a package-management system written in Python used to install and manage software packages.
Created a services toolkit for three languages: Go, .NET, and Node.js
Provided recommendations for test automation
Implemented facades for EIC’s platform and SDKs implemented in Go, .NET, Node.js, and Angular
Implemented a sample application that demonstrates all standard component types and delivery processes
Created an architectural roadmap that would facilitate the migration of the platform to a new microservices architecture
Assisted the NOV team with implementing a complete vertical slice until they became comfortable developing using new methods
“EIC took a systematic approach that touched on all areas of the software development lifecycle, including architecture, implementation, testing, and DevOps,” said Suhas. “The project was completed very quickly, and we certainly could not have accomplished nearly as much as we did without the help of the team at EIC.”

The outcome and benefits for the company

NOV moved toward incremental delivery and is experiencing as much as a 30 percent increase in development velocity. “We are not only developing software faster, but we are also developing software that is consistent and predictable,” said Suhas.
NOV minimized codependency and friction between multiple teams while separating their release cycles.
Environments and product deployments are automated, thereby making the process highly consistent and faster. “What EIC helped us do was bring in a standard way of developing microservices,” said Suhas.
The onboarding process for new developers is smoother.
End users can save their search process and quickly pick upwhere they left off.
The cognitive load has decreased, which allows NOV to utilize cheaper off-shore resources and lower development costs.
The overall satisfaction of platform customers has improved.