What we actually do

From critical production issues to complex system design

← Back to Home

Software development isn't just about writing code, it's about solving real problems. Here are some technical challenges we've tackled.

Have you ever debugged library code?

Tracking down a bug that only appears in production can be maddening, especially when the stack trace points deep into third-party library code. In one case, we faced intermittent failures where the error originated three libraries deep in a chain of dependencies.

The bug was elusive - it only manifested under specific load patterns and data combinations. We started by cloning all the involved library repositories, setting up local builds, and adding extensive logging throughout the call chain. By methodically tracing the execution flow across library boundaries, we discovered a subtle state management issue where Library A passed a mutable reference to Library B, which then passed it to Library C. Under concurrent access, Library C's operations were corrupting the state that Library A still held a reference to.

The Solution

We implemented defensive copying at the library boundaries in our application code and added thread-safety mechanisms around the library calls. By wrapping the library interactions with our own abstraction layer, we eliminated the race condition while maintaining the functionality. The system has been stable ever since, handling concurrent load without issues.

Is your website going down right when you need it most?

A complex Azure infrastructure with Redis cache layers was experiencing severe performance degradation during peak access times. Response times would spike from 200ms to over 10 seconds, and eventually the application would become unresponsive.

The architecture looked solid on paper - Redis was supposed to handle the caching load, the database was properly indexed, and the servers had plenty of CPU and memory headroom. We dug into performance counters, connection pool metrics, and thread dump analysis. The smoking gun? The default thread pool settings meant only a handful of threads were available to handle user requests. During peak load, requests were queuing up waiting for available threads to make Redis calls, even though Redis itself was responding in microseconds.

The Solution

We adjusted the thread pool configuration to pre-allocate a sufficient number of worker threads based on the expected concurrent load. We also implemented proper connection pooling for Redis and added comprehensive monitoring for thread pool utilization. Response times stabilized at under 300ms even during peak traffic, and the infrastructure could now handle 5x the previous load without breaking a sweat.

Is your database slow?

Probably not. Nine times out of ten, when someone complains about "slow database performance," the database itself is perfectly fine. The problem is the way queries are written and how the data is accessed.

We've seen queries that took minutes to complete - literal minutes - simply because they were missing proper indexes, performing unnecessary table scans, or doing complex joins in the wrong order. In one case, a reporting query was joining five tables without any indexes on the join columns, then filtering the results in application code. The database was working overtime to return millions of rows that would eventually be filtered down to just a few hundred.

The Solution

We analyzed the query execution plans, identified the missing indexes, and added them strategically on the columns used in WHERE clauses and JOIN conditions. We rewrote the joins to follow a more logical order based on table sizes and selectivity. We moved filtering logic into WHERE clauses instead of application code, and replaced several N+1 query patterns with proper JOINs or batch fetches. The result? Queries that previously took 2-3 minutes now complete in under 100 milliseconds. The database was never the bottleneck - it was just being asked to do things inefficiently.

Having a rough time upgrading your stack?

An old AWS distributed JBoss cluster was becoming a maintenance nightmare. The application server architecture required complex XML configurations, custom classloader hierarchies, and specialized deployment descriptors. Operations teams spent countless hours managing cluster coordination, session replication configuration, and troubleshooting cryptic JBoss-specific errors.

The JBoss overhead was adding unnecessary complexity - most of the enterprise features went unused, but the operational burden remained. Deployment processes were slow, resource consumption was high, and finding developers familiar with JBoss specifics was increasingly difficult.

The Solution

We migrated the application to lightweight Tomcat instances. We refactored the deployment descriptors to standard servlet specifications, eliminated the need for complex EAR packaging, and simplified the application to use straightforward WAR deployments. The result? Deployment times cut by 75%, memory footprint reduced by 40%, and the operations team could finally focus on business value instead of fighting with application server configurations.

We'll tell you if your tech stack is appropriate or you're just trying to be fancy

Before we assess your architecture, we need to understand it. We'll start by implementing bug fixes and developing new features using your current stack. This hands-on approach gives us deep insight into how your system actually works - where it shines and where it struggles.

After working within your codebase, we can tell you the truth: Is your Spring microservices architecture genuinely serving your scale, or adding unnecessary complexity? Are those message queues actually needed, or could you simplify with direct API calls? Is your frontend framework zoo (React, Angular, Vue all in one app) solving problems or creating them?

The Assessment

We'll deliver an honest technical assessment based on real experience with your code. If your stack is over-engineered, we'll show you exactly how to simplify - what can be consolidated, what can be removed, and how much cost and complexity you can eliminate. Our goal isn't to impress you with buzzwords - it's to help you build maintainable systems that solve your actual problems without the overhead.

How we work and what we work with?

We're read/write C-family programming languages - Java, JavaScript, C#, C++, PHP, Swift - you name it. If it has curly braces and semicolons, we're comfortable with it. SQL is second nature to us, whether it's PostgreSQL, MySQL, SQL Server, or Oracle.

But we don't stop there. We've successfully delivered projects in languages outside the mainstream C-family syntax. We've built production systems in Elm and developed complex business logic in Clojure. The syntax and paradigm might be different, but good software engineering principles translate across languages.

We work flexibly - either embedded within your existing teams, collaborating directly with your developers and participating in your meetings, or as a standalone unit handling specific projects independently. Both approaches work, depending on your needs and preferences.

Our Approach

Programming languages are tools, and we pick the right tool for the job. More importantly, we can work with whatever you're already using. Whether your codebase is in Java, JavaScript, C#, PHP, or something more exotic like Elm or Clojure, we can read it, understand it, fix it, and extend it. We focus on solving problems, not getting hung up on language preferences.

↑