Program Interfaces, Patterns and Anti-patterns

Computer science is embarrassed by the Computer.

Alan Perlis

One of the most important roles of senior engineers and architects is to define the boundaries between programs. This must be done thoughtfully, with a firm understanding of what is being abstracted, and foresight of evolving needs.

Unfortunately, these skills are typically learnt the hard way. This course is our attempt to rectify that, providing a tour of program interfaces, patterns and anti-patterns through the lens of a system that participants build themselves in and between classes.

We cover many specific API designs in detail, but the ultimate objective is broader: participants should leave with greater confidence that their own API designs will stand the test of time.


  1. Data Modeling
  2. Data Model Implementation
  3. Network Endpoint Design
  4. Network Endpoint Implementation
  5. Data Formats and Serialization
  6. Supporting Binary Protocols
  7. Graph Query Endpoints
  8. GraphQL Implementation
  9. Command Line Interfaces
  10. CLI Implementation
  11. Library/Module Design
  12. Module Implementation and Packaging

Course project

To make the ideas covered in this course more concrete, participants will build out a system for hosting code snippets, along the lines of Each class will involve discussion of principles interleaved with application of those principles to the system implementation. The project may be completed individually or in small groups, and any mainstream language can be used for all but one class (which requires JavaScript).

Assumed knowledge

This course assumes 1-2 years of work experience as a software engineer with some exposure to a mix of program interfaces.

Schedule and price

Program Interfaces, Patterns and Anti-patterns will next run 7:00pm-8:30pm Mondays and Thursdays, 6 May - 13 Jun 2019. The total price is $1800.

Apply now Still have questions? Contact us.

This class was all about expanding my toolbox and vocabulary for interface design. Programs have been written for half a century; this means that when I’m faced with a programming problem, odds are that there is a pattern or best practice out there that I can take inspiration from. Putting names and faces to them allows me to go for exactly what I want rather than fumbling around and making costly mistakes.

Tiger Shen, Software Engineer at Braintree Tiger Shen, Software Engineer at Braintree