Event driven architectures and some of the software development principles needed