Moving user experience and customer experience into the spotlight has made companies more successful. We're now seeing a strong interest in improving developer experience, too. One reason is efficiency. We want deliver more with the same development team. The key reason, though, is that a good developer experience leads to more responsive IT, which, in turn, leads to a more responsive and more successful business.
As a consultant Erik has seen how several organisations have built internal platforms to improve developer experience. In this talk he will share his observations on when it makes sense to build such a platform and on how to build and evolve it. This is complemented by a description of underlying technolgies, princicples, and practices.
Closer collaboration between developers and operations people brought businesses many benefits. It is also fair to say, though, that it created new headaches. Some practices, especially continuous deployments, forced us to rethink the traditional security sandwich, with conceptual work up-front and a pen test at the end. It was easy to sneak a “Sec” into DevOps, it was reasonably obvious to call for security to be “shifted left”, but in practice this raised even more questions.
Based on his experience working as a consultant Erik will address these questions. He will discuss practices like container security scanning, binary attestation, and chaos engineering, alongside examples of concrete tooling to support these practices. In addition Erik will show how the concept of fitness functions, which have become popular in evolutionary approaches architecture, can be applied in the security domain.
Architectures based on microservices have spread rapidly in the past few years. Organisations are drawn to the promise of independent evolvability, which allows to reduce cycle time and scale development. At the same time in many software solutions the majority of the codebase is now running in the web browser, which leads to an often underestimated challenge: the software design of the frontends. All too often teams have well-structured services running on the servers but a big, entangled monolith in the browser.
In this talk Erik describes a number patterns, harvested from practical use, that allow teams to avoid the dreaded frontend monolith, and build software solutions that fully deliver on the promise of microservices. The patterns range from the simple, using edge-side includes to do dynamic, yet cacheable, server-side composition to the complex, including an example of how to compose a React application inside the web-browser.
Today it is hard to imagine that fifteen years ago agile development was a niche approach, considered too radical to be used in the mainstream. Similarly, when the DevOps movement started about five years ago only a small number of innovative organisations took note. They quickly gained competetive advantages, which then led to more and more interest in the movement.
Erik will talk about experiences organisations have made with DevOps. He will discuss processes, tools, and organisational structures that led to the successful merging of development and operations capabilities, and he will describe how DevOps fits with other trends such as Microservices and Public Clouds. All of this forms a picture that allows only one conclusion: sooner or later all successful organisations will move to a DevOps model.
Our talk will begin with one of the core themes of the early development of agile software - that those involved in software development should take a more collaborative role, not just building software but helping to determine how software can help its users. We believe that this engagement requires greater knowledge of a user's goals and also responsibility for the user's welfare and our impact on the world. While the internet has brought great benefits in communication, it's also led to an unprecedented opportunity for mass surveillance, both by states and private corporations.
We'll discuss how defeating such surveillance requires greater security in our communication, reversing recent centralization, and attention to user experience. For the last year Erik has been leading a team to apply these principles to email. We will explain why the argument of "I have nothing to hide" is flawed and why it is our our responsibility to take up this task.
Agile development practices were well established at AutoScout24 when we embarked on a project to move from hosting in data centres to the AWS cloud. The move allowed us to build on our experience with agile development and become even more agile through some of the opportunities offered by a public cloud solution.
In this talk Philipp and Erik report on their first-hand experience on Tatsu, the project that transforms the existing, mature, IT setup into a next generation web-scale IT platform. They describe how the team benefited from elasticity beyond production by introducing elastic computing to development and data analysis tasks. They discuss how a cloud environment greatly helped with the restructuring towards “two-pizza” teams that work with a “you build it, you run it” mindset. Additionally, Philipp and Erik explain how architecture decisions that have an impact on infrastructure can be made more freely in a cloud environment, resulting in solutions that are a better fit for the problem.
Software quality has an obvious external aspect, the software should be of value to its users, but there is also a more elusive internal aspect to quality, to do with the clarity of the design, the ease with which we as technologists can understand, extend, and maintain the software. When pressed for a definition, this is where we usually end up saying "I know it when I see it." But how can we see quality? This session explains how visualisation concepts can be applied at the right level to present meaningful information about quality. Different visualizations allow us to spot patterns, trends, and outliers. In short, they allow us to see the quality of our software. The tools and techniques shown are easy to apply on software projects and will guide the development team towards producing higher quality software.
Public presentations
Following the success of agile and lean principles for individual projects we are now seeing interest in applying the same principles across the entire enterprise. This brings agile and lean thinking to architecture groups, and raises questions around enterprise architecture and governance.
In this session Erik introduces the concept of evolutionary architecture and then discusses questions such as: How can an architecture strategy be executed in a lean context? What about conformance? And: where do the architects sit in a lean enterprise?
Public presentations
Models are often viewed as something you create during design time and use to generate code. What if we turn the approach up-side-down and generate models from code? Humans are very good at recognizing patterns in images, making visualizations a valuable tool, for example to recognize dependencies or data flow. This is particularly true for dynamic, loosely coupled systems that are often less explicit and evolve over time. Once you have generated a model you can take things a step further and run checks and validations against it. Visualizations can also be used to plot out source code metrics over various dimensions to detect potential "hot spots" in the application that may require special attention.
This talk applies the concepts of visualization and model generation to a broad range of usage scenarios, such as asynchronous messaging, software components and object-oriented applications.
Public presentations
The Guardian newspaper has embarked on the next stage in its digital content strategy with the launch of its new website, one of the largest news sites in Europe.
From a technical perspective the development team faced several challenges: Advanced capabilities to organise and relate content require complex logic, which in turn means producing very dynamic pages at the highest levels of performance. The brief also called for a complete separation of page design and content logic, integration with user-generated content, and a strategy for the migration of over 1 million URLs.
In this case study, Mat and Erik present the overall solution, which uses practices and technologies such as Domain-Driven Design, the Spring framework, Ajax, AOP, Continuous Integration and automated web testing. They also discuss some innovative technical approaches in detail.
Public presentations
Fully scripted builds and continuous integration have become more mainstream in the past years. In this talk I want to share some of the great ideas and good practices for builds I've seen on projects that take continuous integration a step further. I will examine build pipelines, fully automated acceptance test suites, information radiators, virtualised test environments, and software quality reports. In addition I will discuss a few do's and dont's that can make the difference between a good build and a great build.
Public presentations
More and more developers are being drawn to Test Driven Development (TDD). It doesn’t take much time or effort to get going, especially after you have passed that first hurdle of approaching development using the mantra of “red-green-refactor” instead of “code for days and then debug and test”. But after a while you discover that TDD has more to it than just basic state-based testing. In this session Erik will present in-depth discussions of topics such as interaction-based testing, dependency injection, classical vs mockist testing, test doubles, builders, and Hamcrest matchers.
Public presentations
This tutorial demonstrates the development of a small system using test-driven development and supporting technologies. The system will comprise a handful of Java classes that exemplify typical components found in enterprise applications, including domain objects, a service layer, and gateways.
The tutorial presents two complementary approaches to TDD: state-based testing and interaction-based testing. Both approaches will be discussed in depth during the development of the system, and benefits of each approach will be highlighted and contrasted. The tutorial also covers common trade-offs and edge case, e.g. how to deal with testing private methods and when not to use dynamic mocks but hand-crafted stub objects. The implementation will use modern technologies such as JUnit 4, Hamcrest, and Mockito.
Attendees will gain an understanding of how proper use of test-driven development fosters good design; through decoupling and interface discovery for example. Attendees will also gather a nice catalogue of the most commonly used patterns used in conjunction with test-driven development.
Public presentations
[Slides][Source with Mercurial repository]
The problems we are looking to solve with software are becoming increasingly harder and more complex, but how do we best deal with this complexity? Martin and Erik will argue that the answer is simplicity. More than twenty years ago Fred Brooks identified accidential complexity, that is complexity that is not inherent in the problem but is caused by the approach we have chosen, as the only area left where significant gains in productivity could be made. So, if we manage to achieve simplicty in design and approach we can successfully tackle the real complexity of the problem we are solving. What we have seen, though, is that it is anything but easy to achieve simplicity. All too often we end up with designs that are either too simplistic or too complicated. The real skill in designing software lies in finding a good middle ground.
Public presentations
Modern development platforms provide annotations that can be added to various language elements. (We use the Java term annotation as we feel it describes the concept more precisely than the term attribute which is used on the .NET platform.) In this talk we discuss a pattern of annotation use that we discovered during the development of an enterprise application and have used successfully since. We call this pattern Domain Annotations, and the idea is to enhance the domain model with domain specific annotations that can be used for a variety of purposes. This pattern has not played a major role in public debate yet but we have found that it is one of the most powerful usages of annotations.
An essay about domain annotations can be found in the ThoughtWorks Anthology.
Public presentations
Selenium is a test tool that allows you to write automated web application tests in many programming languages. The test use any mainstream browser with JavaScript support and can target arbitrary websites.
This talk starts with a quick demo of creating automated tests using the Selenium IDE and then show how these tests can be integrated with existing Java, C#, or Ruby test suites. We'll end with a discussion on how to write robust tests, and how to structure tests to make them more reusable.
Public presentations
Many traditional assumptions about software development have been challenged in recent years. Agile processes and service oriented architectures are two examples of this. An area that has seen little real scrutiny is developer productivity. Almost by convention, every new tool, framework or approach promises huge gains in productivity but a coherent view of all factors involved is usually missing. In this talk I examine several common myths about developer productivity and show that productivity improvements often require a trade-off with other desirable goals. I also discuss the relative impact of some tools and approaches.
Public presentations
Agile methodologies such as eXtreme Programming and SCRUM are hot topics today -- and they are also hot targets. When things go wrong on an agile project, it's far too convenient to blame the methodology, and not thepeople charged with implementing it correctly.
In this talk Erik will discuss the most common reasons a team may fail when trying to execute a project using an agile methodology. He will cover how to learn from the mistakes of others, and avoid repeating new mistakes of your own.
This talk is based on experiences Clinton Begin and I have made on projects at ThoughtWorks.
Public presentations
Repeatable success in delivering complex enterprise systems depends on the ability to leverage experience from past systems. On an architectural level, direct reuse is usually not practical and blueprint architectures are often not flexible enough for complex systems. However, design patterns provide a middle-ground by describing idiomatic use of technologies and capturing the essence of successful designs.
Topics discussed include: An introduction to Enterprise Integration patterns, real world examples, an in-depth look at central patterns and an overview of Enterprise Integration technologies.
Keynote, Microsoft EMEA Architect Forum 2005:
An introduction into the Inversion of Control principle and the Dependency Injection pattern, with a discussion of the benefits of using these, practical examples using the popular Spring IoC container, and an explanation why using IoC will benefit any Agile development effort.
The presentation follows the implementation of an examplary user story. It discusses different implementation strategies, including traditional Service Locators, and demonstrates the benefits of an implementation that uses Dependency Injection. It also contrasts testability of the respective designs. The source code linked on the left hand side is the code written on stage at ØreDev.
Public presentations
Our opening statement is that Test Driven Development is, despite its name, not mainly about testing. This is explained and we briefly discuss the TDD mantra "red-green-refactor" before demonstrating Test Driven Development in a programming session. We start from scratch with no prepared code and implement 5 user stories in 3 iterations, each of which has a theme:TDD using state-based testing, embracing change and refactoring, and interaction-based testing with Mock Objects.
Of course, we pair-program and discuss many of the small design decisions we are making. It is worth noting that we use the ReSharper and TestDriven.NET add-ins for Visual Studio to increase our productivity and thus the pace of the session.
Public presentations
In the first half of the presentation John Horgan and I discuss Dependency Injection and Infrastructure wrappers, which we think are essential ingredients for testable application architectures. We also introduce PicoContainer, a lightweight Inversion of Control container that pioneered constructor based dependency injection.
In the second half of the presentation we show how these concepts can be applied in a real enterprise application. In particular, we will show how to refactor a set of EJBs that use service locators into a set of objects that are managed by PicoContainer and wrapped by a single EJB facade. We will also show how to exend the popular Struts MVC framework so that it uses the Dependency Injection pattern for it web actions.
Public presentations