Backend software engineer

I build reliable services and explain the engineering behind them.

I am Cody Morterud, a senior software engineer based in Michigan. My work centers on backend systems, distributed workflows, cloud services, storage reliability, and codebases that remain understandable as they grow.

Engineering Focus

Backend Systems

Building .NET Service Fabric and gRPC systems, Java Spring Boot REST APIs, AWS services, storage infrastructure, and deployed TypeScript services.

Distributed Reliability

Owning on-call systems, tracing failures across service boundaries, preserving state consistency, and reducing noisy alerts.

Real-Time Product Systems

Designing server-authoritative WebSocket applications where clients send intent, servers own truth, and live state stays off the database critical path.

Pragmatic Cloud Deployment

Shipping small but real systems with Docker Compose, Caddy, HTTPS, Azure VMs, private PostgreSQL, deploy scripts, migrations, and smoke tests.

Engineering Leverage

Improving test suites, CI pipelines, diagnostics, automation, queued persistence, analytics, and design documentation so teams can move with confidence.

Technical Breadth

Beyond production backend work, I have studied and built across lower-level systems, networking, security, compilers, machine learning, and high-performance computing.

Operating Systems

User-level thread scheduling, context switching, mutexes, condition variables, virtual memory, copy-on-write, page tables, swap, and page replacement.

Networking

Distance-vector routing, BGP and SDN simulations, Mininet topologies, autonomous systems, router namespaces, and protocol failure scenarios.

Security & Cryptography

AES, PBKDF2, HMAC verification, elliptic-curve arithmetic, modular inverses, point compression, and applied security exercises.

Compilers & Analysis

LLVM passes, reaching-definition analysis, liveness analysis, fuzzing, delta debugging, datalog, and statistical debugging.

Machine Learning

Q-learning, decision trees, bagged random trees, trading strategy evaluation, market simulation, CNNs, autoencoders, and data visualization.

Parallel Computing

MPI-style collectives, CUDA list ranking, Chapel terasort, memory allocation, performance scripts, and cluster-oriented workflows.

Web Systems

Flask and SQLite applications, REST-style APIs, React frontends, static deployment, search-oriented service pages, and a basic HTTP server.

Writing

Writings on software engineering, algorithms, security, distributed-system resilience, and software design.

  • Building Mass Arena

    Introduction I recently built Mass Arena, a no-login real-time multiplayer browser game. The idea is simple. You pick a nickname, join an arena, eat pellets, gain mass, absorb smaller players, avoid bigger players, and try...
  • MPI Collectives Are Communication Schedules

    Introduction MPI collectives look simple from the outside. MPI_Bcast(buffer, count, MPI_INT, root, comm); MPI_Reduce(sendbuf, recvbuf, count, MPI_INT, MPI_SUM, root, comm); MPI_Allgather(sendbuf, sendcount, MPI_INT, recvbuf, recvcount, MPI_INT, comm); The project I worked on implemented several of...
  • TeraSort and the Cost of Moving Data

    Introduction TeraSort is a sorting benchmark. At small scale, the interesting part is the comparison function. At cluster scale, the interesting part is data movement. The project I worked on used Chapel to sort TeraSort-style...
  • Distance Vector Routing and Distributed State

    Introduction Distance vector routing is a routing algorithm where each node only knows about its neighbors and the costs advertised by those neighbors. The project I worked on simulated a network of nodes running Bellman-Ford....
  • Parallel List Ranking with OpenMP and CUDA

    Introduction List ranking is the problem of assigning each node in a linked list its distance from the head of the list. For example, suppose the list is represented by an array of next pointers:...
  • User-Level Threads and Backend Services

    Introduction A user-level thread library implements threading without relying on the kernel to schedule each logical thread. The project I built exposed thread creation, yield, join, mutexes, and condition variables. The interesting part was not...
  • Builder Pattern in C++

    Introduction The builder pattern is the usage of a public static inner class to facilitate construction of objects with many member variables, especially of the same type. The key advantages of using the builder pattern...
  • Single Responsibility Principle for Functions

    Introduction You’re writing a function. When should you break the function up? Is this function too long? Who cares? This may be a little bit of a subjective topic, but in my junior opinion, a...
  • Spring Retry Aspect Oriented Programming

    Introduction Let’s say you have a microservices architecture, where the failure of an unknown system can cause the failure of your system, paraphrased from Leslie Lamport. This means that errors, or bad responses from other...
  • An Introduction to Hidden Markov Models

    Introduction A Hidden Markov Model, or HMM is a special case of a Bayesian Network. In the Bayesian Network representation above of a first-order HMM, there are three hidden states, and three observations. \(A\), \(B\),...
  • Diffie Hellman Example with Python

    Introduction Diffie Hellman key exchange is a method of constructing a shared secret between two parties. A shared secret is something that can be used as a key to conduct symmetric encryption, such as AES....
  • Genetic Algorithm Example in C#

    Genetic Algorithms are used to solve optimization problems where there exists a function to evaluate the fitness of a particular potential solution. For example, finding the value of a random bitstring given a fitness function...
  • Factory Pattern in C++

    The factory pattern is part of a class of design patterns called creational design patterns, and the point of the factory pattern is to remove the explicit instantiation of a class out of a user’s...
  • Dependency Injection in C++

    This website is named after Dependency Injection because it was the first design pattern I was introduced to in my career. The usefulness of Dependency Injection is in that the implementation of a class is...
  • RSA Encryption and Decryption Example by Python

    RSA stands for Rivest, Shamir, and Adleman. The most common usage of RSA is the cryptosystem, one of the first asymmetric cryptosystem. By asymmetric, I mean that the key to encrypt and the key to...
  • Integrating GPG with Git on Ubuntu Linux

    Over the course of 3 years studying Computer Science, I have made heavy use of Bash and Git. Just last semester, I took a course called Introduction to Cryptography where I learned about secure systems,...
  • The First Blog Post

    def say_hello(): print("Hello everybody!") say_hello() #=> prints 'Hello everybody!' to STDOUT. Welcome to my blog! I hope you can find something useful here. I am just starting out a blog to connect with other people...

subscribe via RSS