Improving speed to development: Lessons learned while building aviation apps on Predix
January 18, 2017
This post was written by Jon Dunsdon, Chief Technology Officer for GE Aviation's Digital Solutions business.
At Predix Transform 2016, Steve Curd, Scott McCluskey and I discussed some lessons we learned while developing Predix-based applications for aviation. These principles can be applied to almost any application, so I thought they were worth sharing in a blog.
Listen and collaborate
The best way to speed up development is by giving customers exactly what they need. This involves collaboration and quick turns. Gone are the days when developers took a requirements document and went off to a dark room to code, handing over a finished application months later.
Our projects greatly benefit from sitting down with customers, listening to them describe their pain points, and collaborating with them on the best solution. We continue to work with them while we are building, letting them see what we’re doing and providing a minimum viable product (MVP) or prototype as soon as possible.
Group services by business function
When building a web application, you have a choice of architectural patterns. You can build a monolithic application in which everything is deployed as a single file, or you can use an architecture that uses a fine-grained services layer with microservices that communicate in the backend. When time to market is important, it’s best to take the middle ground. Separate your application services, but center them around business functionality. This limits the number of services you have to develop and manage and it groups them logically.
Reuse wherever you can
We also found that it was helpful to improve the speed of development by building internal tools that help with some of the common plumbing work that comes with building a microservice or micro application. In this case, we used the app-hub and ui-microapp frameworks. app-hub allows multiple teams that don’t necessarily work together to contribute to a single page application without conflicting with each other during coding and development. ui-microapp seed is a code generator that generates the UI code for a basic micro application so that developers can focus on the business logic.
We recommend striving for reuse wherever you can. In our case, one of the key UI components was originally invented by GED and used by GE Energy Management.
Pick the right language
Predix gives you a lot of options in terms of the development languages you can use. Predix supports Node.js, Java, Go, Python, and Ruby on Rails. It’s possible, in a Predix environment, to have four services for the same application written in four separate programming languages.
In our case, we had people working in different parts of the world who had experience in different languages (Go, Node.js, and Java) and each team or subteam used what worked best for them. Consider what the team is most comfortable working in as well as the needs of the service. Does it need to be highly performant, or does it need a lot of utility? Do your developers own the full stack? For example, did they code the UI and frontend in JavaScript and so use Node for the backend to have a consistent language? Also consider footprint if the application needs to scale; we avoid Java on SpringBoot for this reason because it is a huge resource hog. On the other hand, we had a number of team members learn Go as a way to improve our efficiency. While there are a lot of variables, the development team should ultimately have a say in what language they’ll be using.
Practice test-driven development and ongoing collaboration
If you want to develop fast and build a quality product, then you can’t neglect testing. We found that test-driven development helped us to work faster. Before we would code first and test after the fact. The idea behind test-driven development is that you write the test first, then you write your code. If the test fails, maybe you write the code to make the test pass, but this pretty much guarantees that you’re testing at the same time you’re developing. Test-driven development also enables you to find defects much faster. Don’t forget to make integration testing part of the build process to ensure that your services and components all work together as expected.
Of course, we all know that code can be technically perfect, but not really meet the customer’s needs. We found that fast agile sprints gave us regular touchpoints with the customer and ensured that we were not just building something that made sense to us, but specifically delivering a solution that would satisfy our customers. Iterating with the customer provided valuable feedback and gave the customer visibility into the progress we were making.
Use the Predix Catalog
Finally, and this one probably goes without saying, use the services in the Predix Catalog. The catalog consists of more than 50 services and analytics designed to save you time and effort while meeting the requirements for the Industrial Internet of Things. When you’re building an application, look at the Predix Catalog and leverage the services and analytics that fit your needs. And, whenever you create something that can be reused by others, contribute it back to the catalog for your organization (or even to GE Predix!). We’ve created a number of services that are now being reused elsewhere in GE’s Aviation division, allowing us to help accelerate the development of our fellow teams and share what we’ve learned.