My appetite for continuous learning is focused significanlty on: applying lean and agile principles, processes, and practices toward knowledge-based iterative product development and incremental delivery; utilizing the kanban method (pull scheduling) to create predictable delivery and with flow-based metrics to provide meaningful forecasting; and using eXtreme programming (XP) practices along with using object-oriented designs, pattern-oriented software architectures, and domain–driven design in developing IT/software product and services.
Since 2002, I’ve been learning and assisting teams with applying lean and agile principals, processes, and practices. In 2007 I began learning and coaching others about adding kanban (flow/pull scheduling) methods to software development as well, to further optimize and evolve their workflow processes and practices. My software architect/developer experience allows me to contribute as an embedded team member on the development floor from planning, story development, design, and thru implementing (TDD, unit testing, refactoring, pairing, test automating, continuously integrating, etc.).
My road to lean-agile processes and practices started when I was hired to help develop a service-oriented structural engineering design engine. While the development team had a strong knowledge of structural engineering and developer tools, they needed help managing the complexity of the business domain and problem space. I started teaching them what I knew well then, the concept of separating concerns at a macro level (layered architecture, physical tiers) and how to do stateless development.
This helped, yet our code was still hard to test, understand, and change. In looking for a solution I “discovered” design patterns and worked to provide informal in-house training, then formal training, which included how and why these design patterns worked (foundational OO design principles). Fortunately, this training also touched on XP practices such as automated unit testing and test-driven development (TDD), which we adopted. Shortly after we added continuous refactoring, automated integration testing, continuous integration, co-location, pairing, spikes, iterative development, incremental delivery, and embedded product owners/customers. These improved our software development process, but there were still significant challenges and opportunities to improve.
By now, several of us were exploring lean and agile concepts, but I also began looking into applying principles from the theory of constraints, queuing theory, and flow. This led me to begin emphasizing kanban concepts in our software development which then led to modifying our workflow process: visualizing workflow, JIT planning, limiting work in progress, managing overall workflow process lead times, measuring completion rates (throughput and team capabilities), and establishing decoupled cadences for implementation, delivery, planning, and process improvement efforts. This ultimately resulted in the organization’s “first-ever successful delivery of a strategic sharable service-oriented structural engineering design engine”, while also significantly improving the group’s software delivery capabilities and achieving several “first-ever” documented capability improvements.
This professional summary reflects my passion for learning and helping others to learn, seeking how and why things work, and my desire for continuous improvement. Since 2002, I’ve learned and successfully contributed in numerous technical industry domains, and seek challenging opportunities where my technical background and software development experience can contribute and provide further growth.