Category Archives: Software Development

Why i don’t love schemas

Once, long ago, i thought that schemas were great and that they could provide much value. Schemas hold the promise of declaratively and unambiguously defining message formats. Many improvements would be “easy” once such a definition was available. Automated low-code validations, automagically created high quality, verifiably correct documentation, clearer understanding of inputs, etc. I tried […]

supervisor child startup in elixir

Fact: Supervisors fully serialize the startup of their children. Each child’s init/1 function runs to completion before the supervisor starts the next child. For example, given modules ModuleA and ModuleB that implement both the init/1 callback and this supervisor: Supervisor.start_link([ ModuleA, ModuleB ], strategy: :one_for_one) The ModuleA child process will be started and its init/1 function […]

hypermedia format manifesto

Through my work developing and consuming APIs i have come to value: evolvability over message and implementation simplicity self describing messages over reduced message sizes standards over bespoke solutions human readability over client simplicity uniformity over flexibility I value the things on the right, but i value the things on the left more. evolvability over […]

How i judge software engineers

My kid’s teachers routinely provide rubrics for assignments. At first blush, rubrics are tools to make grading an assessment easier. They are effective in that role. They turn out to be at least as effective at communicating expectations. Readers of a rubric can quickly and easily determine what is important. Recently i developed a rubric […]

Minimum Viable Architecture – good enough is good enough in an enterprise http://redmonk.com/jgovernor/2017/06/13/minimum-viable-architecture-good-enough-is-good-enough-in-an-enterprise/

Web API best practices — forward compatibility patterns

Designing APIs and clients for forward compatibility is the best way to achieve evolvability and maintainability in a microservice architecture. Wikipedia defines forward compatibility as “a design characteristic that allows a system to accept input intended for a later version of itself.” Designing APIs and clients to be forward compatible allows each side of that […]

Comverge is hiring an entry level data scientist. Come help us make energy cheaper, more reliable, and better for the environment.

Comverge is hiring a software engineer. Come help us make electricity cheaper, more reliable and better for the environment.

How to componentize a monolith

Micro-service architectures are all the rage these days. Let’s say, totally hypothetically, that you already have a large code base that has all the pathologies we have come to expect from monoliths. You may think something like “we should break this behemoth up into a collection of components, each of which is comprehensible to mere […]

Services Questions

I recently had a colleague ask me several questions about service oriented architectures and breaking monoliths apart. This is an area in which i have a good deal of experience so i decided to publish my answers here. What is a “service”? A “service” is a discrete bit of functionality exposed via well defined interface […]