MathWorks experience
ExperiencesShreyansh
MathWorks specializes in mathematical computing software. Its major products include MATLAB and Simulink, which support data analysis and simulation. Check out Shreyansh’s internship experience at MathWorks.
The past summer I got a chance to intern in the Engineering Development Group at MathWorks, an American corporation that specializes in mathematical computing software. I’m sure all my engineering buddies would’ve heard of either MATLAB or Simulink, which are the flagship products of MathWorks. What even they might not be aware of is that MathWorks also produces over 100 additional products for specialized tasks such as data analysis and image processing which are used throughout the automotive, aerospace, communications, electronics, and industrial automation industries as fundamental tools for research and development.
The Engineering Development Group (EDG) at MathWorks is where new engineering hires join, and stay for a year or two before transitioning permanently to one of the many engineering teams at MathWorks. This has its advantages, as new hires get the time to explore and work with different teams at MathWorks, all the while learning the products as well as working with customers using the same which makes them better equipped to choose one of the many engineering teams they would like to permanently transition to. As a full-time or six-month EDG’er, you’re expected to split your time evenly between working with teams on projects and customer support. This isn’t the case for two-month interns, who mostly focus on project work due to time constraints. The same also results in them not having the option to choose any team and project they’d like to work on and instead being allotted one based on past knowledge and interests.
As a summer intern, I came in the latter category. Let me introduce you to Simulink here, as it was the tool I worked on.
Simulink is a MATLAB-based block diagram environment for simulation and Model-Based Design of multidomain and embedded engineering systems. Simulink is used to design, simulate, and test systems before moving to hardware, and can also be used to automatically generate production-quality C and HDL code that behaves the same way as the model created in Simulink.
Working under the Quality Engineering team, my project was to increase the code coverage of Simulink Notes, an inbuilt feature in Simulink that allows users to add, view, and update any documentation or notes with any system in the model hierarchy to make it easier for others to understand the model. To give some context, code coverage is a software testing metric that determines the number of lines of code that is successfully validated under a test procedure, which in turn, helps in analyzing how comprehensively a software is verified. For MathWorks, it is important that any software shipped to customers is thoroughly tested and that was the aim of the project.
When informed about the project, I was a bit worried as Simulink was a software I had no previous experience with. With the help of my mentors, I was quickly able to ramp up and after getting familiarized started exploring the source code. From here on, we were able to arrive at a plan of action. The first act was to mark out any dead code to be removed, which is not that easy on a massive codebase. Next, we figured out workflows to hit operational code that was not being covered by existing test cases. It was here we discovered a problem, and one that led to the work I most liked during the intern.
You see, there was a tester package in the codebase, which provided the facility required to test Simulink Notes. However, when we tried to add new test cases for workflows not being tested, we discovered some issues with the existing package. The tester package had not been updated with the tool and lacked the functionality we needed to add the new tests, as well as had a design that was not easily extendible. These issues, along with the lack of proper polling to ensure components were loaded before returning them made it clear that an entire redesign of the package was needed.
Redesigning the tester was one of the best learning experiences I’ve ever had, as it gave me a chance to test my understanding of Object-oriented and good software engineering design principles. The difference between knowing something on paper and having to apply it was evident to me, and I’ll admit I found myself revising these concepts, trying to gain as clear an understanding as I could. Both my mentors, Udit and Sachin as well as my project sponsor Selvaprabhu Chellamuthu were of great help here. From the first design I made, they were always there to review and challenge it, pointing out issues I had not thought about. They could’ve saved time and effort by just giving me a design to implement, however they took out the time to sit through multiple meetings, answering numerous questions I had, each time pushing me on the right track and helping me develop my thinking along these lines, and I really appreciate that. In the end, we ended up with a design that followed good SE principles, all the while adding the missing functionality and fixing the existing issues.
Once we had the new tester, we added the new test cases and migrated the existing ones. On computing code coverage afterward, we found it to have increased by a factor of 2.5, a good improvement from where we started.
Apart from the project, my time at MathWorks also included other activities. We had an interns hackathon, and while my team did not win it was fun working with the other interns late after office hours trying to get our tool to finally work the night before our presentation. The company-wide bash was another such event, where all of us MathWorkers came together to discover bugs in the pre-release version of our software. Getting to connect with and shadow EDG engineers was great too, as it helped me understand the role better. Nothing, however, was more fun than the weekly team meets we had to blow off steam, where we talked, played games, and just had a good time!
Looking back at my internship, it was a great learning experience. Working in quality engineering made me realize the importance of testing as a part of the software engineering process. I got exposure to both internal and industry-standard testing frameworks, as well as testing techniques which were something new for me. Going through design and code reviews with experienced industry professionals helped develop my thinking process, and it was a pleasure getting to work with and learn from them.
Getting to design the new tester package was amazing. It gave me a chance to test my knowledge regarding OOP’s and good design principles and made me realize there is a lot to learn. Refreshing my knowledge about Object-oriented design principles like SOLID, UML class diagrams as well as reading and learning about design patterns I was not familiar with before, I gained a better understanding of these concepts and that wouldn’t have been possible otherwise. Leaving aside all technical learnings, the biggest lesson I learned was one of being helpful and collaborative, as that was the way everyone there treated me. The collaborative spirit and willingness to help out is something I really liked, and I hope I can carry it forward into the corporate world.
I’d be amiss if I did not thank the people who helped and guided me throughout my internship here and would like to thank my manager, Mr. Sandeep Sudhakaran who has provided me guidance and encouragement throughout the internship, and my project sponsor, Mr. Selvaprabhu Chellamuthu for not only giving me the opportunity to work with his team, also providing help and guidance with the project. I express my deepest gratitude towards Mr. Sachin Kumar, my project lead, and Mr. Udit Pant, my project mentor for always being there when I needed help. Their advice, guidance, and ongoing support are the pillars on which my work was done.
I would like to thank the IN Simulink UI team and BGL EDG group - Sandeep Sudhakaran for letting me into their team meetings and sessions, which were both fun and learning experiences, as well as the Bangalore EDG’ers for helping me understand and become comfortable with the EDG workflow. I’d also like to thank all the people from different departments like training and HR for helping me during the onboarding process.
Lastly, I’d like to thank CDC IITT and MathWorks for giving me this opportunity, one from which I carry on good memories and learnings.