Software now accounts for the lion's share of the cost of developing and using computer systems. My long-term goal is to establish a genuine engineering discipline to support the design and development of software systems, in particular systems used by real people. Currently I'm working on design methods and analytic techniques for building complete software systems out of subsystems and their constituent modules. This is the software architecture level of design.
My current interests are in
sufficient correctness, specifically how we decide whether real-world systems are good enough for the way they are used
design spaces, specifically how making design decisions explicit enables considered tradeoffs between design alternatives
self-adaptive systems, specifically how concepts from control theory can be applied to the design of these systems
translation of research results to actionable guidance, specifically how ideas from evidence-based medicine can support fusion of results with different levels of evidence