Staff Analyst
Angi
Feb 2026 – Present
Indianapolis, IN
I build the data pipelines, metrics and experiments behind faster month-end close and higher margin per sale at Angi.
Resume, experience and the work behind the numbers.
Side projects and experiments from outside the day job.
Swipe or tap to pick a path
Hi! I'm an analytics professional based in Fishers, IN. Since 2019 I've been working to deliver impactful analysis and tooling across commercial BI, paid search, experimentation, finance, sales, and customer care data. I like to wear a lot of hats and work cross-functionally because it unlocks the most impactful decisions.
Lately I have been leading the migration of our financial data to a lakehouse architecture, and building AI workflows that make it possible to support more functions than ever before. If you want a numbers person that gets a little obsessed with the ins and outs of your data: I'm your guy.
Hours saved per month via automation: about 400, up from 40, and increasing.
Analyst time spent on ad hoc requests: down from 80% to 30%, and decreasing.
Margin per sale impact: 37% more estimated margin per sale.
Bullets marked ! have a story.
Angi
Feb 2026 – Present
Indianapolis, IN
Angi
Feb 2022 – Feb 2026
Ad hoc work: about 80% to under 30%. Share of analyst time. Other factors also contributed.
Angi
Feb 2019 – Feb 2022
United Airlines
Sep 2017 – 2018
Chicago, IL
Staff Analyst with 8+ years building commercial BI for a B2B sales organization, spanning sales force effectiveness, channel performance, and customer acquisition reporting. Expert in Tableau and Looker with working knowledge of Power BI, backed by advanced SQL and Python. Trusted partner to sales, finance, and executive leaders, turning ambiguous business questions into dashboards and models that drive measurable revenue outcomes.
Visualization: Tableau, Looker, Power BI; Analytics: SQL, Python; Platforms: Snowflake, dbt, Lakehouse
Taylor University, Upland, IN. B.A. Business (Economics, Management & Marketing), May 2017.
Hiring or building something with data? Email Jeff or find me on LinkedIn.
Three stops on the boardwalk: a sports quiz, a movie bracket and a Pokemon fix.
Live
Daily sports trivia. Guess the player from career stats.
Take a shot (Do You Know Ball?, opens in a new tab)Pick actors or movies head to head, then compare your bracket with other voters.
In progress
Newer Pokemon run stronger than old ones. I rebalanced every Pokemon, 1,214 counting forms and Megas, and tested 486 of them in 168,000 battles.
Go insideNewer Pokemon tend to be stronger than older ones. As a Gen 1 child, I find that unacceptable and built a more level playing field.
scroll to see how
Gen 1. Total stats 534 to 548, up 14.
Gen 1. Total stats 395 to 429, up 34.
Gen 4. Total stats 600 to 570, down 30.
Gen 9. Total stats 550 to 503, down 47.
Those are just some of my favorite examples (justice for Butterfree, down with Gholdengo), but it's only the tip of this nerdy iceberg!
Loading 1,214 Pokemon
Average battle power by generation, Gen 1 to 9, for the 486 fully evolved, non-legendary Pokemon. Official: 500, 481, 476, 509, 517, 515, 508, 523, 532. Normalized: 510, 499, 511, 504, 507, 498, 500, 504, 500. The official line dips in Gens 2 and 3, then climbs from Gen 4 to 532 by Gen 9. Normalized stays between 498 and 511.
| Gen | Official | Normalized |
|---|---|---|
| 1 | 424 | 428 |
| 2 | 411 | 427 |
| 3 | 413 | 437 |
| 4 | 457 | 456 |
| 5 | 455 | 441 |
| 6 | 516 | 509 |
| 7 | 470 | 471 |
| 8 | 479 | 473 |
| 9 | 476 | 463 |
Official stats. Average battle power climbs from Gen 4.
Normalized. The climb is gone.
168,000 battles
The line averages the 486 fully evolved, non-legendary Pokemon.
Battle power is an index of how strong a Pokemon fights, not just its total stats.
486 Pokemon. Random 6v6 teams at level 50. 168,000 battles.
Charizard Gen 1
Total stats
534548
Gholdengo Gen 9
Total stats
550503
Win-chance swing
+3.8 points-1.8 points
Normalized removes the generation edge. It overcorrects a little: newer Pokemon end up 1.8 points behind under this bot.
A second play style gives +4.0 official and -0.9 Normalized. That bot is not proven stronger, so read it as a second look.
Win-chance swing: how much swapping one Gen 1 Pokemon for a typical Gen 9 Pokemon changes the win chance of an even matchup.
I tried eight ways to fix it. One became the backbone.
Final: Normalized
Normalized is location-scale plus pieces borrowed from four other methods.