Andy Lester

Manager, lead software engineer, speaker, writer

Palatine, IL


  • Over 35 years in business application development. Manager, project leader and lead software engineer for e-commerce websites.
  • Over 20 years experience in modern object-oriented Perl backend web development. Contributor to the Perl core. Instrumental in developing Perl's testing ecosystem. Created WWW::Mechanize web client. Prolific Perl module author.
  • Extensive SQL database experience with Oracle, PostgreSQL and MySQL.
  • Creator of ack, a widely-used alternative to grep optimized for programmers.
  • Author of Land the Tech Job You Love, 280 pages, published June 2009 by Pragmatic Bookshelf, a guide to job hunting for technical professionals.

Work Experience

Follett School Solutions, McHenry, IL (2012-now)
Book Wholesalers Inc, McHenry, IL (2007-2012)

BWI was a wholesaler of library books to public libraries. I drove sorely needed upgrades to BWI's TitleTales website since the company's 2007 move to McHenry. After BWI was sold, I transferred to Follett School Solutions.

Lead Software Engineer

  • Drove migration of e-commerce web app from on-premises servers to Microsoft Azure and Azure DevOps.
  • Inherited and modernized e-commerce web app of 100,000 lines of PHP under Apache.
  • Created a modern development environment for the app. My predecessor had one codebase: the production server.
  • Implemented version control, automated testing, bug tracking, coding standards, continuous integration and a stable release process.
  • Design, coding and testing of ongoing improvements to the app. New development was done with modern Perl techniques.
  • Planned and implemented a 40,000,000-document search engine in Solr & Lucene to replace an existing search application using Oracle Text.
  • Created and evangelized the company wiki in MediaWiki. It grew to 3,000 pages in its first year and is now an integral part of company workflow and culture.
  • Received the "Follett Values In Action" award, a $500 quarterly prize, for the company wiki.
  • Created Cacti monitoring system to track server performance trends.
  • Integrated dynamic video loading on product pages using the Brightcove Player API.
  • Updated all legacy pages to be HTML5 compliant using the HTML::Tidy5 Perl module I created as a wrapper around the W3C's tidy-html5.

Follett Library Resources, McHenry, IL (2001-2006)

Follett Library Resources is the leading wholesaler of K-12 library books in the U.S. The Titlewave online application helps librarians select materials for purchase.

Web Applications Manager (2002-2006)

After being promoted to manager, I scaled the department upward to include six programmers and a system administrator.

  • Grew and led team of six programmers and system administrator
  • Started migration of PHP codebase to object-oriented mod_perl.
  • Defined software construction processes used by all programmers
  • Interviewed and hired all programmers for my department
  • Chief architect of web systems infrastructure
  • Gave training classes for company staff and other corporate divisions
  • Planned future growth with my counterpart on the project management side of the house

Project Leader / Sr. Software Engineer (2001-2002)

When I started, there was one programmer, one system administrator and no repeatable process. Releases were made by FTPing tarballs to production servers, and version control was made by occasionally zipping up the source.

  • Project manager and lead programmer for all projects
  • Lead programmer/architect for the Titlewave team
  • Implemented CVS & Subversion version control systems
  • Created new infrastructure for the site using PHP's object features
  • Implemented software process and coding standards

Follett Software Company, McHenry, IL (1991-2000)

FSC is the leading creator of library automation software for the K-12 market. If you checked out a book in a school library in the past 25 years, chances are it was done with a Follett Software circulation system.

Sr. Internet Engineer (1996-2000)

  • Created the company-wide intranet and external website infrastructure
  • Created all intranet applications for all departments

Software Engineer (1991-1996)

  • Designed, coded and tested library automation software in C and C++.
  • Worked on teams of two, four and ten, depending on the project

S.D.C. Associates d/b/a Just Pants, Elk Grove Village, IL (1986-1991)

  • Wrote Pascal software for retail stores: Point-of-sale system; purchase orders; inventory; email
  • Wrote back-office systems in BASIC, COBOL and SPEED II 4GL: Accounting; inventory; email

Open Source

Some of the projects I've created and contribute to include:

I created the widely-used text search tool ack (sometimes packaged as "ack-grep") in 2006. As ack has matured, my role has changed from creator and author to shepherd of incoming patches.
The ack website,, also is a hub of information about other code search tools to help users decide which tool best fits their needs. The site gets about 8,000 unique visitors each month.
This site is a collection of information to help novice programmers understand how to properly use parametrized SQL queries to prevent SQL injection attacks. While I created the site in 2008, it is now based on community content. Source for the site is kept on GitHub, with contributions coming in just like patches to a code-based project. Around 4,000 unique visitors use in a month.
WWW::Mechanize is a Perl module that allows easy navigation of websites, acting as a web browser in an object. Created as a fork of WWW::Automate in 2002, I maintained Mech until 2012. It is now slated to become part of the standard libwww-perl library. Its sister module, Test::WWW::Mechanize merges the convenience of Mech with Perl's automated testing ecosystem.
Perl 5
As a member of the Perl 5 Porters, or core Perl developers, I contributed patches to the C source code to make it more maintainable and with safer constructs. I performed regular static analysis on the C code and strengthened the compiler warnings to check for questionable code.
A collection of policies for the Perl::Critic static analysis framework.
Test::Harness and prove
During the time I maintained the core Perl module Test::Harness, I created the prove tool to encourage test-driven development by making test execution simpler from the command line. prove is now shipped with every Perl distribution.
Perlbuzz is a news site about Perl 5, Perl 6 and Parrot. As more Perl blogs have become popular, Perlbuzz has mostly become a stream of stories, selected by me, fed primarily through the @perlbuzz Twitter feed. Perlbuzz reaches almost 7,000 readers and followers each week.
Parrot is a virtual machine, written in C, for running modern dynamic languages like Perl 6. In the late 2000s, I worked to increase stability of the code by increasing the number of compiler warnings checked, running static analysis tools like splint, and instrumenting the code.
White Camel award, 2005
Awarded one of three White Camels, an annual award for service to the Perl community.



Land The Tech Job You Love (Pragmatic Bookshelf, June 2009): Author, 280 pages, ISBN: 978-1-93435-626
My book on how to find a job and get hired once you know what sort of job you're really looking for.


Small Sharp Software Tools (Pragmatic Bookshelf, May 2019): Technical review

SQL Antipatterns (Pragmatic Bookshelf, 2011): Technical review

Mac OS X Tiger In A Nutshell (O'Reilly, 2005): Updates on entire book. Co-author credit.

Perl Best Practices (O'Reilly, 2005): Technical reviewer
"I would like to express my deepest gratitude... [t]o Andy Lester, for inspiring with his deep understanding of, and passion for, the best coding practices." -- p. xxi

Pro Perl Debugging (Apress, 2005): Technical review and co-author/writing mentor

Pro Perl (Apress, 2005): Technical review

Mac OS X Panther In A Nutshell (O'Reilly, 2004): Updates to Unix command chapter

Code Complete, 2nd Edition (Microsoft Press, 2004): Technical review

Spidering Hacks (O'Reilly, 2003): Author of three articles

  • Hack #21: WWW::Mechanize 101
  • Hack #36: Downloading Images From Webshots
  • Hack #44: Archiving Yahoo! Groups Messages With WWW::Yahoo::Groups

Google Hacks (O'Reilly, 2003): Technical editor
"And to Andy Lester, our technical editor, goes much appreciation for his thorough nitpicking." -- p. xiii

Perl, CGI & JavaScript Complete, 2nd ed. (Sybex, 2003): Updated Perl sections for Perl 5.8

XML Primer Plus (Sams, 2002): Technical review

Teach Yourself Unix System Administration in 24 Hours (Sams, 2002): research, development & first draft for chapter 22, "Awk & Perl", plus technical review

Perl quick reference chart (Barcharts Inc., 2001): Technical review, and major rewrite

Unix Power Tools, 3rd ed. (O'Reilly, 2001): Technical reviewer for 10 chapters

Articles & Publications

Hewlett-Packard's enterprise.nxt blog

New Relic's blog

New Relic is a cloud-based monitoring company.

Smartbear's blog

SmartBear is the leader in software quality tools for teams.

PragPub magazine

PragPub is a magazine published by Pragmatic Bookshelf. Some issues are available online, but others are not. Articles marked "*" are co-written with Johanna Rothman when we had a regular Lester and Rothman column.

Other publications

  • "What to Include in Your Open Source Resume", 10/9/2009
  • "Using mdfind and mdls in Mac OS X", O'Reilly MacDevCenter, 2004
  • The Perl Journal: Articles published in 2003-2004 include "Web Security with Taint Checking", "Using Devel::Cover", "Introduction to Automated Testing with Test::Harness", "Five Ways To Find Files" and "Data Manipulation & Perl Command-Line Options"

Presentations & Speaking

Many of my slide decks are available on Speaker Deck or Slideshare.

THAT Conference, Wisconsin Dells, WI, 8/8/2019
What every beginning developer should know
SoftwareGR, Grand Rapids, MI, 4/30/2019
What every beginning developer should know
CodeMash, Sandusky, OH, 1/10/2019
What every beginning developer should know
Milwaukee Code Camp, Milwaukee, WI, 11/10/2018
What every beginning developer should know
YAPC::NA 2012, Madison, WI, 6/13/2012
29 Ways to Get Started in Open Source
O'Reilly Open Source Conference 2011, Portland, OR
Building and Maintaining a Project Community with Github, 7/27/2011
CodeConf, 4/9/2011
Building and Maintaining a Project Community with Github
Invited to speak by GitHub's co-founder, Chris Wanstrath.
Palmetto Open Source Conference, Columbia, SC, 4/16/2010
What schools should be teaching IT students
O'Reilly Open Source Conference 2008, Portland, OR
People For Geeks, 7/22/2008
Just Enough C For Open Source Programmers, 7/24/2008
Frozen Perl 2008, Minneapolis, MN, 2/16/2008
Get Out Of Technical Debt Now!
Grand Rapids (MI) Perl Mongers
Get Out Of Technical Debt Now!, 9/28/2007
O'Reilly Open Source Conference 2007, Portland, OR, 7/25/2007
Get Out Of Technical Debt Now!
YAPC::NA 2006
Get Out Of Technical Debt Now!, 6/26/2006
Pragmatic Job Hunting, 6/28/2006
Pittsburgh Perl Workshop, 9/23/2006
Preventing Crisis: Project estimation and tracking that works
San Francisco Perl Mongers, 8/15/2006
Get Out Of Technical Debt Now!
Grand Rapids (MI) Perl Mongers, 10/25/2005
The A-Z Guide Of CPAN Modules For New Authors
O'Reilly Open Source Conference 2005
Practical Perl Testing, with chromatic, Ian Langworth and Bill Odom, 8/3/2005
Preventing Crisis: Project estimation and tracking that works, 8/4/2005
YAPC::NA 2005, 6/29/2005
Preventing Crisis: Project estimation and tracking that works
San Francisco Perl Mongers, 4/15/2005
Preventing Crisis: Project estimation and tracking that works
WebGUI Users Conference 2004, 10/21/2004
Introduction to Perl Programming
Advanced Perl Programming
Testing With WWW::Mechanize
O'Reilly Open Source Conference 2004, 7/29/2004
Advice For Open Source Job Seekers
YAPC::NA 2004
Perl Wizardry Without An Editor, 6/16/2004
The Open Source Programmer's Guide To Getting A Great Job, 6/16/2004
Automated Testing Of Large-Scale Projects, 6/17/2004
Minneapolis Perl Mongers, 4/14/2004
Automated Testing Of Large Projects With Perl
St. Louis Perl Mongers, 1/14/2004
Introduction to Automated Testing
Grand Rapids (MI) Perl Mongers, 9/25/2003
Automated Testing Of Large Projects With Perl
O'Reilly Open Source Conference 2003, 7/10/2003
Automated Testing Of Large Projects With Perl
Uniforum Chicago
29 Ways to Get Started in Open Source Today, 5/8/2012
An Overview of Git, 8/10/2010
New Features in Perl 5.12, 7/13/2012
Effective Job Interviewing from Both Sides of the Desk, 9/22/2009
Just Enough C for Open Source Programmers, 7/8/2008
Development Process Lessons from Open Source, 9/11/2007
The A-Z Guide Of CPAN Modules For New Authors, 10/11/2005
Preventing Crisis: Project estimation and tracking that works, 3/22/2005
Perl Security With Tainting, 8/10/2004
Perl Wizardry From The Command Line, 2/10/2004
Automated Testing Of Large Projects With Perl, 8/12/2003
Automated Testing With Perl, 2/11/2003
Chicago Perl Mongers
Introduction to WWW::Mechanize, 7/10/2007
Perl Program Repair Shop, 6/12/2007
101 Things Every Perl Programmer Should Know, 4/10/2007 and 4/24/2007
New Modules For a New Year, 1/9/2007
Perl Security With Tainting, 8/3/2004
The Open Source Programmer's Guide To Getting A Great Job, 6/8/2004
Module Building 101, 1/7/2004
A Field Guide To The Perl Command Line, 11/4/2003
Automated Testing With Perl, 5/19/2003

Technical Skills & Keywords

Languages: Perl, PHP, Ruby, Python, SQL, JavaScript, jQuery, C/C++, awk, shell scripting, bash, HTML, CSS

Perl: CPAN, modern object-oriented Perl, Moose, WWW::Mechanize, mod_perl, Perl::Critic

Databases: SQL, Oracle database, Oracle PL/SQL, PostgreSQL (Postgres), MySQL, MariaDB, Apache Solr search

Web/apps/devops: Microsoft Azure, Azure DevOps, DigitalOcean, Docker, Apache HTTP server, LAMP stack, nginx, Prometheus + Grafana monitoring, Cacti monitoring, Nagios monitoring, SNMP, Tomcat, Jetty

Tools: Git, GitHub, Subversion, vim, ack, Perl::Critic, lint and other static analysis tools

Operating systems: Unix, Linux (CentOS, Red Hat Enterprise Linux, Ubuntu), Mac OS X, macOS

Concepts/methodologies: object-oriented programming, functional programming, model-view-controller, test-driven development, static analysis

Miscellaneous: MediaWiki, WordPress blog/CMS, Jekyll blog, Movable Type blog