I am interested in techniques that make it easier to build reliable software that meets its specifications - this requires that you write specifications of course.


With colleagues I have developed resources to support research activities by the broader community. Several of them are linked below:


Other people keep track of the papers I've published, but it usually takes some months for these sources to be updated. If you are interested in a recent paper send me an email.

Research Philosophy

There are many great books on the research process that can help shape one's approach. I won't attempt to point them all out, but I'll mention one that I found early in my career.

The Incomplete Guide to the Art of Discovery by Jack Oliver distills lessons from a long and impactful career in research (on plate tectonics). It is full of many great suggestions, but the cautionary tales related to the failure to look for and at the big picture made an impression on me. For instance, the tendency to "ignore the big opportunity and cautiously probe in detail the next obvious small element of the frontier" of a discipline, the risk that you "become ... captivated by the intricacies and challenges of ... day-to-day activities" and get stuck in a "science eddy", and the temptation to "follow the crowd". Falling prey to these, which is all too common, leads to a scientific career comprised of collecting "crumbs".

Oliver is not alone in making these observations. During the COVID-19 pandemic my wife read John Barry's The Great Influenza and shared a number of interesting insights with me. Barry quotes Oswald Avery's advice to young researchers saying that most "go around picking up surface nuggets, and whenever they can spot a surface nugget of gold they pick it up and add it to their collection". Oswald clearly values the approach of the few other researchers who are "much more interested in digging a deep hole in one place, hoping to hit a vein" and thereby "make a tremendous advance."

There is no one way to be succesful as a researcher and you need to find an approach that employs your personal strengths, that is sustainable over the long haul, and that makes you happy. But remember that your strengths are not fixed and just as you can develop and add new technical competencies, so too can you build your knowledge of strategies, tactics, and practices that will help you to be a succesful researcher.


One of the best parts of my job involves working with bright, motivated students. I learn at least as much from them as they do from me. Here are two interesting explanations of what a PhD education is all about from quite different perspectives. I felt both the grind, explained by Philip, and the inspiration, that is implicit in Matt's explanation, in my education. My aim is to minimize grind and maximize inspiration for my own students; some grind is unavoidable (i.e., research is hard or someone would have already done it).

Current Students

Graduated Doctoral Students

Community Service

I believe that the field of software engineering develops most effectively when people build on each others work through a cooperative, rather than a competitive, process. I work to support that process by helping to organize and run meetings and journals where people can report on and share their work.