Difficult Lessons from Software Engineering

  • 2009-11-04
  • Research

Over time, software engineers have developed techniques for creating functioning software that is efficient and dependable.


Software is critical to the working of our modern society. Software is pervasive, it works, it is invisible, it just seems to run things well and stay out of the way. This is not by accident. Over time, software engineers have developed techniques for creating functioning software that is efficient and dependable. Software is so smoothly woven into our machines and services that despite its pervasiveness, most people do not even realize its presence in the devices and services they use.

Software engineering is about understanding problems and implementing solutions that will work now and forever, economically, reliably, and efficiently. Software engineers have developed an approach and a way of thinking to tackle problems and look for near-perfect solutions. Unfortunately, this attitude does not make them popular with managers, who would prefer a less perfect solution that is delivered on time and at less cost. The approach does not make them popular with other computer scientists (e.g.~computational scientists) who just want to get the software running and get the results out, never mind guarantees of correctness or adaptability to future needs. Worse, looking for perfection does not work well in the real world with lay people. Most people are happy to leave things as they are as long as they sort of work. They don’t need software engineers to point out all the existing or potential bugs that could be fixed to make processes more efficient and general.

In this talk, I will discuss some fundamental principles of software engineering that are crucial to producing good software. The principles are more general and can help for all problem solving. Unfortunately, applying them in contexts where the software engineering culture is not understood is problematic. I hope the talk will be enlightening to non-software engineers and at least entertaining for software engineers.


Mehdi Jazayeri is professor of computer science and founding dean of the Faculty of Informatics at the University of Lugano since October 2004. Before that he was a professor and head of the Distributed Systems Group at the Technical University of Vienna (1994-2004). He worked at several startup companies in Silicon Valley before joining Hewlett-Packard Laboratories in Palo Alto for ten years (1984-94). He began his career as an assistant professor at the Computer Science Department of the University of North Carolina at Chapel Hill (1975-1980).

Mehdi Jazayeri is an IEEE Fellow and was program co-chair of ICSE 2000 and program chair of ESEC-FSE 1997. He has co-authored several books including:

  • Fundamentals of Software Engineering, Carlo Ghezzi, Mehdi Jazayeri, and Dino Mandrioli, Prentice Hall, 1992, Second Edition 2002.
  • Software Architecture for Product Families, Mehdi Jazayeri, Alexander Ran and Frank van der Linden, Addison-Wesley, 2000.
  • Programming Language Concepts, Carlo Ghezzi and Mehdi Jazayeri, John Wiley & Sons, Inc., 1982; 2nd Edition, 1987; 3rd Edition, 1997


Tee: 16:00 Uhr in der Bibliothek E185.1, Argentinierstr. 8, 4. Stock (Mitte).


  • Prof. Dr. Mehdi Jazayeri, University of Lugano, Switzerland

Note: This is one of the thousands of items we imported from the old website. We’re in the process of reviewing each and every one, but if you notice something strange about this particular one, please let us know. — Thanks!