Skip to content

Training

Whether you’re exploring emerging trends in software development, getting your organization engaged with Agile practices, or looking to make continuous improvements to your development processes, I offer training which will help transition your organization to adopt more effective development strategies.

SOLID Principles of Object-Oriented Design

Quality can never be added to software; you must plan, design, and build for it.  The SOLID principles provide a set of standards by which quality software can be developed, enhancing characteristics such as functionality, extensibility, reliability, portability, and testability among others.  This course teaches the five SOLID principles of class design and associated practices that will help realize many optimal software qualities.

Principles & Practices of Software Component Design

Modern, mature software solutions should fully support continuous delivery through an automated delivery pipeline using containerization and cloud infrastructure.  To realize this goal, software needs be designed and built around loosely coupled, independent components.  This course teaches how to deliver high quality and highly adaptive software through component design principles, supported by SOLID principles of object-oriented design.

Principles & Practices of Test-Driven Development

This course teaches the principles and practices of Test-Driven Development (TDD) and demonstrates how proper software design evolves through application of the eXtreme Programming principle of Test First.  Unit testing principles are also covered, along with a thorough discussion on the benefits of TDD.  An application is developed (from start to finish) during this course to explain step-by-step and demonstrate first-hand how a high quality, testable design evolves by applying the three laws of Test-Driven Development.

Enhancing Software Testability

Software testability is impacted by practices throughout the development lifecycle.  This course teaches engineering principles which greatly increase software testability, thereby raising code quality, test coverage, test effectiveness, and productivity, while reducing testing time, defects, and time to market. Methods for enhancing testability of requirements, design, and software components are taught, along with practices to best utilize test doubles.

Understanding Test Doubles

Test doubles are used as substitutes for production resources during testing.  And effective use of test doubles is essential to maximizing software testability.  This course explains what test doubles are, five different types of test doubles, how they are used, and the benefits of each.  A comparison is also made between mocking frameworks and hand-rolled mocks.

Managing Technical Debt

Software is a huge asset for most companies, organizations, and governments.  The quality of that software contributes heavily to its value.  Effectively managing technical debt enables you to optimize the value of software and maximize time to market.  If you have to battle technical debt in an attempt to beat your competition to market with a new feature, you may lose any advantage by having to deal with complex or unreliable code that is not easily extendable.  To maintain business, market, or technological advantages, you must effectively manage technical debt incurred within all artifacts that define, implement, and validate your software.  This course examines what technical debt is, how it can benefit your organization and give you an advantage over your competition, how and when it should be (intentionally) incurred, and how and when it should be paid off.

The Technical Discipline of Being Agile™

Agile was created by 17 technical leaders in the software industry who crafted a lightweight development process that was intended to heal the divide between business and developers.  They also established technical norms that would mitigate common issues such as excessive cruft, tightly coupled architectures, rigid code, immature test suites, technical debt, along with other anti-patterns that slowed delivery of high quality software.  This course examines the characteristics of good and bad software and explores technical practices that resolve the issues and enable teams to deliver great software fast.

The Root of All Agile

This course focuses on the culture of Agile at Nationwide Insurance through presentation of the Agile experience, practice awareness, tea leaves, Gemba walks, and hands-on Agile exercises.  This is a required course for anyone starting new on a Nationwide Agile team or one that is looking to build a culture of excellence.

Understanding the Value of Agile Principles

Agile principles are intended to help deliver greater product quality while increasing productivity.  To achieve these benefits, project stakeholders must understand the value that come from putting each principle into practice.  This course will reveal the value to be expected by applying each of the twelve Agile principles.

Creating a Work Breakdown Structure for Agile Development

Creating an effective representation of the development work is critical to maximizing productivity and increasing predictability.  This course provides several methods for determining the most effective Work Breakdown Structure (WBS) and demonstrates how to identify, decompose, and represent the work needed to deliver a high-quality product that fulfills customers’ needs.

Writing Powerful User Stories

This workshop provides hands-on lessons on how to write effective user stories, to understand why they are such an important artifact of Scrum, and how to realize their full value.

Estimation Methods for Agile Development

This course examines both time-based and relative estimation methods, along with the benefits and disadvantages of each.