Simon Katz's Work History and Education
This page documents my work history and education.
See Simon Katz's CV for my personal details and an summary of what I know organised by subject.
Wefarm supports smallholder farmers. It provides a farmer-to-farmer network connecting farmers to the information they need, and has recently been connecting farmers with retailers who sell the agricultural goods they need.
I worked on Clojure cloud services, mostly on stories that aimed to increase farmers' engagement with the platform.
My most significant contribution was the bulk of a new service that decides when to send marketing messages to farmers, and what message, if any, to send.
Paired with other developers, passing on Clojure knowledge as part of the process. Introduced the "Clojure reloaded workflow" to the company.
Tech stack included Clojure, Luminus, Mount, http-kit and Redis.
In May 2020 I was made redundant, along with most of my department, as a result of the impact of the COVID-19 pandemic on the business.
A break from work. I learned some music theory and improved my guitar playing. In the latter part of the break, I got back into work-related things. For example:
Learned re-frame and shadow-cljs, and submitted small PRs to help smooth others' learning experience.
Added a layer on top of Emacs's Org mode to improve viewing and navigation.
See separate entries below for details.
Cloud Software Engineer
YouView provides smart set-top TV boxes. I worked on Clojure cloud services that support the display of various types of message on set-top boxes.
Refactored existing services. Improved the design at multiple levels, and made it more visible. Made the services more maintainable and more testable. Increased test coverage from nowhere-near-enough to a good level. When I started, it was difficult, slow, and scary to make changes; when I finished, the code was pleasant to work on and changes could be made with confidence.
Set up various monitoring dashboards and alerts in SignalFx.
Improved performance of message querying by a factor of ~100.
Added new features.
Dealt with bugs and system issues.
Began implementing a new system to replace the existing message system. The new system allows messages to be defined in a more convenient manner and has an asynchronous architecture that better suits variable workloads. Worked on architecture, stories, and the beginnings of implementation.
Tech stack included Clojure, CircleCI, Docker, AWS (eg EC2, ECS, RDS, S3, Athena, DynamoDB, Kinesis), and SignalFx.
Clojure Specialist, Coach and Developer
Part of a small team that supported a large application team in moving towards DevOps-based development.
Working closely with an ops person who was learning software development, developed a set of services and tools to support the collection and use of metrics produced by application services.
Working closely with a support person who was learning software development, produced a tool that allows information about support incidents to be entered in a single place, and syncs information to and from other systems. Previously support staff spent silly amounts of time doing things manually.
Wrote a web client and server app that displays a summary of the department's deployed services. The app highlights differences across hosts and across environments, and allows the user to filter by criteria such as service name, host name, environment, and consistency of versions across hosts and environments.
Produced a template that allows new Clojure applications to be created easily. The template provides a set of standard functionality including setting up logging, dealing with exceptions, providing a health endpoint and making REPL-based development work nicely. Previously it took a lot of work to produce a new app that just did these basics, and most of our apps didn't do everything properly.
Produced universally highly-regarded Wiki pages that explained the design and use of the tools.
Coached developers and Ops people in the effective use of Clojure.
Technologies included microservices, Clojure, ClojureScript, core.async, Reagent, Telegraf, Influx and Grafana.
Developer on the back-end system of a comparison website for mobile phone deals, filling in while a team member was on paternity leave. The system processes feeds that define suppliers' deals, transforming the data in each feed so that all deals are described using the same format. The transformed data is used by the front-end system. Contributed to re-writing an old Ruby system in Clojure and maintaining the old Ruby system. Technologies included microservices, Clojure, Leiningen, Component, Plumatic Schema, Bidi, Liberator, core.async, ClojureScript and Om.
Developed a microservice that obtains tweets in real time from Twitter's streaming API and passes them on to a client. Used a Clojure stack including core.async, HTTP Kit, WebSockets, Compojure, Ring, Cheshire, Leiningen, tools.namespace and Midje.
Coached a development team new to functional programming, getting them up to speed with Scala and core functional programming concepts; also coached on general design and style issues that are not specific to functional programming.
My department ceased to exist as part of a broad range of cost-cutting measures and I was made redundant.
Learnt modern development approaches such as test-driven development, pair programming, web applications, microservices, continuous integration and continuous delivery.
Developer on a system that assesses applicants' eligibility for loans, taking into account legislation and personal circumstances. Technologies included microservices, Clojure, Leiningen, tools.namespace, Midje, Compojure, Ring, Hiccup, Cheshire, Java, Jersey and Jackson.
Developer on an academic publisher's content delivery system. Technologies included microservices, Scala, Scalatra, Scalate, XML and XQuery. Responsible for implementing stories and liaising with business analysts, quality analysts and with other developers. Some element of mentoring client staff to improve their use of TDD and bring in a more domain-driven approach.
An application generator:
Building on ideas developed during my time at Mobile Systems International, conceived and developed a more powerful application generator that takes UML-like formal specifications as input and generates software conforming to the specification as output, building upon a core run-time framework that implements the architecture. The tool is implemented in Common Lisp and makes use of Lisp's meta-object protocol (MOP).
Using the application generator as part of my consultancy work.
For Mobinets, a supplier of software tools and consultancy to mobile telephone network operators, developed a network planning application that:
supports the designing of the fixed part of GSM, GPRS, EDGE and UMTS mobile telephone networks
has a rich data model and produces many outputs relating to the dimensioning and costing of networks
has a graphical user interface that displays nodes and links both geographically using a geodata backdrop and topologically emphasising logical relationships
interfaces with other software via sockets for functionality such as simulation of network traffic, optimisation of transmission and storage to database.
Responsible for all aspects of development from requirements capture through to testing, and liaising with the customer at all levels.
Requirements capture and analysis
Functional specification (object models, events and "domain algorithms")
User interface design
Design and programming
Integration with software modules produced by the customer
Support, bug fixing and small enhancements
Also implemented supporting tools for automatic building and automatic regression testing.
Fulfilled a long-term ambition to travel around the world.
Team leader, technical architect and senior developer on projects that produced tools to support the designing of the fixed part of GSM mobile telephone networks.
Initially a lead developer on a project that developed a network planning tool in C++.
Later, conceived and developed an application generator and used it to generate a network planning tool. This tool was implemented in Common Lisp.
The company's network consultants used the tools to design the Base Station Subsystems of GSM networks, with much greater ease than their previous spreadsheet-based approaches.
Designed and implemented software on a large number of projects, initially with an emphasis on systems software such as compilers and garbage collectors, and later with an emphasis on object-oriented analysis, design and programming. Also spent time on expert systems and their underlying technology.
University College London: BSc (Hons) in Computer Science, 2(i). 1980–1983.
A Levels: Maths (A), Further Maths (A), Physics (A).