Infotainment & Connectivity
General Motors engages in the designing, manufacturing, and selling of cars, trucks, and automobile parts.
Project: Automation TPM Tools
Languages / Tools Used: Python, Perl
Location: Warren, MI
During the spring of 2021, I worked remotely as a Software Engineer intern at General Motors, supporting the Infotainment & Connectivity team. The team focuses on managing and executing cost-efficient solutions for infotainment systems that scale to millions of users and vehicles.
The Problem
My team consists of technical program managers (TPM) who are in charge of overseeing and driving the multiple complex projects in the infotainment space. However, a lot of the tasks related to the projects are manually inputted into their development dashboard (similar to Jira). This takes up a lot of extra time, time that could have been spent doing something else in regards to the project rather than manual work.
Solution
To save time from having to input data into the system, I wanted to automate the entire process, leading me to looking into the internal system API. Ultimately, I created a script where, if given an Excel spreadsheet of data, it’d read through all rows of change requests (CR) and submit a batch request to the system, easily outputting a file that connects each CR to its new ticket link. This was a huge improvement because usually, all the tasks would already come in spreadsheet data and the TPMs would have to transfer such data from the Excel spreadsheet to the development dashboard.
Additionally, since I was able to finish this project early on, I tackled another small project with the sister team. The engineers on that team work specifically with vehicle calibration. When given a set of vehicle characteristics, it would create a set of valid vehicle configurations (where each characteristic would work with each other). However, the script they use was written by an engineer who left awhile back ago, written in Perl. Thus, this script was very hard to maintain as nobody on the team knew the language. I took the initiative to learn Perl on the spot, just enough to be able to understand the inner workings of the script. Eventually, I rewrote the script in Python, a more known language. I created a dozen of sample test cases generated from the Perl script to use when testing the Python script, ensuring correctness of functionality.
Learnings
- Take Things One Step at a Time!
- With a project where I had to reverse-engineer the Perl script to Python, it was difficult and overwhelming, similar to learning any new programming language. However, what helped me get through this last project was the fact that I set small goals for myself in increments. This allowed me to understand my progress rather than seeing the project as one whole. It gave me room to breathe and understand the inner workings of Perl.
- Communication… is key!
- As cliché as it sounds, communication is key. You’ll hear it all the time. For a system that was poorly documented, as well as working with an unpopular programming language like Perl, I had to ask A LOT of questions to unblock myself. Of course, while I attempted, it is better to ask after a period of time of trying~
- Additionally, I made sure to always update my mentors on my progress and roadblocks. Everyone is there to support! Updating them will help them understand if I need additional resources or 1:1s.