CSW Leagues Season 20: The Season I Finally Won

Saturday, Sep 12, 2026 | 17 minute read | Updated at Saturday, Sep 12, 2026

TOC (for the article)

  • Prologue
  • Part 1: The Games
    • Pre-endgames
      • Exhibit A
      • Exhibit B - Not Good Enough
    • Hope Scrabble
    • MI Atrocity
    • Mistake, Mistake, Mistake!!!!
  • Part 2: The Race for First
    • The Decider
  • Afterword
  • Appendix

Note: This blog post is split into 2 parts: 1) analysis of some interesting games, and 2) the race to first.

Fair warning though: This’ll be a long one!


Prologue

Going into Season 20, I wasn’t expecting anything particularly special. Other than a quick look at the 6-vowel 9s, I’d barely done any word study leading up to the season. Plus, I had a rather mediocre result in Season 19, finishing 9th with a 7-7 -185 record, just barely scraping by. 

However, this season, something changed. Somehow, everything was going my way.

This is the season I finally won.



Part 1: The Games

Pre-endgames


Exhibit A

In this position, I’m down 14 against jellomochas (Alec Sjöholm), holding this rack.

Having spent several minutes looking for bingoes hooking (FRUG)S, I had convinced myself that no bingoes fit there. Then, as I briefly scanned the PE already on the board, I spotted my best play: 4F (PE)CTISINg# for 80, surging me into the lead. 

Fast forward to the pre-endgame, though, I’m down 11 after Alec’s bingo of ASEITI(E)S#.

My first thought (and what I ended up playing) was 15L OYER. This was unfortunately a large mistake, reducing my win percentage by 18.3%. Here, Macondo strongly prefers 12L RONA#. After RONA#, Alec’s bingo chances are significantly lower, while my average score for the next turn is substantially higher than after OYER. In fact, upon deeper analysis, Macondo suggested that RONA actually wins with the DJLL pickup that I’ll get, given that DI were the final 2 tiles in the bag. 

Most of Alec’s plays here allow me to start off the endgame with 15L TYDE# for 44, scoring more than enough to win even if I’m caught with the J. If Alec plays something like 15N LA, blocking plays down row 15, I still have the rather sneaky O8 JETL(AG) for 42, again scoring way too much for Alec to overcome.


For both permutations of DI in the bag.

In the actual game, after I drew DJLL, Alec played 13B NO, setting up his O in the TWS lane with the O(NO) hook. From my point of view, I could see that he only had 1 bingo available: N4 (g)LADIOLE#. I spent quite a while looking for a reasonable block before eventually settling on 6K (E)LD for 4.

Unfortunately, after making a large mistake the previous turn, I managed to follow it up by completely missing my best play: 12N JA#, scoring way better, shedding the J and still blocking GLADIOLE#. While this didn’t affect the outcome, it’s still a medium-sized mistake and did cost me some spread.


Exhibit B - Not Good Enough

In this position, I’m up 64 against Xadreco, holding this rack.

Thinking I’ve pretty much iced this game, I played H1 AVI(S)O for 24 without much thought. While this play still wins about 95.9% according to Macondo, it actually was a medium-sized mistake.

My best guess as to why AVISO is bad lies in what Xadreco could do after AVISO. For example, a worst-case 6-tile overlap bingo to ANTIENT# would easily score over 90, and if my draw after AVISO is clunky, I could still lose the game. Another possibility is that Xadreco could have a hard-hitting bingo ending in A, such as 1A HEKETAR(A)#. 

Here, Macondo prefers I3 E(N)VOI for 18, which attempts to block some possible bingoes, while also reducing Xadreco’s bingo scores. Another hidden benefit of ENVOI lies in its sneaky front R hook for RENVOI. By keeping the R, I get first dibs at using the spot if Xadreco were to bingo.

Unfortunately, just like in the jellomochas game, ENVOI would have won given that EHJRK were the actual tiles in the bag (drawn in that order). Even with his flexible rack of ACEERT?, Xadreco’s bingoes wouldn’t score enough to outrun H1 JAR(S) for 42, reaping the benefits of the aforementioned R(ENVOI) hook.

In the actual game, after my EHJR draw, Xadreco played the crushing CREATEs for 100, while I was forced to play (C)HEER for 42. After his outplay, catching me with the high-scoring J, I wound up losing by 16.

What I found most unfortunate was that I had played almost perfectly prior to AVISO, making only two small mistakes. While I had a way lower MI than Xadreco, this one seemingly small mistake effectively cost me this game.


Hope Scrabble

In this position, I’m down 81 against MGI (Lukeman Owolabi) and running out of time.

There are no good bingo lanes left other than the C and U of CUB. Desperately needing a bingo to hold on, I tried looking for any fish that could have even the slightest chance of winning, with AEIIIIMOR unseen. After some looking, I saw that if I dump an E and draw an A out of the bag, I would threaten 3F (U)NREASON for 70.

So, I played 12C (SAX)E for 11, and miraculously, I drew the A. Macondo initially approves of my choice here. However, the problem is that it’s using simulation here, meaning it assumes that Lukeman will make his top equity plays that shed his I’s and don’t score much while leaving UNREASON open, something a player of Lukeman’s caliber wouldn’t do. 

In fact, after running the pre-endgame solver, it determines that there are no winning pathways in this position, with the best play for minimizing spread being B1 EON. 

Even if Lukeman doesn’t block the U and I draw the A, (SAX)E# still loses as Lukeman will play either 9G ROM or REM if he has the M, or 9G REO if he doesn’t, simply outscoring my bingo.

Still, if I were in a similar position in the future, I may still go with the same strategy, essentially playing hope chess and hoping they’d screw up. I’d definitely consider trying fishes like this against weaker opponents who are less likely to detect threats like this.

In the actual game, Lukeman wisely blocked UNREASON with 3F (U)M, securing him the win.



MI Atrocity

I’m in a tough position this turn against tonyleah, down 1 point and holding this rack.

Unsure of what to do here, I ended up playing the rather braindead K4 DYE for 18, keeping the rather awful CGIX. This was a large mistake according to Macondo, which preferred I11 (TO)GE# for 6, cleverly setting up the X on my rack. 

On the very next turn, I was faced with yet another tough position.

Here, I made the genuinely awful play of 3L (H)EX for 26, reducing my win rate by a whopping 21.6%. Not only had I completely whiffed the nice disconnected play of D7 EXC(ID)E(D) for 52, I had also once again missed the possibility of setting up my X, this time with I11 (TO)G, setting up the sneaky EXCITE hooking TOGE# for the next turn. 

Heading into the pre-endgame, I’m leading by 2 holding this rack.

I very quickly saw my bingo here: E4 NICTATE for 72. Instead, I chose to play 4K (DI)T for 6.

I correctly chose to pass up the bingo, as looking at the unseen (ACEFINST?), it is very likely that Tony would have winning out-bingoes in response. When I was actually going through the possible draws though, I realised that I don’t really hit many bingoes in multiple spots. The N gives me 2E ENACTING and 14I ANCIENT, and the blank would also give those two plus many more. However, every other draw either yields nothing or only bingoes in 1 spot. After some thought though, I couldn’t really think of anything else. Thus, I just went with it, hoping for the best.

While Macondo really likes (DI)T, the problem is that once again, it’s assuming that Tony will make his top equity play rather than plays that make sense strategically in this position. In fact, after running the pre-endgame solver, it concludes that 2F CATTIN(G) is best, blocking as many of the bingo lines as possible, and gunning for a quick out next turn holding the flexible E, losing whenever Tony either bingoes or has something high-scoring overlapping CATTING.

Meanwhile, after running the pre-endgame solver on (DI)T, it concludes that it only wins whenever I draw a bingo in two spots (aforementioned N & ? draws), while Tony has no playable bingoes.

In the actual game, I miraculously drew the blank, meaning my rather significant mistake here went unpunished. After Tony’s I14 ACETIN, his best play, I went out with zINCATE for 70 to win by 55.

This was unfortunately my worst-played game this season, with an awful 5.4 MI. Missing the X setup twice along with other strategical mistakes essentially doomed my MI.


Mistake, Mistake, Mistake!!!!

I’m down 67 against shafiquet, holding this rack.

My best play here is B8 GA(Z)ELLEs for 84. Me, not knowing the word, instead just quickly played what immediately came to mind: M4 GALiLEE for 75. This was unfortunately a large mistake - and a preventable one too! Even if I don’t play GAZELLES, I still had a way better bingo in the same spot: the common word ALLEGEs for 82. While it’ll still be a small mistake, it’s still way better than the 7% I lost from playing GALiLEE, my first large mistake this game.

After GALiLEE, shafiquet exchanged and I’m now holding this rack:

Two plays immediately came to mind: N9 EMOTER and D9 Q(U)EME#. One of them turned out to be optimal, and of course, I chose the wrong option: QUEME#, thinking that it was more worthwhile to shed the Q. Macondo wasn’t particularly impressed though, suggesting that QUEME# is significantly worse, racking up my second straight large mistake.

After QUEME#, shafiquet bingoes with TIpUNAS# to go up by 33.

Here, I made another bad play: O12 RORT#. There’s not much to say here, this was just a large board vision oversight on my part. Perhaps it was from me playing too fast, but I completely missed the parallel plays to QUEME# on column E. In fact, in this position I had the very savvy E9 I(N)ROAD for 35, winning 9.0% more often than RORT#, my third straight large mistake.

And believe it or not, we’re not done here! I missed another play in the same spot next turn, compounding a total of 4 MI in just 4 turns.

After DIKA#, I’m still down by 7, which was quickly made larger with shafiquet’s play of 9H (S)I(N)E.

However, this was a huge break for me. Somehow, SINE loses them a mammoth 70.4% win percentage.


Given the unseen (shafiquet’s POV) of ACINOOTYY, one possible threat for him to deal with is the Y scoring spot on 11E, where plays like 11A COO(E)Y could prove devastating in such a close game. As you can see from the image above, Macondo’s top play here is initially 12D (M)I for 4, suggesting it wins 100% of the time. 

However, upon deeper analysis with the pre-endgame solver, it determines that the best play is actually a sneaky fit of 9G EO(S)I(N) for 29. 

Honestly, I’m still not too sure why EOSIN is so strong here. My best guess is that this play not only scores a lot, but also leaves the K8 square open, allowing him to slot his S there for another 26 points in the endgame. 

In fact, with NY being in the bag, EO(S)I(N) would’ve been a winning play. My best sequence after EO(S)I(N) is A(Z)OTI(C) followed by C(O)O(E)Y, which loses by 1.

(M)I, on the other hand, only wins 48.61% of the time, a far cry from the initial 100%. From what I understand, I would oftentimes be able to play something on row 7 like 7C TOYO or 7B COATI, or something on row 12 like B2 CO(MI)TY or G12 YIN. All of these plays, depending on what I draw, prevent shafiquet from playing EO(S)I(N) or EO(S)I(N)E in the endgame. The row 7 plays also draw outplays next turn.  

So while (S)I(N)E doesn’t lose nearly as much win percentage as 70.4%, it is still a sizable mistake, and a big break for me.

(M)I and (S)I(N)E after running pre-endgame solver

In the actual game, my endgame rack was ACIOOTY, and I immediately put down 11A COO(E)Y for 43, securing me the win.

While I by no means played well in this game, especially with my 2nd highest MI this season of 4.9, I benefitted from shafiquet’s huge late-game blunder, stealing a probably undeserved win.

It was starting to feel like this pattern of getting away with awful mistakes would end up defining my entire season.



Part 2: The Race for First

Three days into the season, kfraley was leading with an 8-3 +750 record. I was right behind him with my 7-3 +289 record, followed by jellomochas (6-2 +240) in third. In order to win the season, I needed to win my remaining 4 games, while both kfraley and jellomochas had to lose 1 or more games. If both kfraley and I won our remaining games, he’d likely leapfrog me in the standings as he has a way better spread tiebreaker. As I was leading in all my remaining games, all I could do now was pray that both of them would lose games.

The next day, I completed two more games and brought my record to 9-3 +493, temporarily overtaking kfraley. While jellomochas had lost a game, bringing his record to 6-3 +136, kfraley had still not completed a game yet.

At this point, it was really just the three of us with three losses. All that mattered now is who could sustain it. 

Since my game against ather was practically over (100+ pt lead), my game against gharp started to feel like a “decider”, almost. Even if kfraley and jellomochas lost another game after this, if I lost to gharp, kfraley would once again have more than enough spread to overtake me. 

The Decider

My game against gharp starts off relatively uneventful, but I am able to take a 43 point lead after a few turns. After my D7 B(U)LLER# for 16 (which was a medium-sized mistake), padding my lead to 59, I saw my possible bingo of DORADOS. After he bingoes with 13A CRISTAE for 79, I do indeed get down DORADOS to stay one step ahead, for now.

Sometime after DORADOS, as I was just casually checking the standings, my heart skipped a beat. kfraley had lost a game.

Now this looks good. All I had to do was maintain my leads against ather and gharp. But surely, that one loss would be enough for me… right?

Apparently not.

The next morning, as I was once again checking the standings, I couldn’t believe my eyes. kfraley had lost again and was practically out of contention. It was at this point where it truly felt that regardless of what I did, I couldn’t lose.



My ongoing games at that point

From there, while I continued to apply scoring pressure while holding the blank, gharp stayed close behind, holding the other blank and eventually bingoing with sTRIDER for 79, going up by 1.

In this position, the 3 plays I considered were 11C J(E)E for 20, 14J JONE(S) for 28, and H1 E(R)GON# for 21. And somehow, I once again managed to pick the worst of the three options: ERGON#.

My reasoning for playing ERGON# was that given the unseen of AAACEFIIINNNOOPPSY, I thought gharp was quite likely to have something hard-hitting after JEE or JONES overlapping STRIDER. In hindsight, I think I may have overestimated how often gharp would have something large like OPACIFY there, which influenced my decision to block. I reasoned that there weren’t many bingoes through the O and N of ERGON#, so it’ll be quite safe. 

However, I couldn’t have been more wrong. The issue is I’m still keeping the J, and if gharp does bingo, I’ll likely not have any strong responses, leading to a loss. Plus, the J is a rather clunky tile overall, and keeping it only hampers my scoring prospects for next turn. If I had played JEE or JONES, I’d have kept a far superior leave, so even if gharp bingoed or played a high scoring 5, my odds wouldn’t be too bad for drawing a game-winning bingo. In fact, Macondo suggests that on average I score significantly higher, and that I’m almost guaranteed to bingo after J(E)E compared to E(R)GON#.



In the actual game, I actually dodged a big bullet as gharp missed his bingo of N(O)NIONIC, which likely would’ve won the game. Instead, he played N3 CONIN for just 18, leaving 2 in the bag.

I’m now only up 2, holding this rack. My first thought was 14J JEFE(S) for 31, but after looking at the unseen of AAIINOPSY, I quickly realised that this opens a lane for otherwise unplayable bingoes like PAISANO. After quite some thought, I went with 13I PEA for 33. Safe to say, I was very pleased postgame to see that PEA was by far my winningest play. In fact, Macondo suggests that gharp is a lot less likely to bingo after PEA compared to these other plays.

The pre-endgame solver also strongly approves of PEA, suggesting it only loses when I draw IY.

In the actual game, I drew PS out of the bag. After gharp’s play, I immediately placed down 4G k(O)PJES for 28, knowing that gharp has no path to victory, with his out scoring nowhere near enough.

A few hours later, as I was looking at my ongoing correspondence games, I realised that my game with gharp had disappeared. I immediately went to the CSW Leagues page, and sure enough…

Clinched.*

It felt… almost surreal. Yet, I did it. I was overcome by joy, to say the least.

*AnitaCH was down in quite a few games



Afterword

I never expected myself to be writing this.

When I first joined the CSW Leagues in Season 2, I started in Division 6, paired with strong players like merlion (Tony Sim), tonyleah (obvious), and RonanD10 (Ronan Dance). At that time, I was nowhere near as strong of a player as I am now, and my “goal” was simply to survive the division. Instead, I went 11-3 +742, finishing 2nd just behind merlion. I couldn’t tell you how lucky I was. Out of the 5 people in the promotion zone, my MiAV was the worst at 4.3, and I averaged less than 1.5 bingoes per game! I was carried to Division 5 by sheer, undeserved luck.

Going into subsequent seasons, my goal had shifted slightly. Now that I’d proven that I could survive, I wanted to see how far up I could climb. I got all the way to Division 3 in Season 5, before finally hitting a roadblock. I was quite content, though. I never thought I’d be good enough to compete with the absolute best anyway. It truly felt like I had found the division I belonged in. However, 2 seasons later, I broke free, and by Season 9, I was in Division 1.

At this point, my MiAV had stabilised at somewhere around low 3s to high 2s, and my goal shifted once again: don’t relegate. When I was relegated in Season 10, I wasn’t particularly upset. I wasn’t supposed to be in Division 1, anyway.  

So when I re-promoted in Season 14, my goal stayed the same: survive. Instead, I finished 11th, which normally meant relegation. But once again, through some absurd luck, someone in Division 2 just so happened to drop out. Against all odds, I had survived Division 1 yet again.

Over the next few seasons, things started to change. In Season 16, I finished 6th with a 9-5 +87 record. In Season 17, I got even closer - 3rd with an 8-6 +227 record. In Season 18, I came 2 blown endgames away from winning, finishing 7-7 +313, but, more importantly, my best-ever MiAV at 2.4. That was when I realised that perhaps, I did have a chance at winning this. 

I did well not to bring my hopes up too high though, and after my Season 19 performance, I figured my transient little hot streak was over.

I guess not.



Appendix (stats!)

Let’s take a look at the stats though.

Blanks per game: 1.29

MiAV: 2.9

Missed bingo turns: 3 (2 word knowledge, 1 playfinding)

Suboptimal bingo turns: 10 (4 word knowledge, 6 playfinding)

Lost endgame points: too high (count them yourself if you’re interested…)

1.29 blanks per game is rather absurd. During many of these games, it genuinely felt that I’d play a suboptimal move, only to be bailed out by the blank. My MiAV of 2.9 doesn’t help my case much. While it’s rather solid, it’s still a far cry from my 2.4 in Season 18. Many of these mistakes came either in the pre-endgame or endgame, and I was lucky they mostly didn’t affect the outcome. While I’m quite pleased that I found most of my available bingoes, most of them were either high-prob or common words, and quite a few of them were suboptimal anyway. As for my lost endgame points…? Well let’s just say some things are better left untouched. 

I was, by no means, the best player there. Yet, I won.

But as they say, sometimes, it’s better to be lucky than good.

CSW League Season 20 Recap: A Second Chance

© 2020 - 2026 Woogles.io

🌱 Powered by Hugo with theme Dream.

About the Woogles blog page

Welcome to the Woogles blog! There are three types of articles here:

  • Blogs: Small articles about feature releases, tournaments, and other happenings. More of a “news” page.
  • Guides: In-depth guides to Woogles features
  • Articles: More in-depth blog articles. Maybe we’ll combine these with the blog.