These talks would need a major update or are not relevant any longer. They are listed here just for completeness.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.