I work as a software architect in Washington, D.C. for a consulting company that serves federal government clients. I have 20 years of software engineering experience, working as an application architect, enterprise architect, Java enterprise developer, and development team leader.
I design software solutions to help customers solve business problems. I have worked as a professional solutions architect, systems and integration architect, and application architect since 2004. I communicate clearly in writing and orally, and have made public presentations to small groups and large conferences.
Architecture is about making choices
These choices balance competing needs. Some design choices are more expensive than others to change when requirements change or when chosen solutions deliver insufficient value compared to their costs. These architecturally significant choices call for the most up-front analysis, proofs of concept, and clear understanding by the business and technology teams of the trade-offs being made.
Architectures are designed by more than just architects
Input and perspectives from business leadership and development teams are vital to creating sustainable architectures.
Architectures must evolve to meet changing requirements
Since change is a reality, the best way to limit the ripple-effect across a software system when parts need to change is to insulate components from each other through limited interfaces. Using an agile software development approach also helps ensure that architecturally significant components can be altered early in a project’s lifecycle when costs and levels of effort are lowest. With clear architectural boundaries, an agile development approach makes it safer to delay building or selecting every component of the system’s design at project start. As the project progresses, early software releases provide feedback on whether the chosen architecture is realistic and sustainable.
Architectures must be comprehensible
Software architectures need to meet not only non-functional requirements – such as security, extensibility, availability, scalability, reliability – architectures also need to be usable by developers. Complex architectures can flexibly solve complex business problems, but only if the development teams can use and maintain them.
My experience has included designing solutions for many projects needing to integrate disparate systems. These projects have provided opportunities to work across business units and external partners to understand business, financial, and regulatory requirements to create clear APIs and architectural solutions that meet stakeholders’ needs. This experience exposed me to several enterprise integration patterns, including web services using REST and SOAP, service components running in containers and cloud environments, asynchronous messaging systems, and shared data repositories.
I began my technology career as a web developer, writing mostly server-side software in Java, Python, and Perl, deployed to simple Apache web servers and complex WebLogic application servers. By 2004, my roles on projects started including leading development teams and working with business stakeholders to design a project’s overall solution.
My clients have included small and large private-sector companies in varied industries such as financial services, telecommunications, medical, and publishing. My recent work has been with U.S. civilian federal government agencies. I have met Public Trust background-check requirements for positions with the U.S. Department of Homeland Security and Federal Aviation Administration.
I live in Arlington with a beautiful view of the National Mall.