Software Engineer For A Large Defense Contractor
Job Title: Software Engineer
Type of Company: I work for a multi-national defense contractor, which develops and manufactures a wide variety of defense and homeland security products and converts the technologies it develops to commercial uses.
Education: BS, Mechanical Engineering, Worcester Polytechnic Institute
Previous Experience: I started my own computer company after graduating from college and that led to a full-time position at a start-up mapping company. After switching companies a couple of times, I eventually ended up working for the well-known defense contractor which employs me today.
Job Tasks: My primary responsibility is to design and develop radar software, based on specifications I receive from our system engineers. Some of the information I work with is classified so I'm forced to observe security protocols set by the government.
The part of the software I work on is known as FCT -- "Fault detection/fault isolation, Calibration and Test assist." It tests the radar's health and helps to detect hardware problems. It can also be used to calibrate the radar and ensure that it's functioning properly, and it provides engineers with a range of diagnostic tools to test particular functions.
On any given day I'm likely to do one or more of the following things:
1) Design work. Design work starts with a set of requirements. I look these over to be sure I understand them and that I've got the information that I need. If I feel that something's missing or unclear, I confer with system engineers to get a better idea. I then produce flow charts and other design documents to show how I propose to get the job done. This can take anywhere from a day to several weeks (or even months). During that time, as issues come up, I often need to consult with system engineers and my colleagues.
Once the design document's been readied I submit it for review. Both my peers and an external overseer participate in this critique -- a meeting, in fact, which can last several hours. During that time I answer questions and make a note of any changes or improvements that people have suggested. If truly significant issues are flushed out, I sometimes have to schedule another design review.
2) Implementation. Once I've received a design, I can start to write the software, making sure to meet the requirements the design team provides. I work alone on occasion; more often, though, I work with other coders. It depends on the size of the job.
Once the software's been written, I have to formulate code that will test what I've done. I want to be sure that it generates the results we had in mind and that it's capable too of handling unexpected inputs. Part of this testing is aimed at putting the code through its paces and ensuring that it meets the parameters we've been handed by the system engineers. It gets run every night until we're certain that changes to the system don't affect its interactions with other portions of the code.
3) Bugs. Despite the rigorous testing I detailed above, errors can creep into the software. But sometimes too requirements will change at the last moment. In either eventuality, a member of the software team submits an STR, or system trouble report as its known. The STR is then assigned to an engineer (with a due date and priority code) and the engineer tinkers with the code 'til it's fixed. Like coding and design work, this can take an hour or a month depending on the scope of the problem.
The steps outlined above are usually performed contemporaneously, with STR work, design work and coding going on side by side. Training classes and various meetings are a part of the mix.
Since the radar we work on is used by battleships and affects people's lives, we take our work very seriously.
Best and Worst Parts of the Job: The best part of my job is solving problems. Each new design or STR is a unique challenge and coming up with an elegant and efficient solution is very enjoyable and satisfying.
The worst part of the job is some of the bureaucracy involved. Each of the design and coding phases entails a lot of red tape.
Job Tips: Apply for internships while you're still in college. They're a great way to get experience with large companies. If you can land an internship at a company that does work you are especially interested in, that's even better. But any internship will serve your purpose and it'll help you make contacts in the wider world of business.
Additional Thoughts: One of the nice things about software engineering is that many companies have flexible hours which allow you to side-step the 9-5 grind. In general the pay for engineering jobs is pretty decent as well. If you enjoy solving problems, engineering may be the field for you!