2018 Edition

The Architecture of Uncertainty w. Kevlin Henney  23rd February 2018 | Athénée Palace Hilton Bucharest

Creating software architecture in a world of change, uncertainty, and incomplete knowledge

Ralph Johnson defined architecture as “the decisions that you wish you could get right early in a project, but that you are not necessarily more likely to get them right than any other”. Given our inability to tell the future how can we design effectively for it? Much project management thinking is based on the elimination of uncertainty, and advice on software architecture and guidance for future-proofing code often revolves around adding complexity to embrace uncertainty. In most cases, this is exactly the opposite path to the one that should be taken.

During the day we will look at how uncertainty is an intrinsic part of software development and that responding to change calls for attention to detail, a good view of the big picture and a willingness to experiment. Rather than being a problem in development, uncertainty, lack of knowledge and options can be used to partition and structure the code in a system.


  • The relationship between development process and software architecture
  • The relationship between code and software architecture
  • Empirical and emergent software architecture and development practices
  • The role of change and uncertainty in coupling and modularity
  • How team size and organizational structure influence architectural evolution


Kevlin Henney is an independent consultant, speaker, writer and trainer based in the UK. His software development interests are in patterns, programming, practice, and process.

Kevlin has contributed to both open- and closed-source projects, and his work has inspired and has been the basis for a number of utility libraries and testing frameworks. He has been a contributor and columnist for many software development magazines and websites, including The Register, Better Software, IEEE Software, Java Report, C++ Report, C/C++ Users Journal, EXE and Application Development Advisor.