Circuit Board

Hi, I'm

Paul Holmes

Software Engineer

About Me

I've been passionate about programming since I was 12 and have worked professionally as a software engineer for over 25 years. I've always loved solving puzzles, and for me, programming has always felt like that -- challenging, inventive, and deeply satisfying. When people think of creative disciplines, they usually picture musicians, painters, or writers -- not programmers. But coding demands as much imagination as technical skill. The puzzles I enjoy solving most are the ones that result in code that's elegant, efficient, and enduring.


After a period of personal exploration and skill renewal -- including learning many new skills, earning professional certifications, and developing a new portfolio app -- I'm excited to return to the field with fresh perspective and renewed focus.

Non-Programming Stuff

My other interests include cognitive science and its intersection with computer science. If you want to hear me talk your ear off for a couple of hours, ask me about the difference between consciousness and intelligence.

Being the lifelong nerd that I am, I am of course into video games and science fiction, though I prefer to think of myself as more of an aficionado than a fan -- I have discriminating tastes!

Far too late in life, I finally acquired a love of cooking. If you ever do a video call with me you'll see that an avalanche of gadgets from my tiny kitchen has overflowed into my bedroom.

I also love bicycling. That's how I get around the city. It's certainly a more enjoyable (and healthier!) way to commute than cramming yourself into a subway train.

Resume

Summary

Paul Holmes

Highly experienced engineer with a career-long focus on best practices and sound methodology, a strong background in both front-end and back-end technologies, and deep experience in Java and web services. Demonstrated expertise as lead developer, designer, mentor, team leader and staff manager.

Skills

Programming Languages

  • Java
  • Python
  • JavaScript
  • TypeScript
  • HTML/CSS
  • C/C++/C#
  • SQL

Frameworks & Databases

  • React
  • Flask
  • Spring
  • Hibernate
  • SQLAlchemy
  • MySQL
  • MongoDB

Tools & Technologies

  • AWS
  • Docker
  • Jenkins
  • GitHub
  • Jira
  • REST

Professional Experience

Founder & Owner

Last Call Software

January 2024 - present

  • Developed full-stack portfolio app employing Python, Flask and SQL Alchemy on the back end, and TypeScript, React and Axios on the front end, deployed on an AWS server in Docker containers.
  • Completed over a dozen training courses in subjects including React, Kubernetes, Serverless Computing, Digital Security, and many more.
  • Earned professional certificates in Meta Front-End Development and IBM Back-End Development.

Senior Developer/Programmer Manager

Omnigon Communications

June 2015 - July 2016

  • Led an international team that developed and maintained the company's flagship software product, a sophisticated Java web app that gathered large volumes of data in real time from live sporting events and distributed and transformed it for use in mobile apps and web pages.
  • Personally developed the most important sections of code, including a dual pull/push communications module that ensured data was delivered reliably and on time.
  • Mentored junior developers, assigned tasks, and conducted code reviews.
  • Technologies employed included Java, Spring, MongoDB, REST, AWS, JSON, Junit, Jenkins.

Senior Developer/Programmer Manager

Mediaocean (formerly Donovan Data Systems)

October 1993 - June 2011

  • Managed teams of up to a dozen programmers that developed the company's flagship web application while actively continuing as lead developer.
  • Led the team in their design sessions, estimated and enforced the timeline, assigned tasks to team members and reviewed their work, and acted as the liaison with upper management.
  • As developer, designed interfaces and wrote the most crucial sections of code.
  • Technologies employed included Java, Spring, Hibernate, SQL, MySQL, Oracle, HTML, XML, XSD, REST, JMS, MQ, Jira, and JUnit.

Education

Bachelor of Arts in Computer Science

Columbia University

2011 – 2014

  • Graduated Cum Laude
  • Concentration in Artificial Intelligence

Portfolio

TrackEats

My labor of love.

TrackEats

TrackEats is a full-stack web application that allows users to accurately track the nutritional content of their diet.

  • Deployed in Docker containers on an AWS EC2 instance
  • Front end is built with TypeScript, React, Tanstack Table and Axios
  • Back end is built with Python, Flask, and SQLAlchemy
  • Alternate pluggable back end in Java, Spring Boot, and Hibernate
  • Database is MySQL
  • Secured with JWT tokens
More information can be found on the app's About page.

CrossCracker preview

CrossCracker

A crossword puzzle solver.

CrossCracker (play demo video)

CrossCracker is a crossword puzzle solving app.

  • Uses AI to solve crossword puzzles. The latest version can solve a New York Times Tuesday puzzle with no errors (watch the video!).
  • Back end is Python, front end is HTML/JavaScript/CSS, connected by FastAPI-hosted REST and websocket APIs.
  • Uses an LLM for candidate answer generation, evaluation, and validation.
  • Capable of using any Ollama-hosted LLM locally, or any Anthropic LLM over the Internet.
  • Uses a ChromaDB database of crossword hints for Retrieveal-Augmented Generation (RAG), substantially improving solution accuracy.
  • When running a local LLM, I prefer the Llama 3.1 (8b) model. It provides the best compromise between size, speed, and effectiveness. And it's free!
  • When using one of the big LLMs available over the Internet, Claude Opus 4.5 is the current state of the art. It is MUCH more effective than anything I could ever run locally -- but it isn't free. Each puzzle solution costs $0.50-1.00 in token usage, so... best saved for demo videos and special occasions.
  • CrossCracker 2.0 is vastly more capable than version 1.0. Partly that's due to much-improved program logic, and partly due to the use of a ChromaDB "hint" database. Retrieval-Augmented Geneation (RAG) using vector databases is the new normal for AI apps, and for good reason. It made a huge difference in the app's accuracy.
  • Puzzle aficionados will know that the New York Times crossword is the gold standard, and that it is easiest on Monday and gets harder throughout the week. With the Llama LLM, CrossCracker 2 can reliably solve a Monday NYT puzzle. With Opus it can reliably solve a Tuesday puzzle and could probably solve even a Sunday puzzle if it just had to answer the clues, but the later puzzles have all kinds of gimmicks like rebuses and self-referential clues that my solver is not equipped to handle. Maybe some day.
  • The algorithm and heuristics for selecting which answer to place, and more importantly, which one to backtrack when stuck, was actually far more difficult than integrating the AI. I'm confident that no AI in the world could design and write the code that I did for this solver. At least, not yet. Claude Opus sure couldn't, and I know that because I tried that! So yes, there's still a place in software engineering for us puny humans.

NonoLogic preview

NonoLogic

A nonogram solver.

NonoLogic (play demo video)

NonoLogic is a nonogram solver.

  • Back end is Python, front end is HTML/JavaScript/CSS, connected by Flask-hosted web services
  • Doesn't guess -- it proceeds entirely by deductive logic.
  • If further progress on a puzzle cannot be made without guessing, it stops.
  • I could potentially put this app on my website but I just haven't gotten around to it. In the mean time, the code is available on my GitHub (see the link to the left).