About Me

I have over 15 years experience developing custom applications, websites, and databases as a front and back end developer. I'm an advocate for agile and XP based approaches to software development. I have a strong understanding of TDD, BDD, OOP, SOLID, MVC, and design patterns. I take an interdisciplinary, user-centered approach to technology that integrates research from cognitive psychology, usability, UX, and design.

My Story

I've been playing with technology for as long as I can remember. My first big project, around the age of ten, was coding a primitive version of Space Invaders in Basic on a Texas Instruments TI-99/4A.

Later, I learned PHP, Flash, HTML, JavaScript, and Python. Around 2000, I began freelancing on the side. In 2007, I decided to focus on being a full time developer. I continue to be passionate about writing great code, and am currently working on several long-term, personal software projects.

Interested in hiring me? Use the Contact page to get in touch!

To view my software development portfolio, visit the Portfolio page.

The Zen of Software Engineering

  • Refactor, refactor, refactor.

    Writing great code is an iterative process. Early versions of any program always have room for improvement. Developers need to stay humble and not get too attached to the code they write. Great developers know there is always more to learn; they love to tinker, hack, experiment, and play.

  • Always write tests.

    Robust, quality code is testable, and is continuously tested. Bad code cannot be tested easily. Tests not only ensure that code works, but greatly increase the robustness and quality of the codebase, allow projects to be refactored in an agile manner, and often decrease overall development time.

  • There is no silver bullet.

    No framework, tool, or technology is perfect. Every decision in software development involves trade-offs and potential risks. Beware of developers who have only a single tool in their toolbox; bRather than searching for optimum solutions, they tend to dogmatically use their preferred tool or framework, even when it is wildly inappropriate.

  • Software is inherently social.

    Despite the reputation of developers as antisocial, any successful software project is a group effort. We as developers need empathy for other developers, for project stakeholders, and for the users who must interact with the tools we create. Ultimately, we don't write code for machines, we write code for human beings. This should impact the way we approach our craft.