Adam W. Lee
+1(347)692-8661
atomly-resume@atomly.com
Skills:
Process: Extreme Programming (XP), Test-Driven Development and Agile/Iterative Processes
Design: Object-Oriented Design and Design Patterns, Highly-Scalable/Distributed Systems, Functional Programming
Languages: Java EE/SE (1.1-1.6), Scala, Erlang, Go, C/C++, PHP, Python, Ruby, FreeMarker, Bourne Shell
Scaling/Distributed Technology: Scalable storage/NoSQL (Redis, mongodb, TokyoTyrant/KyotoTycoon, memcached, Cassandra), message queues (ActiveMQ, Kestrel, RabbitMQ, custom-built, etc.) distributed architectures (Norbert, Akka), SOA
Web Technology: Servlets, JDBC, XML (XPath, XSL, etc.), JSP, HTML, DHTML/Javascript, AJAX, nginx, Tornado
Database: Oracle, MS SQL, MySQL, Mnesia, PostGRESQL, Access, Hibernate and Several Proprietary Formats
OS: UNIX (FreeBSD, Linux, SunOS/Solaris) networking and administration, Windows
Networking: Low-level protocol development over TCP/IP and UDP, high-level protocols such as HTTP, SMTP, HTTP, SOAP, socketio, etc.
Mobile Technology: Java ME, WAP/WML, XHTML, VXML, PalmOS
Development Environments: Eclipse, git, Subversion, CVS, Tomcat/Apache, make, ant
Employment Experience:
2012 Gilt Groupe New York City, New York
Principal Engineer
I am a Principal Engineer working on the Platform/Commons Team at Gilt Groupe, where we work to provide a common platform for the disparate businesses that make up the Gilt family in order to increase speed, efficiency and scalability while cutting down on duplication of efforts.
Our five-person team creates the low-level libraries and services that serve as the backbone for the code written by the hundreds of other developers at Gilt.
- Work on the platform team writing key low-level services to be used by all other developers at Gilt
- Responsible for a large push to reimpliment old Java libraries as Scala libraries leveraging newer technologies to increase durability, scalability, performance and efficiency.
2011 turntable.fm New York City, New York
Senior Software Engineer - Lead Backend Developer
I was the lead backend developer for turntable.fm. Turntable.fm is an interactive, social music service that allows users to share and discover music in real-time and then discuss and rate this music. I was brought in during the invite-only private beta phase of the product when a prototype was already built, but the site's surging popularity required significant work be done to be able to scale to demand. Turntable.fm is deployed on Amazon AWS and primarily written in Python (CherryPy and Tornado behind nginx) with mongodb, RabbitMQ and memcached.
- Took on platform from its beta phase and got it ready for public release
- Analyzed and evaluated key pieces of architecture, e.g. storage, caching and transport layers, to allow for maximum scalability, stability and performance
- Identified components from the main stack and broke them out into services, allowing for easier testing, configuration and management in addition to gains in reusability and performance
- Drove transition from an ad-hoc to a more defined process that allowed for clear definitions of tasks and strategies while maintaining maximum agility
2007-2011 Fotolog New York City, New York
Senior Software Engineer - Team Lead
I worked on a team of developers maintaining and expanding fotolog.com. Fotolog is a highly-scalable web application written primarily in Java (Tomcat) on top of Solaris, memcached, TokyoTyrant, Norbert and MySQL. I was one of two senior engineers responsible for all architecture and design decisions.
- Developed and extended a web application for a site with approximately 35 million users and 500 million photos in addition to approximately one milion photos uploaded daily and one billion page views a week
- Helped migrate from PHP to a new, Java-based architecture that, in addition to giving greater flexibility and reuse for future code, allowed for a faster response time while halving the number of servers
- Worked on a two person core team to research, design and implement architectural changes and optimizations that allowed Fotolog to expand by several million members in under a year without any major hardware upgrades
- Managed projects through the entire life cycle, from requirements gathering and design to delivery, including mentoring junior developers
- Primary technical contact for product and design teams, responsible for meeting with them to create new features that are technically feasible and at the same time highly desired/usable by end users.
- Redesigned and rewrote the image upload and processing system from an in-request method based around JAI to an asynchronous method using a custom-built queue and a processing farm running GraphicsMagick. This increased processing speed and reliability, allowed for much better scalability and drastically improved image quality, leading to a 25% increase in daily uploads and corresponding increases in pageviews and revenue.
- Redesigned and rewrote storage and caching layers. Transitioned from SQL, XML and Java serialization layers to a binary (Protocol Buffer) format, allowing for smaller data, interoperability, object versioning, etc. Moved from an NFS-based disk store to a distributed key-value data store with a seamless caching layer, leading to an order of magnitude speed increase and equivalent jumps in reliability and uptime.
- Rewrote most core components of the system and many 3rd party products to meet the scalability requirements of the site and the unique challenges of writing highly parallel code to work on CMT (64 and 32 core Sparc) systems.
- Used Norbert to move many components out of the Tomcat stack and into a more distributed environment, giving greater flexibility, efficiency and reliability.
- Wrote all versioning, code managment and deployment scripts to give us a fast and flexible system that allowed for upgrades, testing and analysis without downtime.
2003-2006 Realogic Analytics, Inc. Chicago, IL
Senior Software Engineer - Team Lead
I worked with a small team of developers on various projects based around a core application framework written in Java. The primary application was a domain model of property management data, which we used as an abstract model to load client data from various real estate applications so that it could be manipulated, reported on, or transformed and migrated to data formats and databases of other applications.
My role as team lead was to develop and maintain the core system, design new applications and components, help other team members with design/implementation and integrate third-party software and new technologies into our products.
- Designed core system architecture, including support for
modularized applications with multiple front ends (web-based, CLI,
native GUI)
- Designed and implemented data access service-level cache and security system
- Designed and implemented ASP-ready client organization, group and
user system with report-level, page-level and data-level security and
permissions
- Designed and implemented data migration service which included
ability to track changed records between two completely differently
schemed systems and reconcile differences
- Developed data access layers for several real estate industry databases
- Developed an ad-hoc web framework including a generic validation framework
- Extended functionality and continued development using a domain-specific generic data model architecture
- Performed database analysis and redesign work of generic
data models, resulting in a new system using multiple models and
independent transforms that solved many of the previous design problems
and also enabled transparent transform technology as well as
specific-task configured transforms all run by a common data migration
driver
- Designed and implemented lazy-load and cascading persistence into
data access mechanism, allowing for easy, quick application development
- Designed a web reporting system that interfaced with multiple
reporting engines through a common data model and fully decoupled the
UI from both
- Developed a task scheduling system and an offline reporting system to allow off-line report delivery via email
- Led requirements gathering, specifications, design and implementation of a cashflow budget and reforecasting application
- Designed a fully configurable data modeling, transform and migration tool
- Coordinated and implemented several remote systems integration projects with partners of Realogic
- Mentored junior programmers to assist them with design and coding practices
2002, 2006-2007 Independent Chicago, IL, Berlin, DE and Las Vegas, NV
Software Developer
I have performed contract jobs in various capacities, such as Java application work, PHP web development, C++ code for the PalmOS platform and IT work, for clients such as a major university, mid-sized real estate companies and various small companies in the music industry.
- Developed a custom PalmOS application for a university psychology department using C++
- Developed small PHP-based systems for independent music companies
- Designed and developed a system to migrate data from a custom database to a custom XML schema which I also developed
- Designed, setup and maintained networks for several small businesses
2000-2002 Curious Networks, Inc. Chicago, IL
Senior Software Engineer
I worked with a team of ten programmers on the conception, design and implementation of Continuum, a multi-channel presentation server which allowed developers to write an on-line application once and then deploy it for interactive use via numerous information access channels.
Continuum was written in Java and deployed on Windows, Solaris and Linux systems. Supporting architecture was implemented in Python, shell scripts, make and ant. We used cvs for revision control, and our process was an adaptation of Extreme Programming (XP).
I primarily focused on the implementation of server functionality (classloaders, logging, request processing, etc.) and implementation of the HTML, VXML and WML channels. Concurrently, I participated in both short and long-term product and development planning, requirements analysis, process and development environment management, quality assurance, and product documentation.
- Coordinated with other team members on the architecture and core design of the system, and was fully responsible for the design of many components
- Worked in the XP process on a full-time basis, including daily standups, fully-paired coding and extensive unit/regression testing
1999-2000 Cyrus InterSoft, Inc. Minneapolis, MN
Senior Java Software Developer - Core Team
I worked on the core team for Speiros, a Java-based network operating environment. Speiros was written such that any account and, subsequently, any pure-Java program could be accessed from any Java device, allowing enterprise-wide deployments of applications and allowing users to have a roaming desktop with all of their applications and data available from any device.
I was on the core team and focused on product design and the implementation of specific features including JAR caching, custom class loaders and assorted workarounds to enable multiple Java applications in one VM.
- Designed and implemented a JAR-caching mechanism for our custom ClassLoader
- Worked on custom class loaders which allowed our application to run multiple Java Applications in one VM
- Supervised a small team of junior developers, helping them with design and any programming issues they had
1996-1997 Fargo Public Schools Fargo, North Dakota
Computer Systems Specialist, Network Technician
- Maintained 1500 node/14 location city-wide network based on Novell 4.0 with machines running Windows, Unix and MacOS
Specialization:
In my thirteen years as a software engineer, I have come to learn a lot about the processes by which software is designed, implemented and delivered. I have worked in all aspects of software, from requirements gathering and interfacing with clients to spending long nights coding to ensure that a project meets its deadline, and this vertical knowledge of the process gives me great insight as an architect and a team lead. I have learned about the necessary balance between trying to write the perfect piece of software and delivering working software on-time. Most importantly, I have learned to design software that accomplishes the task at hand without over-engineering, but is still re-usable and extensible in the future.
My main area of interest is core system design and architecture. I enjoy designing and implementing frameworks, pluggable components, tiered systems and abstraction layers. I also enjoy developing core components and low level mechanisms in applications such as caches, resource managers and global asynchronous processes. I have extensive experience with data modeling, transformation,
migration and database integration.
I have overseen many projects through the full development cycle and
I have gained a practical approach with regards to business
sense and flexibility as a software engineer.
Education:
1998-1999 University of Minnesota Minneapolis, MN
Completed two semesters toward a B.S. in CS, but left to pursue my career full-time.
June, 1998 Fargo South High Fargo, ND
Graduated from Fargo South High School and received various awards while there, such as winning a state-wide computer competition, a state-wide science competition, several awards in state journalism (editorial writing, editorial cartooning and graphics: design and layout), first place in Lincoln-Douglas debate and runner-up at nationals in editorial cartooning.
Other Information:
I am a citizen of the United States and authorized to work for any corporation.
I am a native speaker of English and have basic conversational skills in German and Spanish as well as a beginner's knowledge of Arabic.
In addition to my programming work, I am a musician. I run a successful independent record label and have performed throughout Europe and North America.
References:
Available upon request.