Title,Type,Typical duration,Audience,Keywords,Website URL,Overview,Format,Prerequisites,Suggested follow-up
"Intensive test-driven development (TDD) and refactoring","Course","1 day","Programmer
Team lead
Architect
","Programming
Automated testing
Refactoring
Test driven development
TDD
Unit testing
Evolutionary design
","http://amarinda.com/courses/tdd_and_refactoring","Unit test driven development (TDD) is one of the great development process innovations. While associated with Agile development, TDD can be applied to other, more traditional methodologies as well. It brings numerous benefits, including high levels of test coverage, a goal-directed approach to programming and highly maintainable code.

Refactoring approaches quality from another angle: poor quality legacy designs stifle development work and create places for bugs to hide. Refactoring provides a systematic way to clean up and improve design and can be used to carry out large-scale evolutionary redesigns. Superb tool support (particularly in Java) now makes refactoring more cost-effective than rewriting legacy systems in many cases.

TDD tests defects out, while refactoring builds quality in. They work exceptionally well together.
","The course blends tutorial, numerous instructor-led demonstrations, open discussion and short exercises.

Participants will be expected to follow along with examples on their own PCs but an element of teaching effective use of the development environment is included in the course so this should not require much previous experience.
","The course illustrates the theory and practice of unit test driven development and refactoring. It is suitable for software developers with moderate programming experience. Deep technical knowledge is not required, so it is suitable for people with previous but not current programming experience. Experience of Java is helpful. Experience of object-oriented design is very helpful.

This course is extremely intensive — these topics would take 2–3 days to cover on most courses. We follow a carefully-planned structure to maximize learning, and previous participants have given the course very high marks, but please be aware this is a challenging day for the participants. There is a small risk minor topics will need to be skipped to keep to the available time.

To augment the short timescale, intensive learning we recommend following up with on-the-job mentoring for 2–3 days a couple of weeks after the course.
","Agile software developmentEvolutionary design and refactoringTest-driven development (TDD) in Java"
"Agile software development","Briefing","3 hours","Senior manager
Project manager
Programmer
Tester
Product owner
Team lead
Architect
Business analyst
","Agile
Introduction
","http://amarinda.com/briefings/agile","10 years ago the word “Agile” for a software development process had not been coined. 5 years ago a few early adopters were reporting successful projects. Today many organizations – some traditionally very conservative – are adopting an agile process. Why?

As the pace of change in the wider business world accelerates, the inventory of legacy systems grows and the desire to create business advantage through IT strengthens, many organizations have come under pressure to find a better way to deliver systems.

Agile offers the potential to create a software delivery vehicle that responds much faster and works more effectively with the wider business environment.
","The briefing combines a presentation (during which brief questions and answers will be allowed), a separate question and answer session and finishes with open discussion. Discussion often focusses on the practicalities of mapping current processes to the agile model and what changes might need to be implemented.
","This briefing provides an essential grounding in Agile development processes. It is suitable for people in any role involved with software development, including senior managers, team leads, project managers, programmers, testers and business analysts.
","Evolutionary design and refactoringTest-driven development (TDD) in Java"
"Evolutionary design and refactoring","Course","2 days","Programmer
Team lead
Architect
","Refactoring
Iterative design
Evolutionary design
Simple design
","http://amarinda.com/courses/refactoring-and-evolutionary-design-skills","A hallmark of successful software projects is that they build systems that users want extended and enhanced. This creates a problem: how do we design the system so it can be extended and enhanced, probably in ways we cannot anticipate?

Traditional design techniques date back to the 1970s, and although OO techniques in the early 1990s brought with them an added appreciation of the value of encapsulation and modularization, we still see the design of a software system as a one-time activity.

It has proven very hard to make one-off design work, even with careful anticipation of future requirements, definition of high quality abstractions, design patterns and use of advanced off-the-shelf frameworks.

Since the late 1990s, the emphasis has been moving towards a way of working which acknowledges that we can never fully anticipate what feature-set changes a design must be able to accommodate. Instead, we treat design as an on-going activity that lasts as long as the product. Changes to the design and code are implemented using refactoring techniques.

This is evolutionary design.
","The course blends tutorial, class discussion, question and answer sessions, demonstrations/simulations and practical exercises.
","This course is applicable to people in technical software development roles. 
The course illustrates the theory and practice of evolutionary design (including refactoring), along with a refresher on the object-oriented design techniques that apply to evolutionary design.
","Test-driven development (TDD) in Java"
"Test-driven development (TDD) in Java","Course","1 day","Programmer
Team lead
Architect
","Programming
Automated testing
Test driven development
TDD
Unit testing
","http://amarinda.com/courses/test-driven-development-tdd","Unit test driven development (TDD) is one of the great development process innovations. While associated with Agile development, TDD can be applied to other, more traditional methodologies as well, bringing the same benefits:


very high level of automated unit test coverage;
programming activities remain goal-directed (the goals being encoded in tests);
ensure that each step is a step forward rather than back;
manage solution complexity by implementing simpler intermediate solutions before tackling more complex cases;
develop better quality component interfaces by driving interface development from a client’s perspective rather than the implementers perspective;
make code inherently unit testable;
manage dependencies better—making code easier to maintain.

","The course blends tutorial, class discussion, question and answer sessions, and demonstrations / simulations. Participants will be expected to follow along with examples on their own PCs but an element of teaching effective use of the development environment is included in the course so this should not require much previous experience.
","The course illustrates the theory and practice of unit test driven development. It is suitable for software developers with moderate programming experience. Deep technical knowledge is not required, so it is suitable for people with previous but not current programming experience.
","Evolutionary design and refactoring"
