I spent this past Summer (2019) working at Honeywell's software development center in Atlanta, Georgia, in the heart of Midtown. I joined a team in Honeywell Connected Aerospace working on the revamp of GoDirect Flight Planning (MyGDC), the frontend to Honeywell's Flight Planning Engine. The new version of MyGDC is a React interface with an Altus 3D mapping engine for visualization, backed by a set of Node.JS microservices and the actual Flight Planning Engine.
Throughout the Summer, I got hands-on experience with React, Node.JS, Agile, and the Microservice architecture. I also gained domain knowledge in the aerospace industry as well as the flight planning process.
Going into the internship, I had very little experience in frontend developmet. I had made a small Angular app for a school project a couple years ago, but I hardly knew anything about React or Node. However, I was able to learn from my very experienced and extremely helpful coworkers to get started completing stories right away. I got my feet wet by adding some basic endpoints to one of the Express Node microservices that collected weather data.
I continued with more work on the frontend, focusing on adding more layers and information to the 3D mapping engine we were using - Altus. I had two major projects related to Altus.
The first project was to display over 20 thousand airports on the map, make them searchable by ICAO code, and make them filterable by runway length and distance from another airport. Each airport was represented by a dot on the map that, when clicked, would display in detail more information about the airport. I achieved this by implementing an aggressive caching strategy that would lazily load the airport data from the microservice only when needed, then pre-generate all of the map assets. Then, when the user wanted to display airports, the assets for only the selected airports would be retrieved and rendered. This differed from the 'canonical' way of adding similar layers to the map, but it greatly reduced initial load times, made the layer itself much faster, and possibly avoided the memory leaks we suspected were present in the mapping application.
The second project involved diagnosing the slow loading times for the static raster image map layers we used to display non-filterable data in the application. I had several ideas for fixing the problem, but I wasn't sure which ones would work. I decided to implement a rudimentary benchmarking module as a React component that used hooks from the mapping engine to measure the loading times for the maps. I also created a small, optional service to extract the benchmark data from the browser as well as persist the data across page loads. Just from diving into the Altus documentation, I was able to identify several APIs that would allow us to optimize the loading of the maps, reducing the number of simultaneous requests. I was not able to increase overall throughput, but I did ensure that the most important layers (such as the base sattelite imagery) would be loaded before less critical layers (such as icons for lightning strikes), vastly improving the user experience.
I learned a lot this summer and gained valuable skills for my career going forward. I was able to put into practice many of the concepts I've learned in school, which was extremely rewarding. One more year of school, and we'll see what comes next!