O'Reilly logo
live online training icon Live Online training

Hands-on Software Design

From principles to code

Topic: Design
Venkat Subramaniam

Building complex, heavyweight software is easy, but it takes practice and effort to move in the opposite direction to create pragmatic, lightweight design that’s extensible and maintainable. While experience is quite important, repeatedly doing the same things over and over may not present better results. You have to step back and think about the whys and then the hows behind the task you’re undertaking.

Join expert Venkat Subramaniam to gain better clarity on how to create designs for your applications, as he takes you through a very practical approach to creating lightweight design. You’ll start by unpacking the characteristics that are part of good design, then explore core design principles through a series of concrete code examples that best illustrate them.

APAC friendly time

What you'll learn-and how you can apply it

By the end of this live online course, you’ll understand:

  • The characteristics of good software design
  • How to create design that is relevant instead of being frivolous

And you’ll be able to:

  • Identify and apply core design principles
  • Create a simple design
  • Create design that is lightweight, extensible, and understandable

This training course is for you because...

  • You’re an architect, lead developer, or programmer.
  • You work with teams that create complex software applications.
  • You want to become a better designer and developer.


  • A computer with a Git client and IntelliJ IDEA Community Edition installed
  • A working knowledge of programming and the object-oriented paradigm in any language (Examples will be presented in Java but can be easily understood by programmers using other languages.)

Recommended preparation:

Recommended follow-up:

About your instructor

  • Dr. Venkat Subramaniam is an award-winning author, founder of Agile Developer, Inc., creator of agilelearner.com, co-founder of the devdotnext software conference, and an instructional professor at the University of Houston. He has trained and mentored thousands of software developers in the US, Canada, Europe, and Asia, and is a regularly-invited speaker at several international conferences. Venkat helps his clients effectively apply and succeed with sustainable agile practices on their software projects. Venkat is a (co)author of multiple technical books, including the 2007 Jolt Productivity award winning book Practices of an Agile Developer. You can find a list of his books at agiledeveloper.com. You can reach him by email at venkats@agiledeveloper.com or on twitter at @venkat_s.


The timeframes are only estimates and may vary according to how the class is progressing

Good design and design principles (55 minutes)

  • Presentation: Characteristics of good design; learning from design that evolves in code
  • Group discussion: How to create good design; rules for simple design
  • Hands-on exercise: Create a design that honors the single responsibility principle
  • Q&A
  • Break (5 minutes)

Using fundamental design principles (55 minutes)

  • Presentation: Using DRY, YAGNI, and the open-closed principle
  • Group discussion: Applying the principles in a practical setting
  • Hands-on exercise: Create extensible design
  • Q&A
  • Break (5 minutes)

Object-oriented design (55 minutes)

  • Presentation: Using the Liskov substitution principle
  • Group discussion: How to choose between inheritance and delegation?
  • Hands-on exercise: Apply object-oriented design principles
  • Q&A
  • Break (5 minutes)

Designing for extensibility (55 minutes)

  • Presentation: Favoring low and loose coupling; using dependency inversion principles
  • Group discussion: Multiple uses of dependency inversion and injection
  • Hands-on exercise: Go beyond simple and direct use of dependency inversion

Wrap-up and Q&A (5 minutes)