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 create software architectural and design 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 at 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 not designed in a vacuum
Business leadership and input from development teams are vital to creating sustainable architectures.
Architectures must evolve to meet changing requirements
My goal is to reduce the ripple-effect of software changes by designing solutions with distinct boundaries. Taking 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 whether the chosen architecture is realistic and sustainable. Design solutions can then be built incrementally and scaled as necessary.
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 understandable by developers. Complex architectures can flexibly solve complex business problems, but sometimes at a cost of extensibility and maintainability. Maintainable component architectures can be designed for small, monolithic applications as well as larger distributed, microservices architectures.
My past 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 has 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, working for small and large companies writing mostly server-side software in Java, Python, and Perl, deployed to several different web- and application-server technologies. By 2004, my roles on projects began 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.