Senior Software Engineer For A Robotics Company
Job Title: Senior Software Engineer
Type of Company: My company makes materials handling systems, automating inventory handling and order fulfillment in distribution centers and warehouses using mobile robots.
Education: BS, Computer Science and Engineering, MIT
Previous Experience: I worked as a part-time programmer for Control Data during high school and college, which helped me get accepted into MIT. I worked as a researcher for Honeywell for two years, as a software engineer and manager at two different start-ups lasting a total of 18 years, and I've now been a Senior Software Engineer at my current job for the last three.
Job Tasks: I work as a software engineer and team lead of a group of people making software to control and coordinate hundreds of mobile robots in a warehouse. These robots carry shelves of products from where they are stored in a warehouse to a person who picks items from them to fulfill orders to be shipped out to customers. Our primary work is writing software to plan the shortest path for a robot to take, software to ensure that the hundreds of robots don't run into each other or the people in the warehouse, and wireless network protocols that give commands to these robots.
My typical day involves one of a few different tasks. First, there are meetings with marketing and product management people in our company to talk about the requirements for new features or capabilities that our customers need. We talk over what the customers want, what's actually possible for us to implement, and how we might go about providing those abilities. We agree in writing what the requirements are and what we plan to do. Next we have meetings with our software architects and management to determine in a little more detail how we would do these projects, how many people we'll need, and how long it will take for them to finish. Next we make detailed designs with the software and robotics hardware engineers to describe in detail what our plans are.
After all this planning, the rest of my team and I work to write software and tests that carry out those plans. Finally we run test after test after test to make sure that what we've made really functions, and actually delivers the results that we originally planned on. It takes about equal amounts of time to plan, implement and test every project we do.
I also spend time reading about new technologies and tools, since they are always changing; I spend time helping our support teams understand what's happening when our product isn't doing what the customer expects; I spend time training new engineers; and training our support people about our product.
Best and Worst Parts of the Job: The best part of the job is when I've made something new and I see it working well and really helping someone with a problem. There's real joy for me in thinking up something that's never existed before, smoothing its rough edges with experts in disciplines I may only vaguely know, and then seeing that vision come to life. Every job has its dull days -- the days of sitting in meetings and dealing with side issues -- but the days when we're out testing the robots as they do something new are among the best days.
Some of the most challenging parts of the job involve communicating effectively with other people. Understanding what customers really need, understanding what is easy or hard to do for all the people involved in making a new solution, and then getting people to understand what you've made are all hard. The worst part of the job is when something's not been discussed adequately or communicated effectively to someone else and ends up causing problems.
Job Tips: First, you need to understand some things about yourself and get to know what you like and don't like. To be excellent at your what you do, whatever it is, you need to really love the nuts and bolts of it. Much of engineering involves an intense focus on details. Some people would find the detailed parts of my work an unbearable torment, but I truly enjoy them.
Second, really learn, in depth, the field you want to specialize in. Much of what you'll learn you can only learn by doing. So find an opportunity to work with people who are already experts in what you are interested in.
Third, learn enough to be conversant in the areas that surround your area of expertise. Many engineers are blind to the details and difficulties of others who they rely on. Knowing the bounds of your own expertise and appreciating at least the basics of marketing, sales, finance, or other engineering disciplines will serve you well.