
SEP Blog
We’re curious people by nature. And we love to teach others what we’ve learned. So explore our blog to gain fresh insights from our expertise in areas ranging from culture to AI.
SEP Wins TechPoint’s 2025 Exceptional Employer Mira Award
SEP Recognized as Indiana’s Top Tech Employer, Winning TechPoint’s Prestigious Mira Award Westfield, Indiana – SEP has been named Exceptional Employer by TechPoint at the 26th annual Mira Awards. This award recognizes companies that are developing talent through skills-based hiring…
Read Full Post

The last few years I have been part of a team that is building diabetes management apps for both iOS and Android. Our client partner is a global leader in the diabetes care market. We want our partner to be successful…necessarily we have to understand the constraints that they are working with in order to […]
Read Full Post
Code Analysis: Global State
Global mutable state by itself can make a program harder to work with because instead of having a call tree that’s simply a tree structure, you end up with more of a graph structure. Any given point in the program that interacts with the global state can be effected by any other point in the […]
Read Full Post
Code Analysis: Abstract Data Type
Abstract data types are a pretty well known concept in computer science and software engineering. The concept is pretty simple. If you have something that is complicated, then you can make it easier to deal with by only exposing an API that allows you to safely interact with the complicated component. Of course also known […]
Read Full Post
Code Analysis: Fluid Call Tree
Let’s elaborate on the nature of these call tree diagrams. Consider the following code: void doStuff() { doOtherStuff(); } void doOtherStuff() { init(); final(); } void blah( int x ) { if ( x == 2 ) { function(); otherFunction(); } else { doStuff(); } } Depending on the input for the blah function, we […]
Read Full Post
Code Analysis: Shared Mutable State
My previous post asserts that mutable state can cause a software engineer issues in understanding the program because it becomes arbitrarily hard to understand when two different parts of a program are actually connected. This is also why some sort of run time debugging facility is needed in order to understand some types of code. […]
Read Full Post
Code Analysis: Mutable State
Mutable state gets a bad rap when you talk to pure functional programmers. I don’t think mutable state is inherently a problem, but it does have an effect on your ability to understand a program. So let’s look at what happens when you introduce a mutable reference into a programming language. The problem as I […]
Read Full Post
Code Analysis: Halting Problem
Let’s do a quick digression. I wanted to talk about mutable state, but first I think we should consider the halting problem. The halting problem goes something like this: Halt( program_source, program_input ) { if ( <The program Halts with that input> ) return true; else return false; } // Now assume a hypothetical program […]
Read Full Post
Code Analysis: Introduction
There already exists a significant amount of code analysis techniques out there. I think the existing technologies are pretty useful for tracking some aspects of why a given piece of code can be difficult to deal with. However, I want to add a diagram technique that can be used to describe certain features in programming […]
Read Full Post
Build Better Backlogs Using Behavioral Design
Decisions we make every day are driven by cognitive biases designed to save time and energy. These mental shortcuts serve us well. Marketers have used this knowledge to build successful marketing strategies for many years. Armed with the same knowledge, is it possible for us to build more engaging products? In this video we’ll look […]
Read Full Post