Kirk Knoernschild

Software Developer & Mentor

Kirk is software developer with a passion for building great software. He takes a keen interest in design, architecture, application development platforms, agile development, and the IT industry in general, especially as it relates to software development. His recent book, Java Application Architecture was published in 2012, and presents 18 patterns that help you design modular software.



Presentations

OSGi Demystified

n 2007, OSGi was heralded as a contender for most important technology of the decade. Today, most developers have heard of OSGi, but few are using it to develop their enterprise software applications. OSGi might be the most heralded technology that nobody is using. Is OSGi failing? Who is using it? And what exactly are its benefits? Is it really too complex for the average enterprise developer?

In this session, we'll explain the benefits of OSGi, and show that it's not just for the middleware vendor. We'll learn how you can use OSGi without making significant changes to how you write your software applications. We'll explore the OSGi ecosystem, including platforms that support OSGi. Through code examination, we'll see how the Spring framework allows us to leverage OSGi in a non-invasive way. We'll discover how OSGi encourages Polyglot programming on the Java platform. And we'll take a brief glimpse into the future of modularity on the Java platform. You'll walk away with a much better understanding of OSGi, its strengths and benefits, how to use it effectively, as well as the myths surrounding its use.

Scaling Agility

Agile methods are proven on small teams. But really...almost any process works with a team of one. As team size increases, however, challenges mount. How do we organize the team? How do I manage Sprints across the teams? Is it possible to conduct effective code reviews? What are the essential practices that maintain team unity?

In this session, we'll focus on proven practices that help large software development teams in excess of 100 developers maintain their agility. We'll explore the importance of automation, dealing with geographically dispersed teams, and the need for transparency. You'll walk away with actionable advice and a better understanding of what it takes to create a development process that scales to large teams and is sustainable long-term.

Modular Architecture - TODAY!

Modularity is coming to the Java platform! But contrary to popular belief, you don't need a framework or a new runtime to start building modular software applications. You can start today. Learn how!

In this session, we'll examine what it means to develop modular software on the Java platform. We'll examine the goals and benefits of modular software, and explore the patterns of modular architecture that help us develop modular software systems. With just a few easy steps, we'll see how to transform our software from a huge monolith to an extensible system of collaborating software modules. By examining an existing software system, we'll see first hand how we can increase software modularity with minimal disruption. You'll walk away not just with a much deeper understanding of the benefits of modular software, but also a migration roadmap for refactoring existing applications to increase their modularity. In other words, you'll see how to get ready today for the application platform of tomorrow.

Turtles, Architecture, & Agility

A little old lady once challenged a well-known scientist’s explanation on the structure of the universe, countering that the world is really a flat plate supported on the back of a giant tortoise. The scientist rebutted the little old lady’s challenge with one of his own by asking what the tortoise was standing on. The little old lady’s sly reply was that it’s, “turtles all the way down.” So too is software architecture “turtles all the way down”.

In this session, we cover a broad range of topics that include challenging traditional practices of software architecture, examining what it takes to bring down the ivory tower, probing the paradoxical aspects of architecture’s goal, and investigating the inextricable link between temporal decisions and structural flexibility. From the highest level applications and services to the code that exists in the bowels of the system, and everything in between, we explore how an effective software architecture must be turtles all the way down. In the end, we will all have gained deep insight to the value of agile architecture.

OSGi Demystified

OSGi was once heralded as a contender for most important technology of the decade. Today, most developers have heard of OSGi, but few are using it to develop their enterprise software applications.Is OSGi failing? Who is using it? And what exactly are its benefits?

In this session, we'll explain the benefits of OSGi, and show that it's not just for the middleware vendor. We'll learn how you can use OSGi without making significant changes to how you write your software applications. We'll explore the OSGi ecosystem, including platforms that support OSGi. Through code examination, we'll see how the Spring framework allows us to leverage OSGi in a non-invasive way. We'll discover how OSGi encourages Polyglot programming on the Java platform. And we'll take a brief glimpse into the future of modularity on the Java platform. You'll walk away with a much better understanding of OSGi, its strengths and benefits, how to use it effectively, as well as the myths surrounding its use.

Modular Java Architecture - TODAY!

Modularity is coming to the Java platform! Java 8 will introduce the Jigsaw module system. OSGi is here today. Don’t wait to start designing modular software. Contrary to popular belief, you don't need a framework or a new runtime to start building modular software applications. You can start today. Learn how!

In this session, we'll examine what it means to develop modular software on the Java platform. We'll examine the goals and benefits of modular software, and explore the patterns of modular architecture that help us develop modular software systems. With just a few easy steps, we'll see how to transform our software from a huge monolith to an extensible system of collaborating software modules. By examining an existing software system, we'll see first hand how we can increase software modularity with minimal disruption. You'll walk away not just with a much deeper understanding of the benefits of modular software, but also a migration roadmap for refactoring existing applications to increase their modularity. In other words, you'll see how to get ready today for the application platform of tomorrow.

Patterns of Modular Architecture - Part 1

The modularity patterns provide us with proven design techniques to develop a modular software architecture that is extensible, reusable, maintainable, and adaptable. In this session, we’ll explore 9 of the 18 modularity patterns.

This session introduces and examines the following patterns:

  • Manage Relationships
  • Module Reuse
  • Cohesive Modules
  • Acyclic Relationships
  • Levelize Modules
  • Physical Layers
  • Container Independence
  • Independent Deployment
  • Levelize Build

Patterns of Modular Architecture - Part 2

The modularity patterns provide us with proven design techniques to develop a modular software architecture that is extensible, reusable, maintainable, and adaptable. In this session, we’ll explore the remaining 9 modularity patterns.

This session introduces and examines the following patterns:

  • Published Interface
  • External Configuration
  • Default Implementation
  • Module Facade
  • Abstract Modules
  • Implementation Factory
  • Separate Abstractions
  • Colocate Exceptions
  • Test Module

Chesterton's Gate: Always Ask Why

"That's the way we've always done things", is a phrase commonly uttered over the course of a software development project. But often times, organizations have instituted governance and policy based on yesterday's practices. We continue with these dated policies without ever examining their origin and whether they are necessary or provide any true value today. These policies serve as gates, which often times impede progress. The story of Chesterton's Gate encourages us to ask "Why" something is necessary before we decide if it's beneficial to remove it. In this session, we examine several "gates" across several industries, including software development, and ask "Why" to determine if it's still needed.

In this session, we examine examples (many of them quite humorous) of Chesterton's Gate, including several from our world of software development.

Refactoring to Modularity

Monolithic applications are difficult to understand, maintain, and extend with new features and functionality. Modularity helps achieve these goals. Unfortunately, few applications have been designed with modularity in mind. In this workshop, we take a deep dive into modularity. We'll start by briefly examining the benefits of a modular architecture and exploring several patterns that help us design modular software. Then we'll launch into several exercises where we take an existing monolithic software system and refactor it to a modular architecture.

Along the way, we'll examine useful tools that help us along the journey and will demonstrate the benefits of our new architecture.


Books

by Kirk Knoernschild

Java Application Architecture: Modularity Patterns with Examples Using OSGi (Robert C. Martin Series) Buy from Amazon
List Price: $44.99
Price: $29.01
You Save: $15.98 (36%)
  • “I’m dancing! By god I’m dancing on the walls. I’m dancing on the ceiling. I’m ecstatic. I’m overjoyed. I’m really, really pleased.”

    –From the Foreword by Robert C. Martin (a.k.a. Uncle Bob)

     

    This isn’t the first book on Java application architecture. No doubt it won’t be the last. But rest assured, this title is different. The way we develop Java applications is about to change, and this title explores the new way of Java application architecture.

     

    Over the past several years, module frameworks have been gaining traction on the Java platform, and upcoming versions of Java will include a module system that allows you to leverage the power of modularity to build more resilient and flexible software systems. Modularity isn’t a new concept. But modularity will change the way we develop Java applications, and you’ll only be able to realize the benefits if you understand how to design more modular software systems.

     

    Java Application Architecture will help you

     

    • Design modular software that is extensible, reusable, maintainable, and adaptable
    • Design modular software today, in anticipation of future platform support for modularity
    • Break large software systems into a flexible composite of collaborating modules
    • Understand where to place your architectural focus
    • Migrate large-scale monolithic applications to applications with a modular architecture
    • Articulate the advantages of modular software to your team

     

    Java Application Architecture lays the foundation you’ll need to incorporate modular design thinking into your development initiatives. Before it walks you through eighteen patterns that will help you architect modular software, it lays a solid foundation that shows you why modularity is a critical weapon in your arsenal of design tools. Throughout, you’ll find examples that illustrate the concepts. By designing modular applications today, you are positioning yourself for the platform and architecture of tomorrow. That’s why Uncle Bob is dancing.