About Me

My name is Steve. I am a Principal Engineer at Relativity and an Adjunct Professor of Software Engineering at DePaul University.

My primary area of responsibility at Relativity is the storage system behind RelativityOne, Relativity’s cloud-based software-as-a-service e-Discovery product. I have designed and implemented a number of components in both the structured (SQL) and unstructured (object / file) storage backends. Before Relativity, I worked in the financial industry for 15 years, primarily for the financal research firm Morningstar. I am a CFA charterholder, but I rarely use these skills professionally nowadays.

At DePaul, I teach two courses: SE 480: Software Architecture I and SE 457: Service-Oriented Architecture. I have been teaching at DePaul since 2017.

For more about my professional history, please visit my LinkedIn profile.

I have blogged on-and-off since 2004. Over the last 15+ years, I have published a number of blog post series and projects on this website. I also have a number of open source projects on GitHub.

Recent Blog Posts

Practical Bazel: Building Multiple Workspaces in CI
Practical Bazel bazel
Published: 2022-10-18
Practical Bazel: Building Multiple Workspaces in CI

For most Bazel projects, I strongly recommend using a single Bazel workspace per source code repository. However, it can be occasionally useful to nest multiple workspaces within a single repository. For example, when I’m writing Bazel rulesets, I will often create test cases that contain own workspace with a slightly different configuration in order to test various workspace-level configuration settings for the ruleset, while maintaining a root workspace which is the primary workspace for the ruleset.

Read more...
Practical Bazel: Use a Single .bazelrc With Multiple Configurations
Practical Bazel bazel
Published: 2022-10-17
Practical Bazel: Use a Single .bazelrc With Multiple Configurations

Bazel users commonly need to manage multiple different configurations when building and testing software, such as:

  • A configuration that is used by developers on their own PCs, which often has debug mode turned on
  • A configuration that is used by the continuous integration (CI) default build and test pipeline, which often builds in release mode
  • A configuration for generating a tagged, version release, which often has stamping enabled
  • (Perhaps many more)
Read more...
Practical Bazel: Implementing compilation_mode in Rules
Practical Bazel bazel
Published: 2022-10-13
Practical Bazel: Implementing compilation_mode in Rules

As developers know, virtually all compilers support the notion of compilation mode, e.g.. whether to compile the code in debug or release mode. In Bazel, this concept is built natively into the build system itself. When compiling software using bazel build, one can select a compilation mode using the --compilation_mode (often shorted to -c) flag.

Read more...
Practical Bazel: A Starting CI Pipeline
Practical Bazel bazel continuous-integration
Published: 2021-09-14
Practical Bazel: A Starting CI Pipeline

This post describes a pattern for implementing a continuous integration (CI) pipeline using Bazel. This pattern is my starting point whenever I set up a new Bazel-based project in CI, after which I add any project-specific pipeline customizations.

This pipeline is purely about the CI (build to release) stages of a pipeline. A full continuous delivery (CD) pipeline, which includes deployment, will be discussed in a later post.

Read more...