Elements of Design

This is a brand new talk… so brand new that I’m still finishing the slides.

Over the past few years, I’ve been spending a lot of my time doing design work and leading design teams, in diverse areas ranging from general- and special-purpose library design, to systems software architecture, to programming language design and evolution including participating in the crafting of various C++0x language and library features.

Although those areas are pretty diverse, they also have a lot of commonalities, and the insights and learnings apply directly to mainstream production software design. I’ve organized the topics to cover proven design practices at three levels:

  1. Design process: Running a design effort to set it up for repeatable success.
  2. Design principles: Fundamental truths that guide design choices toward high quality.
  3. Design elements: Key specific design points and best practices to learn and apply.

Each process, principle, and practice is illustrated using real-world examples drawn from personal experience in many different design areas, but always targets “how you can use this today”: concrete skills and techniques for the development of well-designed production software and applications.

I’m looking forward very much to this topic in particular, not only in this talk but also in the informal and unstructured fireside time built into the C++ and Beyond schedule.


Update: This talk has now been extended into two parts. See here for details.