For the past twelve years I've developed the architecture and code of web-based applications — server-side apps, browser apps, and the communication between them. My clients have ranged from startups seeking prototypes to Fortune 500 companies developing enterprise solutions. Many of them are repeat customers. My development is tempered with a solid understanding of information architecture, user interface, and data modeling. Whether I'm working in a team environment or I'm independently building a single component, I firmly believe that my development process must be highly visible to all stakeholders.
| Java · Javascript · PHP · Python | |
| Spring Framework · Servlet | |
| Vanilla Javascript · jQuery · Dojo Toolkit | |
| MySQL · Oracle · JDBC · iBatis · Hibernate | |
| Debian Linux · bash · Subversion · make | |
| Bugzilla · Jira |
Software development columnists I usually agree with: Jeff Atwood · Paul Graham · Steve Yegge · Alan Carter
October 2008 to January 2009
Create a simple e-commerce site dedicated to selling a single handheld device. The device requires extensive backend integration with three different, unrelated third-party services.
Design specs for the interaction between services and for the website. Manage myself and two other developers to implement.
April 2007 to May 2007
Profile memory leaks and other performance problems in Javascript map component of Wavemarket's web application.
Remove memory leaks and optimize code.
October 2006 to January 2007
Redesign web application architecture such that the web application could be rapidly customized and skinned to meet the business needs of each Wavemarket partner.
October 2005 to October 2006
Bring to release a web application based on Wavemarket's core GPS server technology.
Focus was on browser communications with HTTP server, and modular design of JSP and servlet pipeline.
This also included writing some in-browser Ajax functionality.
The server-client codebase had grown unwieldy and monolithic as this company scrambled to meet market demand. Redesign and refactor web application code to keep layers of functionality separate, meanwhile developing new features to meet business deadlines.
December 2007 to June 2008
Create an online store application which sells virtual items within the video game's world using the game's currency. The store app accommodates multiple video games simultaneously and provides extensive administrative tools. Design architecture, manage myself and another developer to implement.
April 2007 to October 2007
Design, spec, produce, and bring to release a framework that translates the technology and user experience of video games to a set of web applications.
July and August 2007
Produce a functional, aesthetic prototype for a web application — proposed to a financial institution — that allowed users to manage their mutual funds and financial outlook.
February 2007
Troubleshoot, repair, and polish the Javascript functionality and CSS styling of an automobile search application.
Define the project architecture — a combination of software architecture, task assignment, team interfaces, and project management — for emerging social networking site. Review, evaluate, and implement business requirements to meet market-driven deadlines. Produce technical specs, writing production code when necessary. Design and implement web application configuration and deployment scheme.
October 2006
Profile and optimize code performance.
April to October 2005
Refactor the software architecture for Yahoo's Health and Astrology websites.
Collect requirements and define architecture for a tiered template system.
Reorganize software packages and configurations for better integrity and simpler deployment.
Automate regular jobs that were previously performed manually.
July 2003 to January 2005
Bring a game-oriented artificial intelligence product from concept to deployment. Work with CEO to develop a new AI model realizable in software. Develop prototype to have a robust architecture for simulation, and to be easily scriptable for rapid development. Design production architecture, which required modular components to work together in an efficient, asynchronous environment. Manage a development staff of myself plus two others.
September 2002 to November 2002
Develop a Java applet port of a PC game. Innovate and resolve problems independently, and spec deliverables to facilitate client feedback.
Produce a feature-rich website for professional photographers and their clients to manipulate, organize, showcase, and order photographs. I drew up the specs, schedule, and data model for the project, and wrote the codebase myself while outsourcing page design and system administration duties.
Design and develop Sprint's next-generation store locator web application. The job was suited to a small technical staff, and that was me. I designed the java architecture for the app, implemented it against third-party mapping software by Kivera, and incorporated visual site design into the pages. I was also responsible for importing raw data from various formats, and configuring the server on which all the software ran.
Migrate an internal legacy data-management application from mainframe DB2 to J2EE (Weblogic/Oracle). Redesign interface as a web application. Contract involved modularizing key elements of the app logic, codifying certain development patterns for easy reuse, writing the application, implementing security, and upgrading the old data model, which underwent many changes and optimizations as we adapted it to the new technology.
Innovate, design, implement twice in Java and Javascript, present via web, and document a browsing technology for information architects. All the work at facetmap.com is my own. In addition to writing the software to produce the Facetmap objects, it was critical that I design sample interfaces to demonstrate their use. Facetmap has distinct recognition among information architects, is used by many of them for their own document management, and has been licensed to other software companies.
Designed and developed spotlife.com server technology, and led development of the website technology. Owned the specs governing client-server interaction, designed structures using ATG Dynamo to ensure that programmers and html developers could efficiently work together, and wrote a major part of the codebase. Designed and wrote scripts to automate build and release processes. Often resolved conflicts between engineering and usability teams, and was the usability consultant in technical design discussions. Trained company's nontechnical employees in the use of CVS and Makefiles.
Explained, to anyone who would listen, why the Y2K threat was not a threat. Despite my explanations regarding the mechanics of computer software, I was not very effective in this role. This is how I learned that being right is not itself a rewarding goal.
September 1999 to December 1999
Design and implement first release of SpotLife (see above) before it had a technical staff of its own. This included work on data model, app architecture and code production with an eye towards extensibility.
March 1999 to August 1999
Design and implement first release of wineshopper.com website and fulfillment service.
December 1998 to January 1999
Write puzzles and assist in game and story design for Spychaser, a 3com promotional online game.
Co-founded a multiplayer web game — a fictitious sports stock exchange. Direct a 3-person software development group, designing gameplay and interface, write code for use and maintenance of the site, work with internet service provider, develop business with other companies, and respond to our users. The project never saw any real revenue, but was my best experience to date in developing my own implementations of basic tools (database, template language), syndicating a site as a branded service on other sites, and governing a community of devoted fans.
Consultancy was based on adapting an engineering software package to run on networked parallel processors. Duties included source code authoring and debugging, modification of existing code, automation of code builds and unit testing, network maintenance, and filling the constant need for more efficient computer operations in the office and in the software itself.