You are viewing this article in the AnnArbor.com archives. For the latest breaking news and updates in Ann Arbor and the surrounding area, see MLive.com/ann-arbor
Posted on Thu, Nov 18, 2010 : 5:27 a.m.

What I would tell my younger self: Engineering is about solving problems

By Bill Wagner

Along with my SRT Solutions co-founder Dianne Marsh, I periodically give guest lectures for computer science classes at the University of Michigan. Recently, Dianne and I co-presented on what we’ve learned in our time working in the software industry. Our presentation, “See that Shiny Object Over There? Investigate Carefully,” hit at the idea that our industry moves very quickly.

This talk could have just as easily been titled “What I Would Tell my Younger Self.” I’ve been creating software for quite a while, and I never regretted my career path. Our guest lecture will be a success if the students we recently spoke to experience the same success and satisfaction from their careers.

The single most important realization for anyone in the software field is to grasp that engineering is about solving problems. Every software program we write must fulfill some need, perform some function.

The tools, languages, platforms, and deployment devices will change rapidly. However, the fundamental activity of creating code that performs work for people will last forever.

Closely related to that is the important engineering skill of balancing different goals and ensuring the right weight to each possible goal. Every project I’ve ever been on had to weigh the goals of schedule (to hit a market window), feature set (to satisfy a market), and fit and polish (to delight customers and win in the market).

Those goals are sometimes in concert and sometimes in conflict. Your job as an engineer is to weigh those conflicts and make intelligent decisions based on the relative importance of each goal.

Of course, those ever present truths are not what led most of us into this field. The best software engineers are the people who love the fact that this field changes constantly. We have new technologies to use every few months, promising to provide a better experience for the programmer or for the users or to reduce boilerplate code to minimize programming error. It’s exciting to continually explore new ways to leverage software in ways that weren’t possible just a few short years ago.

However, it’s also important for engineers to look at new innovations with a critical eye. For every iPhone, there is a Newton. And there are similar successes and failures for every major technology vendor.

You have to look at each new technology with those eternal goals in mind: Will the change of moving to a new platform be justified in some way that your market will respond to? Will you get new features done faster? Will the users’ experience be that much better?

Of course, there are costs to staying on the same legacy platform too long as well. How long can you afford to wait while competitors might pass you by moving to a new platform? In my experience, too many businesses fail to recognize the costs of staying on a successful platform until it is too late.

Legacy platforms, while comfortable and reliable, aren’t always the most efficient way to drive business forward. That’s far more common than companies placing big bets on a new technology that fails and why we told the students to be aggressive in looking for new opportunities, rather than becoming too comfortable in one of the current fads.

The third key to long-term success is breadth. To have long-term success, you’ll need to grow skills outside of core software engineering.

I was pleased to hear a number of students aspiring to start their own companies. I’ve written before that software will continue to be a growth industry, and some of these students can certainly find success building companies. To do that will require skills outside of software engineering.

One of the most fascinating aspects of computer science is the opportunity to apply great software engineering techniques across many different business domains, learning a little about each as we do so. The desire to learn something about other disciplines and to bring knowledge back from seemingly unrelated areas to which we’ve been exposed fuels innovation and also allows us to have enough perspective to adequately run a company.

Also, while Dianne and I both prefer the working days we spend building software over the days we spend on marketing and finance, we have an appreciation and rudimentary understanding of these fields.

The final word to the next generation of software professionals is the most positive. This is a exciting field, full of boundless opportunity and endless variation. I still can say that I enjoy every working day as a software developer. If I could go back and give my younger self advice, I would make sure to emphasize that software is a fantastic field.

Bill Wagner is co-founder of SRT Solutions in Ann Arbor and a software blogger. He shares this regular column with co-founder Dianne Marsh.