Andrew Geweke

Software Fanatic

3100 College Avenue #10

Berkeley, CA 94705 USA

e-mail:

mobile: 415/462–0802

Objective

To:

I'd like to work with a company that sees technology as a catalyst that can bring empowerment, enjoyment, and fun (!) to the average person, whether that's through a new product or service or just making an existing one better. I believe that as the role of technology grows in our world today, making it easy to use, accessible to all, and just plain fun will become more and more important — both for making sure we enjoy technology, and, more concretely, as a direct contribution to a company's bottom line.

I'd like to work with a company to whom technology is the core of business, and where speed of development, reliability, and scalability of that technology is key. I'd like to work with a company that understands the software-development process and continuously works to improve it — a company that understands there's always room for improvement, often by leaps and bounds, and never stops pushing to get there. I'd like to work for a company that understands the value of superb teamwork, and one that will let me grow as I contribute in the various ways I'm capable of.

In return, I'm highly motivated, passionate about creating software, creative, and experienced. I bring extensive design skills, clean and simple code, and a deep knowledge of all kinds of computer systems to the table. I have experience ranging from extremely large-scale, multithreaded/asynchronous complex servers and applications, to building traditional GUI- and web-based applications with intense attention to detail and the user experience. I know Java like the back of my hand, yet have recently turned significant attention to Objective-C and Ruby, two definitely interesting languages that allow me to push some very different envelopes in the software-development process.

I have a great deal of interest in how we create reliable software, including how we can write and run tests that can help us produce very-low-defect software without hiring an army of test engineers. I've spent a great deal of time on this over the past several years and believe I have significant contributions to make in many related areas; I have a particular interest in and a great deal of experience with automated testing, including having developed test systems that stress all parts of a product, from the smallest classes to the system as a whole, giving broad, deep, and instantaneous visibility into a product's level of quality and how we can improve it. As a result, products have become dramatically more reliable and predictable, allowing software to ship on time and with fewer defects far more often.

Similarly, I also have a deep interest in the way we create software and structure teams, figuring out how to make a team much more than the sum of its parts — I’ve seen teams increase their productivity by an order of magnitude by changing the way they worked (rather than by increasing the amount of time they worked or the number of people), and I’m very much interested in applying these techniques to further teams as I push forward.

I spent three years at UC–Berkeley studying systems architecture and construction, and since then have spent 7+ years building software systems across the board. I believe a deep understanding of the fundamentals of software systems and hardware is far more important than mastering every library or function call in the framework of the day.

In the end, though, more important than any particular technology or experience, I have a passion for what I do; I communicate precisely and rapidly; I am creative and knowledgeable; and I am driven by building software towards an end, not as an end in and of itself.

Target Location

The San Francisco Bay Area; ideally, in San Francisco itself.

Experience

Senior Software Engineer July 2004–Present Technical Lead December 2004–Present Terracotta Technologies, Inc. Brisbane, CA and San Francisco, CA

Started as the fifth engineer and sixth member of the company. Initially drove a substantial change in development processes, introducing automated system-level testing, deeper and more reliable unit testing, fully automated build-and-test systems on multiple platforms, and a more scalable and reliable build system. Further drove a substantial change in development planning and follow-through, moving from a longer-timescale, more isolated approach to a tightly-iterated, rapid-integration method that produced very significant benefit in a very short time.

Re-architected and wrote the substantial majority of code for one of the company’s two core products, increasing reliability, extensibility, testability, and scalability very substantially. Proceeded as the technical lead on this project for quite some time, continuing to extend it and offer guidance on its technical evolution. Spent a substantial amount of time on-site in New York with the product's first customer, including customization, installation, troubleshooting, and enhancement. Wrote hundreds of unit tests and dozens of system tests, making up the vast majority of the product's testing infrastructure.

Responsible for increasingly significant iterative changes in the company’s testing strategies, moving from a single set of automated tests on a single machine to very large suites of tests on dozens of different machines. Developed infrastructure, testing policies, architecture for reliably running tests, reporting software and a database, and highly-customizable and parameterizable testing environments.

Developed a significant web-based user interface using Ruby on Rails, and rewrote the company's entire build-and-test system in Ruby (JRuby, more precisely) to accommodate rapidly-growing build and test needs. Published the results of the tests out over the intranet using this Ruby on Rails application.

Environment

A high-performance fully-distributed system capable of tens of thousands of transactions per second; servers were heavily multithreaded, written in a fully asynchronous style, and capable of being clustered themselves to provide further scaling and extremely high levels of reliability. Testing infrastructure ran over one million individual tests each day, and tested system scaling to hundreds of nodes. Product reliability was critical due to its use in large financial institutions and other mission-critical environments.

Technologies

Java (1.4 and Java 5) JDBC Oracle 8 and 9
XML (SAX, DOM, XMLBeans, XPath) Tomcat (5.0, 5.5) WebLogic (8.1)
J2EE (1.4) JMX log4j
JUnit Ant Cruise Control
Ruby Ruby on Rails JRuby
Berkeley DB Eclipse InstallAnywhere
Senior Software Engineer August 2003–July 2004 QRS Corporation Richmond, CA

Defined much of the core architecture for, and wrote a significant portion of the code for, the company's first major all-new product in quite some time. Responsible for much of the 'backbone' of the product that defined the system flow, managed interactions among the other components, and set up the basic structure of the system. Further was deeply involved in much of the individual component work, including database communication, EDI, ADF, and XML document handling, parsing, and translation.

Wrote a tree-based, extensible, robust EDI parser, responsible for extracting core business data from EDI documents and passing it on to a number of consumers.

Further responsible for significant parts of the architecture for an entire suite of system tests, including maintainable test-data generation, automated testing of the various interfaces into the system, and automated testing of the user interface components. Helped define the future direction of testing, the interfaces used in testing, and basic approaches used to keep tests down to a maintainable volume and purview.

Participated extensively in a major rework of the company's software production process, including a transition from largely traditional methods to a new method based on Extreme Programming. Helped define stories, write unit tests, create unit test frameworks, define acceptance tests, define system-testing frameworks, rework build system for increased speed and stability, and so forth. Learned extensively from one of the original participants in the Extreme Programming movement.

Environment

A mission-critical, transactional business application sold as a service to customers. Application began processing thousands of business documents per hour and scaled into the tens of thousands; each document was processed in a precisely defined, fully transactional fashion that involved coordinating transactions among a database, transactional EDI connectors, and ad-hoc filesystem operations. System's infrastructure was designed to scale to extremely high levels as the service became increasingly popular.

Technologies

Java (1.4) JDBC Oracle 8 and 9
XML (SAX, DOM, XPath) Tomcat (5.0) J2EE (1.4)
Apache Struts Hibernate JMX
log4j JUnit Ant
Cruise Control IntelliJ IDEA EDI
Senior Software Engineer February 2001–August 2003 Kenamea, Inc. San Francisco, CA

Member of the core engineering team responsible for the Kenamea Message Switch, a very-high-performance, Internet-scalable, enterprise messaging system. Along with other engineers, analyzed requirements for, designed, built, tested, and supported the platform’s core messaging system, transactional persistence store, RDBMS access layers, management and monitoring functionality, administrative backend, and additional features.

The Kenamea Message Switch is an Internet-scale, fully transactional, persistent, scalable messaging switch, comparable in many respects with products such as IBM’s MQSeries and Microsoft’s MSMQ — but with an Internet-centered approach. This means all work was done in a fully transactional environment, implemented as an asynchronous system (no single thread, let alone process, per connection or message). In this environment, completely overhauled the entire database-access layer, administrative messaging subsystem, delivery and addressing semantics, routing subsystem, management and monitoring systems, authentication, and portions of the transactional persistence store.

Worked every day in a tightly-knit team of between twelve and twenty-five engineers, requiring precise communication skills, strong teamwork, and a willingness to get it done, no matter what it takes. Adopted the company’s Extreme Programming culture rapidly; worked in agile, small teams, pair programmed, and became fanatical about unit testing and automated tests. Worked closely with product management, sales, sales engineering, and field support to not only support the product but understand what drives it forward and learn how to better advance the software.

Environment

An extremely scalable, reliable, fully transactional message-queuing system that was built from the ground up to scale to millions of potential users. Database support was required to be both fully transactional and extremely high-performance, meaning a very fast caching layer was added to provide database data to the server tens of thousands of times per second. Entire product was written to fully use existing hardware (avoiding normal context-switching and I/O bottlenecks), as well as scale to use entire clusters of hardware to provide service to increasingly large volumes of clients.

Technologies

Java (1.3) JDBC Oracle 8 and 9
Solid XML (SAX, DOM) JMX
JAAS log4j JUnit
make emacs IntelliJ IDEA
Senior Software Engineer February 2000–Feburary 2001 Managize Corporation San Mateo, CA

Third employee, and first engineer, at business-driven software startup that grew to fifty employees and eighteen engineers over eleven months. Contributed critically to customer acquisition, systems analysis, engineering architecture, code development, quality assurance, and customer support. Owned entire back end (middle tier and database) of product suite, including analysis, development, coding, testing, and maintenance.

Analyzed, designed, coded, and tested the company’s first applications (and set the architecture for future applications), including a full J2EE database-backed Web application architecture. Over the three months of June–August 2000, wrote 40,000 lines of code — which still comprises over 80% of the first application — and oversaw their handoff to and use in future applications by other developers. Owned entire back end of product, including everything between the UI presentation code and the database. Architected back end so that it required fewer than 3 hours/week of maintenance even as customer requirements changed.

Supported a legacy application during that time — over 160,000 lines of code; fixed bugs, and improved performance of certain processes by several orders of magnitude (critical overnight batch-mode import went from 10.5 hours to 53 seconds). Acted as primary customer contact when company was small and senior engineering contact when large, providing 24x7 support on the project.

Software Engineer February 1999–Feburary 2000 eALITY, Inc. Foster City, CA

Contributing engineer in small startup that grew from twenty to fifty employees during my tenure. Responsible for design of various subsystems of company’s primary product and integration of changes into existing code base. Worked with a team of 6–8 engineers to enhance and extend company’s main product and tune its performance; was responsible for large performance improvement (page generation speed dropped from 3 seconds per page to 10 ms per page) within first two weeks of employ. Contributed directly towards re-design of second-generation clustered version of product, including sophisticated, distributed caching architecture.

Was responsible for major portions of a branch of the product, including all data acquisition from legacy systems (import and export of legacy mainframe-based file formats). Supported these portions of the product on an ongoing basis.

Education

Master of Science in Computer Science December 2000 University of California, Berkeley Berkeley, CA

Completed M.S. program in Computer Science at the University of California, Berkeley, including extensive research experience. Achieved highest score of any of my cohort on preliminary examination, and graduated with 3.9+ GPA. Worked under some of the best and brightest, including Eric Brewer (cofounder, Inktomi), David Patterson (responsible for RISC, RAID, and much of modern cluster technology), and David Culler (advisor, and major contributor to parallel-computing technology, including clustering).

Thesis (A System for Batch-Mode Economic Scheduling of a Cluster of Workstations) deals with issues of resource scheduling on large clusters of workstations (acting as a high-performance, fault-tolerant, distributed supercomputer) using economic models. Wrote software and carried out yearlong experiment to determine how users interact with this software. Research was under the aegis of the Berkeley Millennium Project, determining how to build and use large-scale clusters distributed across a wide area (an entire university campus).

Worked with the Berkeley Ninja project, tackling issues of object-oriented middleware in providing Internet-scale services — an offshoot of the TranSend project, which led to Inktomi. Developed services for PDA-type devices, including electronic cash and truly secure electronic remote transactions.

Co-started the Berkeley VIA project (the Virtual Interface Architecture), an implementation of an industry-standard high-performance user-level communication network for clusters to be used as a parallel, switched interconnect fabric. Studied and implemented VIA, and presented paper (nominated for Best Student Paper) at the SC ’99 conference (formerly called “Supercomputing”).

Relevant coursework includes substantial work in operating systems, security and cryptography, parallel computing, and computer architecture.

Bachelor of Science in Computer Science May 1997 Michigan State University East Lansing, MI

Completed a B.S. in Computer Science (Honors College) at Michigan State University. Graduated with a 3.6+ GPA, including a 3.8+ GPA among core courses.

Skills

Things I know like the back of my hand:
Java, C, XML, SQL, JDBC, Unix/Linux, Mac OS X, multithreaded programming, extensive refactoring tools, asynchronous systems design, unit testing, system testing, test automation, test architecture and reporting, test-driven design, agile software-development techniques (including Extreme Programming), HTML/XHTML, CSS, etc.
Things I know pretty darn well:
Ruby, Ruby on Rails, Objective-C, queuing systems, application servers, Java (2) Enterprise Edition (JEE/J2EE), Oracle. Extreme Programming.
Things I've at least played with a fair bit:
JSPs, web application frameworks, Lisp, Python, etc... A whole lot more that won't fit here.
Things I can pick up as needed:
Pretty much anything.

Selected Publications

References

...are available upon request, of course.