Four Days Design Principles and Patterns Workshop

The Design Patterns Workshop offers a comprehensive introduction to design patterns, with a focus on patterns that have proven over the last decade to be most effective at addressing real-world software design problems.

The workshop helps people understand good object-oriented design through the medium of highly useful design patterns. Students are introduced to essential patterns via an amalgam of interactive discussions and hands-on exercises and quizzes.

The patterns taught in this course are drawn primarily, but not exclusively, from the classic catalog by Gamma, et al.: Design Patterns: The Elements of Reusable Object-Oriented Software Design. Students will gain a solid understanding of essential patterns as well as how to incorporate them into new or legacy code using modern refactoring and testing tools.

Basic Design Patterns
Advanced Design Patterns

Learning Outcome

At the end of this training the team will be able to:

  • Understand essential design patterns, and how to use them
  • Obtain a strong, fundamental understanding of Smalltalk style Object Orientated Development
  • Understand basic OO design principles and see how they apply to real world problems
  • Recognise code smells and understand how they violate the design principles
  • Obtain an excellent understanding of 10+ design principles and 30+ design patterns
  • Experience hands-on, refactoring to and away from patterns during the lab sessions
  • Gain a working vocabulary of design patterns
  • Understand how to evolve patterns into a design, rather than designing with them up-front

Course Outline

Day 1

Implementation Patterns

  • Values of a Good Design - Communication, Simplicity, Flexibility

OO Design Principles:

  • Open Close Principle (OCP)
  • Single Responsibility Principle (SRP)
  • Tell, Don't Ask
  • Don't Repeat Yourself (DRY)
  • Law of Demeter
  • Dependency Inversion Principle (DIP)
  • Liskov Substitution Principle (LSP)
  • Interface Segregation Principle (ISP)
  • Triangulate

Code Smells and Refactoring

Day 2 - Reliability, Construction and Structural Pattern

Composed Method Pattern

Fluent Interface Pattern

Template Method Pattern

Programming Exercise

Creation Method Pattern

Programming Exercise

Factory Method Pattern

Abstract Factory Pattern

Strategy Pattern

Programming Exercise

Prototype Pattern

Singleton Pattern

Composite Pattern

Programming Exercise

Chain of Responsibility Pattern

Programming Exercise

Day 3 - Behavioural and Structural Pattern

Null Object Pattern

Programming Exercise

Guard Clause Pattern

Builder Pattern

Interpreter Pattern

Programming Exercise

Flyweight Pattern

Bridge Pattern

Adapter Pattern

Decorator Pattern

Proxy Pattern

Programming Exercise


Programming Exercise

Facade Pattern

State Pattern

Programming Exercise

Day 4 - Behavioural and Structural Pattern

Command Pattern

Memento Pattern

Observer Pattern

Programming Exercise

Mediator Pattern

Parameter Object Pattern

Collecting Pattern

Programming Exercise

Dependency Injection Pattern

Iterator Pattern

Programming Exercise

Dispatch Table Pattern

Programming Exercise

Self-Shunting Pattern

Programming Exercise

Pluggable Selector Pattern

Strongly Recommended

1 or 2 Days of Mentoring via Pair Programming with Developers on your code base

  • To get your team kick-started with the learning from the workshop, we recommend, that our trainer spends a day or two, working with your team on your code base.
  • Each day will be reserved for 4 pair programming sessions. During these sessions, the workshop participants will take specific examples from their projects, where they are finding it difficult to apply any of the practices learned in the workshop. The trainer will then pair with an individual to show how to resolve those challenges.
  • At the end of the day, the 4 volunteers will summarize their learning by showing before and after code from their respective pairing session to the rest of the group.

Pre-Post Programming Assessment

The goal of these programming assessments is to identify real and quantifiable measures for the learning achieved through our workshop.


  • Get a quick understanding of your knowledge and skill level with respect to Designing & Programming
  • Establish a baseline against which the effectiveness of the workshop may be measured
  • Customize our workshop based on specific areas identified in this assessment


  • Before the workshop, we'll send a problem description, your developers will spend max 4 hours and solve the problem and send us the code. We'll evaluate the code and send you detailed feedback about the code, including areas for improvement. We can send different types of problems (fresh development, cleaning up existing code and so on.)


  • 2 week after the workshop, we send another problem and evaluate the solution code. A comparison between the Pre and Post Assessment should be able to clearly quantify per-participant level improvement.
  • Click on the image to download the sample report...
  • Programming Assessment Sample Report

Training Details

Method of Instruction

Interactive Dialogues, Programming Exercises, Demos and Instructional Games

Transfer %

Knowledge: 60%, Skill-Building: 40%

Target Audience

  • Primary: Object-Oriented Programmers, Architects, and Designers
  • Secondary: Technical Managers, Technical Writers, User Experience Designers

Course Level


Course Prerequisites

  • Required: solid hands-on understanding of OO concepts and an OO language
  • Highly Recommended: overall understanding of the life-cycle of software projects

General Requirements

To ensure a successful workshop, we require the following facilities:

  • HDMI projector (1024x768 minimum) & Projector screen
  • 1 White board & Dry erase markers
  • Cluster seating with 5-6 people on each table
  • 1 Flip chart with the stand and marker pens for each table
  • Notepad and Pen for each participant
  • Ample room for students in terms of room size and set up
  • For Dev trainings: at least one powerful workstation between two programmers

During the workshop, we require each participant to have a copy of the following 2 books:

Design Patterns - Elements of Reusable Object-Oriented Software Book   Refactoring to Patterns Book

Development Tools






"Inversion of Software Development", that's what Naresh gave me through his 5 days workshop at Amazon. He is one of the best mentors I encountered in my career.

The way he tries to explain TDD and Design principles with practical approaches, always challenging the concepts which we used to think were industry standards. Learning through his workshop, now coding is like blogging, drop dead simple, and you don't look back.

I hope we had more dojos like Naresh mentoring people in Indian Software Industries to let them know what real clean software development is all about. To sum up he instilled the idea - "Perfection isn't the goal, it's the baseline." about software development in me.

- Rajat Talwar, Software Engineer II, Amazon

It's been 3 weeks since I had the opportunity to attend a 3-Day TDD workshop followed by a 3-Day Design Patterns workshop by Naresh Jain. Post the workshops; I was able to fully test drive a feature that is already in production.

I had many take-away from his workshops, but the most important ones were - 1. It gave me the confidence that with TDD you can come up with good designs, 2. Learnt refactoring techniques and IDE tricks, 3. Got a deeper understanding of design values, principles and patterns. 4. Identifying code smells (the codes that I was proud of, now all I see there is code smells :P). But thanks to Naresh I know how to make it right.

- Chandan Kumar, Software Development Engineer, Amazon

I recently met Naresh Jain during Test Driven Development(TDD) training at my current organisation. He is very knowledgeable and also very effective as a trainer. His enthusiasm and confidence is a game-changer when it comes to motivating the workshop participants.

I've really benefited from his training and by applying TDD in my day-to-day work . It was a great experience and I wish, I could get a chance to work with him on a real project.

- Lokesh Gaur, Technical Lead,Samsung Research

Rarely have I met a trainer who was truly hands-on. The depth of knowledge and on-field experience of Naresh Jain is truly inspiring. His proficiency in agile techniques and TDD is bleeding edge.

We have benefited immensely in barely three days of TDD training with him. We wish he was on our team here in EMC2.

- Vimal Kumar, Principal Software Engineer, EMC2

Recently I attended Naresh's workshop on Test Driven Development (TDD) at Amazon, Hyderabad. It was a great learning experience and an eye-opener in few cases.

He is very involved with the Agile community and has worked with a lot of industry experts. That's the best part of getting trained by him. He is up-to-date with the latest trends and his skills are very relevant.

Naresh's in-depth knowledge and great attitude, fueled by his passion for technology makes him a great techie to work with. I had a great experience and would highly recommend him for training/coaching or even just to have good discussions.

- Akshay Johri, Software Development Engineer, Amazon

Our Complete Training Guide


Contact Us

Reach out to start a conversation

Send Us A Message

Something went wrong. Please try again.
Your message was sent, thank you!

Contact Info

Where to Find Us

No 20, 12th Cross
Bengaluru, KA
560002 IN