Last updated: Feb 25, 2025

Embracing AI at Tilt: Beyond Code Generation

Written by James Garrett · 9 minutes read

Embracing AI at Tilt: Beyond Code Generation

Empower’s engineering team is redefining what it means to use “the best tools” in a world where AI isn’t just a novelty, but a game changer. In his latest post, James Garrett shows how innovative AI tools are transforming on-call support, QA, and code reviews—taking the timeless principles of the Joel Test into the future. Dive in to see how early adoption is turning everyday challenges into competitive advantages.

In 2000, Joel Spolsky published his famous “Joel Test” - a simple 12-point checklist for evaluating the quality of a software team. One of the key points was “Do you use the best tools money can buy?” As Joel noted, even minor frustrations from underpowered tools add up, making programmers grumpy (guilty here) and unproductive. In 2025, this principle remains as relevant as ever, but the landscape of “best tools” has dramatically evolved. We’ve seen tools like Rider compete with Visual Studio, Microsoft .NET become platform agnostic allowing developers to use Mac or Windows, and now even more change with the emergence of AI.

At Empower, we’ve embraced AI not just for code generation (which has been widely discussed), but across our entire development lifecycle. Our CTO and cofounder has started an internal AI Ambassadors group. This group consists of at least one person from every aspect of the business— Data Science, Backend, Web, iOS, Android and more. We have been tasked with evaluating a wide range of tools, and more importantly monitoring how AI is being used across teams and sharing those learnings early and often with our own teams to increase adoption.

One example of using the best tools has been our early partnership with Factory , where we served as a beta partner for both their core platform and their Review Droid product. This early adoption and close partnership has allowed us to provided early stage feedback on these tools to better serve our engineering needs, while giving us a head start in integrating AI across our development workflow.

On-Call Support: From Exception to Investigation

For engineers, of the most impactful ways we’ve integrated AI is in our on-call incident response process. Almost 100% of engineers will tell you they’re at least slightly nervous when on call, or they’ll lie to you— the outliers are either superhuman or just haven’t been on “that one outage call” which you’ll remember for years to come.

Now, unless it’s a familiar issue, the first thing I do is review our internal run books. If those are not satisfactory, the next step is a prompt such as the following

Embracing AI at Tilt: Beyond Code Generation illustration 1

This has significantly reduced the time to resolution and made both my on-call duties as well as assisting with unblocking release issues less stressful.

QA Engineers: Understanding Impact at a Glance

Our QA engineers have found a particularly powerful use case: rapid impact analysis of a change and its impact across multiple platforms. Historically our QA team has been challenged with time zones, where a USA developer pushes code and someone working Melbourne, Australia time picks it up for testing. Minor gaps in understanding lead to a 24 hour delay. With Factory, the team is now empowered with prompts such as the following

Embracing AI at Tilt: Beyond Code Generation illustration 2

This generally provides a high level executive summary of what has changed. Sometimes you’ll learn it’s a logging only change or change such as creating a new database table that isn’t referenced yet. Other times you’ll learn this change has a larger impact.

Embracing AI at Tilt: Beyond Code Generation illustration 3

This type of prompt is where Factory really shines. We’ve found it extremely useful to trace backend code all the way through client side screens, including older areas of the code base that aren’t always front of mind.

Product Managers: From Questions to Clarity

Beyond our engineering team’s use of Factory, one of the most exciting applications of Factory is helping Product Managers understand complex technical systems.

Instead of scheduling multiple meetings which interrupt developer productivity or diving into codebases they might not be familiar with, PMs can now:

  • Ask natural language questions about how specific features work
  • Generate flowcharts to visualize user journeys and system interactions
  • Get quick explanations of technical decisions and their business implications

This capability has dramatically increased productivity in product development discussions and helped bridge the gap between technical and non-technical team members.

Last, when Factory cannot get a satisfactory answer, you can prompt it for a clean handoff.

Embracing AI at Tilt: Beyond Code Generation illustration 4

Automated Code Review: The Power of the Review Droid

Factory’s second product, the Review Droid is a simple yet powerful tool. Essentially how it works is you add a droid.yaml file in your repository, then provide natural language prompts that get run against every pull request.

Through our early partnership with Factory, we’ve been able to fine-tune our .droid.yaml configuration to create a powerful automated review system. Our experience as a beta partner has helped shape the tool’s capabilities, and we’ve implemented several custom checks that have since become common patterns for other teams. Some key checks we’ve implemented include:

  • Enforcing our coding standards such as file-scoped namespaces for new C# files
  • Validating that Entity Framework queries include necessary navigation properties
  • Checking that strings in database schemas use appropriate varchar limits
  • Ensuring proper implementation of our internal IHaveCreatedAt and IHaveUpdatedAt interfaces so that timestamps in the database get populated automatically

This automated review process helps us maintain code quality standards while staying true to our mission to rapidly work towards making our app better for our customers every day.

Catch and correct any obvious bugs in the code that would cause the code to not function as intended.

This simple command has caught numerous small bugs. One example to help visualize the power of this is if you had the following log message, the droid would quickly catch the mismatch between variant and name. These types of bugs are easy to miss with a human eye, but the review droid does a fantastic job.

_logger.LogInformation(
  'Assigned {name} to experiment variant {variant}',
  variant,
  name
);

The Evolution of “Best Tools”

Reflecting back on Joel’s Test principle of using the best tools, it’s fascinating to see how the industry has redefined what “best” means over 24 years. In my early dev career, the Joel Test was talked about most often with hardware— almost everything chuuuugggeed using Visual Studio + Rider. Now the scales are tipping back to software, with even a several year old MacBook Pro M1 being a beast of a dev machine.

It’s important that companies focus on enabling their development teams to do their best work. I’m excited to see where this goes, given Empower’s dedication.

Looking Forward

As one of Factory’s early partners, we’ve seen first-hand how rapidly AI tools can evolve and improve. Our experience has shown that early adoption and active participation in shaping these tools can provide significant competitive advantages. The key lesson I’ve learned is that AI’s value extends far beyond code generation and it’s not about replacing people - it’s about enhancing human capabilities across all aspects of software development so that worker productivity increases.

The best tools are those that make teams more effective, and in 2025, that increasingly means tools that can think alongside us, helping to bridge gaps in understanding and automate routine cognitive tasks. Joel Spolsky’s principle remains true - we should use the best tools available. The difference is that today’s best tools are smarter than ever before.


About James Garrett

James Garrett

👋 I’m James, a seasoned backend developer with interest in crafting solutions on the C#/dotnet stack, scalability and performance challenges are my favorite. My career in software development has been a combination of startups and Fortune 500’s with startup like cultures. Mid week you’ll find me coding away, but weekends are time for fishing, hiking, boating— anything outdoors!

In my toolbox, JetBrains Rider, macOS, The Azure Cloud platform and of course the best coding language (C#) are my preferred environment. Their intuitive interfaces and powerful features enhance my developer experience.

_While I love software development, I don’t find it particularly fun in a vacuum. The projects I’ve most enjoyed in my career are those where I get interact with a team to solve new challenges— that’s why I love it here at Empower. _

What keeps me excited to come to work everyday is the fact we have a strong team based culture. Almost daily I’ll hop on a call with fellow Engineers or Product Managers to pair up on something. Culture isn’t an accident here, it’s an investment. Twice a year we bring the team together in person to get to know one another, learn what different pods are up to and form relationships.

Connect with James

Keep reading

More in AI