Alex van de Sandt

My Internship at Honeywell

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.

Two weeks in, I started my first big project - create a menu in React for users to select what layers & information they wanted displayed on the 3D map, as well as a legend for all of the layers that they selected. I knew I would have to do a lot of work in React, so I had already finished both tutorials and made a deep dive into the more advanced documentation on React's website. At this point, I felt I was well-equipped to complete the project on time. However, because the whole application was (and is) still being developed, many of the layers that users would enable with my menu were not even available yet. Therefore, however I implemented the menu, I had to be sure that it was easy for other developers in the coming weeks to connect their work to the menu. When building the menu, I would always ensure that my code was clean, well-formatted, and easy to understand quickly so that another developer could find what they were looking for. I also had to ensure that I was following best practices for React and Javascript, and for what I knew at the time, I think I did my best (by the end of my internship I had gone back and fixed a couple antipatterns that I simply didn't know about at the time). At the end of the sprint, I was proud to demo the menu I had created. I received excellent feedback on some design details, and even discussed with the project owner some new ways to think about a user's workflow.

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!