EDUCATION

DPL Software Design and Development Clinic

This is not just another code camp.

Our week-long Software Design and Development Clinic is designed to start transforming experienced developers into software engineers capable of managing complex software systems.

A solid software engineering foundation is essential for creating quality software. Decades of experience has taught us many things and shaped how we approach software development. We believe this is so powerful that it must be shared with our fellow software developers and engineers if the industry is going to advance the practice of software design and development.

Here is what some of the students are already saying about the class:

doug durham

“I see this as what I hope is the future of software design.”

“A number of my colleagues would benefit from learning what our software design does for us, and why. It has certainly benefited me.”

“Good format for exchanging code / design ideas. Seeing concepts put into action creates motivation for doing it.”

LEARNING + DOING

Our approach to the Software Design and Development Clinic is not based on lectures alone. At least 2/3 of the class is spent with real‑world code and in-depth exercises to illustrate how best practices and proven methodologies can make developers more productive, feel more effective, and produce well-architected software.

Using projects created specifically for this course, students will practice concepts such as:

R

Managing complexity

R

Rationally decomposing a system into services and classes

R

Improving system maintainability

R

Designing for change

R

Taking a layered approach to quality

R

Leveraging code reviews

COURSE OUTLINE

Foundations of Software Development

  • Motivation & The Software Crisis
    Make students aware of the software crisis, and how we compare to other industries.
  • Foundations of Software System Design
    Cover the classic concepts of software design.
  • Applying Design Principles to Avoid Design Smells
    Show why good design is necessary for flexible, scaleable, and maintainable systems.
  • Dependency Injection (DI)
    Introduce dependency injection, why it is good, how to implement it, and how to use it.
  • System Design Activity

System Design

  • System Decomposition
    Provide students with tools to decompose an ecommerce solution using volatility-based decomposition.
  • Diagramming
    Equip students with a basic set of tools for diagramming a system.
  • Task Decomposition
    Illustrate the value in tasking things out. Students should understand the importance of thinking things through before jumping into code.

System Construction

  • Test-Driven Design (TDD)
    Provide a good understanding of how to write automated tests, and motivate the students to do so.
  • Interface and Data Contract Design
    Provide a framework for decomposing a system into contracts and data contracts.
  • Code Reviews
    Empower students to conduct better code reviews, and write code that is easier to review.
  • Code Construction Activity 1 & 2

The hands-on portions include continued development of the Ecommerce software project, which involves adding features to the solution with a focus on interface and contract design, implementing complex workflows, and developing automated unit and integration tests.

Legacy System Construction

  • Legacy System
    Introduce what it takes to improve the quality of a legacy system while adding business value.
  • Brownfield
    Provide examples of how refactors have been done successfully.
  • Legacy System Activity 1, 2, & 3

Advanced Topics

  • Async Patterns
    Introduce students to async patterns, especially the use of queues within mature architectures.
  • New Solution Set Up
    Show students how to set up a new solution in Visual Studio to maximize productivity.
  • Advanced DI
    Give students experience with dependency injection frameworks such as Unity.
  • Advanced TDD
    Students will learn to use testing frameworks to simplify automated testing.

WHO SHOULD ATTEND THIS COURSE?

The Software Design and Development Clinic is designed for developers who are:

R

Effective team communicators who excel at sharing what they learn, interact well with other team members, and can both accept and provide constructive feedback.

R

Productive developers who are effective at completing their work in a timely manner.

R

Pattern followers who work well at adapting existing code but may not fully possess the “big picture” understanding needed to identify when and how to apply design principles.

The Software Design and Development Clinic is led by Don’t Panic Labs CTO Doug Durham and Software Architect Chad Michel. Together they have over 50 years of software development and architecture experience.

Chad Michel and Doug Durham
Chad Michel

Since classes are limited to 12 students, there are many opportunities for discussions with the instructors.

Our next class will be held October 23-27.

Email softwareclinic@dontpaniclabs.com to learn more about:

  • Pricing
  • Enrollment
  • Future class dates
  • Customizing this class to better fit your organization’s needs
  • The possibility of your company hosting this class