Peter Cowan · Software Developer
Summary
I am currently self-employed, working on small projects that satisfy my curiosity. Until recently I was a lead developer at JustGiving, a global, London based company focused on fundraising tools for nonprofits. After 2 years of frequent international travel, and then getting acquired I decided to move on. Previously much of my experience was working at JustGive, a small nonprofit dedicated to using the Internet to generate new charitable giving.
I have 15 plus years of experience
developing web based applications in Java and Javascript. My main responsibilities have been writing reusable Java libraries to support our web app, web
services, command line processes. Recently I have focused more on writing React/Redux/Node.js front end features.
As team lead I was responsible for establishing our
development processes, interacting with clients to define project requirements and collaborating with the business team on long term goals. I am most comfortable in Java and Javascript, but have jumped into projects using other languages and had little trouble getting up to speed. Ultimately, I want to use the right tool for the right job, whatever it may be.
Objective
I am looking for a position working within the web development stack in or around downtown Portland. While most of my experience is in Java and Javascript, I am technologically agnostic and I prefer wearing multiple hats over specialization. My main concern is working in a creative environment with a great team of peers who respect each other,
get along well and push each other to learn and grow. An agile oriented development environment would be desirable, but the aspects I care about most are
continuous integration, smaller teams, and short release cycles.
Experience
2016 - 2018
London, UK
Senior Developer
- Rebuilt the user settings feature on justGiving.com from scratch using React/Redux/Node.js. We built an isomorphic (universal) Javascript app that would load pages rendered on the server side when appropriate.
- Tangential to this project we were developing a toolkit of shared components for future projects to work from. As we added features we would generalize them and move them to the toolkit. This included everything from CSS styles (using Sass) to React components, and Redux middleware.
- Maintained legacy Java application.
2000 - 2016
San Francisco, CA
Lead Developer
- Rebuilt the core features of the main web application to use React/Redux/Node.js with a JAX-RS backend. The purpose of this project was to to decrease page load times and simplify the codebase. In the process business logic was factored out of the Servlet domain into business domain classes.
- Converted a gift registry feature from using Servlets/JSPs to using Backbone.js with a JAX-RS backend. Eliminated dozens of classes in the process.
- Updated the persistence layer of our web app from a Castor to standards compliant JPA, using Hibernate. This was a long term fork of the codebase, and involved much query optimization and improvements to the model layer.
- Designed and developed stored value and recurring billing systems, migrating existing data from a 3rd party service,
adding support for vendors so we could market the services ourselves. The projects paid for themselves within the year via the
reduction in fees, no longer dealing with 3rd party integration issues, and increased vendor revenue.
- Created a RESTful interface for in house use, using JAX-RS with Jersey, for search searching ~1.8 million
nonprofit records (from Exempt Organizations
Master File Data). We then geocoded the data and used it to create a Google Map mash-up for local search.
- Merged two diverging forks of a code base, each using a different 3rd party payment service, by abstracting out a common
interface. I then added a radically simplified Gateway interface for
general use, and developed and tested both implementations.
- Created a SOAP client with Apache Axis for a Rewards Points Redemption service in partnership with a major credit card company,
integrating it into the above mentioned payment interface. The redemption feature went on to bring in over $10 million in charitable
donations, and counting
- Organized a version control and release work flow using Subversion. I managed the bulk of the branching and merging while working
out the kinks of the process and training my coworkers.
- Develop, maintain and refactor applications in Java, JSP and client side javascript, CSS and HTML.
Database schema design, and normalization with Postgresql. Build scripts in Ant, command line processes in bash, and some
legacy perl.
- Refactored a single servlet web app into a flexible, and highly configurable framework based on the
Model-View-Controller pattern.
- Worked closely with clients, ranging from tiny nonprofits to large international companies, to add features to and customize
existing products to meet their needs.
2005 - 2006
eCarbonated
Oakland, CA
Software Consultant
- Modified a custom CMS written for a specific client in PHP for more general use. Mysql database maintenance and schema design.
2001
Community Marketing
San Francisco, CA
Software Consultant
- Built an ad impression and click trough tracking system for an ASP/Visual Basic web app called gayjet.com
(now TAG Approved). Schema design and database maintenance with SQL Server.
2000
Software Consultant
- Developed a search index and interface for a small, curated set of nonprofits.
2000
GotPing
Software Consultant
Lead Developer
- Developed mostly brochure-ware web applications for big companies using javascript, DHTML, and perl.
Other Projects
- Android app to track location in real time which integrated with (the now defunct) Shizzow, places and check-in API
for social features.
- Android app allowing a user to create ringtones using the Text-to-Speech library, and share them with friends.
- Java in Jails; a java library for creating, displaying and validating
forms similar to how they are handled in ruby on rails. The main feature of this library is that it is configuration free. It uses
reflection to bind a class's existing JSR-303 Bean Validation Annotations to a Jquery validation library on the client side.
It provides a ParamMapper class that can recursively convert from request parameters to Objects (and vice versa).
Skills
- Java development using J2SE, J2EE, Servlets, JSP, JSTL plus custom tag development, JDBC, JPA, JUnit, Hibernate, JSR 303, Threads, Reflection, Generics
- Web Service development using REST with JAX-RS and Jersey as well as SOAP, Axis, WSDLs
- Javascript for front end development focusing on React and Redux, with Node primarily for dependency management, Babel, code splitting and other considerations.
- Node.js for server side rendering in isomorphic/universal Javascript apps.
- Client side development with HTML, CSS, Javascript, AJAX, Backbone, Jquery, JSON
- XML using JAXB, XStream, XPath, Sax. DOM, Castor
- Server configuration Tomcat, Apache, Jersey. Experience with AWS/EC2.
- Strong understanding of object-oriented design principles and patterns, refactoring, test driven development, and continuous integration.
- OS experience: Linux, Mac OSX, Windows
- Tools: git, svn, Maven, Ant, IntelliJ, vim
- Databases : Postgresql, mysql, Sql Server. Experience normalizing database design, and performance tuning.
- Payment systems: Cybersource, Verisign, PayPal.
- Other languages and frameworks used for small tasks, and side projects: bash, Android, Ruby, Scala
- Past professional experience with perl, php, visual basic/vb script,
Education
University of California Santa Cruz
Santa Cruz, CA
Studied economics and linguistics
Cabrillo College
Aptos, CA
Studied philosophy, computer science and math