Showing posts with label tier 6. Show all posts
Showing posts with label tier 6. Show all posts

Thursday, March 14, 2013

2.40. A Noticeable Lack of Party Favors

Before Mount Hyjal was accessible in present-day
Azeroth, Archimonde's remains decorated Nordrassil

No Pomp Nor Circumstance

There was no great fanfare on Ater's last day in the guild. No great celebrations were thrown, no group screenshots taken, no speeches given by the guild leader on Ater's many contributions to Descendants of Draenor. We didn't go around a circle and exchange stories about the fact that Ater was perpetually in a state of getting his bearings in Azeroth, often lost on the other end of a virtual continent as our raid team made their way inside an instance. We'd arrive at Molten Core and he'd be in Silithus, trying to figure out where he had made a wrong turn, then laugh and joke about it as he slowly found his way back. Nobody reminisced about the time Ater finally acquired Thunderfury after running Molten Core for entire an year. No one waxed melancholy about the fact that it was Ater himself who gave Descendants of Draenor our guild motto: "If we don't die, we win." No tributes were paid. No write-ups were written. Nothing was done in honor of Ater and the impact he had on us.

There was no fanfare on his last day, because nobody knew what day it would be.

Even in his ability to be a great leader, providing guidance to anything from playing a warrior, leading a group of misfits, dealing with people-related issues, or designing a new interface for a time-tracking application, Ater remained humble upon introspection. He avoided making a "Leaving the Guild" forum post because he didn't want it made into a big deal. To him, good-byes where too finite and depressing; he looked upon them as next steps in life, new beginnings rather than endings.

At least, this is what I like to believe Ater thought.

I can't be certain, because Ater never spoke of his true feelings toward the guild during his time spent here. Perhaps he saw it as a great experience; a chance to make a lot of new friends and work together to slay internet dragons. Perhaps these feelings soured as time went on, as the roster transmogrified from those Vanilla folks he considered close friends, to handfuls of strangers that no longer saw the game as he did. In his Vanilla days, Ater lived and breathed World of Warcraft, raiding, and our guild -- it nourished him and coursed through his veins. When not planning out Molten Core, Blackwing Lair, and the like, he was pushing groups of players through Zul'Gurub, practicing, refining, challenging himself and his team. As The Burning Cruade was tapering off, his hours outside of the 25-Man progression raid were similarly spent in Zul'Aman, seeking to lay claim to the Amani War Bear. And each week he came-up snake eyes. His current group wasn't like the one he stampeded through Zul'Gurub with. It lacked the finesse, the polish...

...the means to give a damn about doing it well.

Descendants of Draenor defeats Teron Gorefiend,
Black Temple

Teron Gorefiend

It had been several weeks since the death of Archimonde in our moment of shocking triumph. Having wrapped up Hyjal Summit, we returned to Black Temple to excise more bosses from the instance. Next on the to-do list was Teron Gorefiend, a zero margin-of-error linchpin like Archimonde and Magtheridon. I took some solace in the knowledge of our startling success with Archimonde's defeat, but working on Teron quickly began to eat away at the team consciousness. In the same manner as the those bosses who came before him, Teron Gorefiend could only be killed if each and every player took responsibility for their effort and contribution. Lacking any control over which players were chosen by Gorefiend as a sacrificial lamb, however, allowed patterns to once again emerge revealing who had done their homework and who had lied. Shadowy Constructs made short work of the raid if the sacrificial player was a scrub. All we asked was that players practiced until they got it right. For some, all the practice in the world was not enough.

On the other side of the screen, Ater had fully settled in to his new locale in the heart of Chicago, Illinois. As with all new jobs, the first few weeks take up the most of your attention: coordinating, getting to know new teammates, new responsibilities. And Ater, being the "people person" that he was, put every waking minute of time and energy into his newest challenges in the windy city. That meant less time in-game, just as it had been when he came to work alongside me. The only difference was that, this time around, I was no longer present during the day to pester him. To hound him...

To remind him that he was needed.

We had discussed an exit strategy informally. Months earlier, staring off his apartment balcony, I'd broached the topic; not much had come of it. There was going to be a final day for Ater and I needed to start planning for it. Yet, I lingered in denial. I looked at the tanks I had, amid a drought of new applicants, and none of them inspired me to throw a party. But, rather than take control of the situation and recruit with greater aggression and focus, I languished. I let it slide. I failed Ater, but he was too nice to say anything that might hurt my feelings.

Soon, Hanzo. You're running out of time.

Descendants of Draenor defeats the Reliquary of Souls,
Black Temple

Reliquary of Souls

Three weeks of insufferable work on Teron Gorefiend led to an eventual kill. Ater was all but completely silent in raids by this point, only to make calls during each attempt as needed -- that bit of communication that was essential to every efficient team. With the death knight's wheel spinning once again, we had a decision to make on our next boss. Should we approach Gurtogg Bloodboil and his complex mechanics involving a "dance" of the three closest players every few seconds? Or should we turn our attention to the Reliquary of Souls, a disembodied head of three faces crying out in desire, suffering and anger? Blain opted for the Reliquary, so we moved through a graveyard of ghosts, making our way down to the ribcage-shaped prison that held the disembodied head in place.

Reliquary of Souls was a three-phase fight. In each phase a new essence took control of the head, spinning it like a top until the new face gazed upon the raid in contempt. The Essence of Suffering was first, a phase that negated all healing. Tank control was handled by measuring proximity to the head. Since we had no way of keeping the tank alive, each tank in the rotation would take a few steps away as their health dropped to dangerously low levels. A new tank would then step in, automatically shifting the Essence's gaze to the new tank. Phase two was the Essence of Desire, sapping the raid's mana, eventually preventing healers from keeping the group alive. The gimmick with desire was dependent upon a warrior's Spell Reflection. With great precision, a coordinated team of interrupters needed to stop her Spirit Shock, which would daze the tank. If timed correctly, the tank would then be free to Spell Reflect her Deaden back on to the floating head, increasing damage taken by the boss, allowing us to close the deal before mana was completely expunged from the raid. The window of time between the interrupt of Spirit Shock and the Spell Reflect of Deaden was tight; it required all parties involved to be exceedingly sharp. And even in this expansion, where classes were beginning to take on more roles than what was held classically in Vanilla, defeating the Reliquary of Souls depended on one and one class only: warrior. Without a warrior main tank, you didn't just "suffer" through a handful of deaths and then go on to pull off a messy kill...

You wiped.

The final phase was the Essence of Anger, a balls-to-the-walls blow-every-cooldown-you-have phase, in which the boss slowly built up a spell reflection that would inevitably cause us to kill ourselves if the fight ran too long. Meanwhile, aggro on the floating head was by standard tank abilities alone -- no taunts were allowed. Every time aggro shifted to a new player, the head would Seethe, causing it to grow in size, power, and attack speed. The burn needed to be a controlled burn; at no point could we allow any one player to overtake the tank's quickly diminishing threat.

The Suffering phase was a non-factor, freeing up all of our efforts to pour into Desire. The raid delivered a one-two punch, thanks to Blain's careful coordination of rotating interrupts via the rogues, and Ater shouldering the responsibility of reflecting Deaden. It wasn't long before we'd made progress into the final phase, letting a barrage of damage pour into the screaming head of Anger. On May 18th, 2008, Descendants of Draenor defeated the Reliquary of Souls, only one week after defeating Teron Gorefiend. We were now 5/9 in Black Temple, more than half-way through. So close to the end, Illidan became more of a reality with every approaching raid.

We lined up in front of the fallen head, their three faces now quiet, eyelids closed over angry, suffering eyes. When the aesthetics fell into place, I took our screenshot of the Reliquary of Souls, then promptly uploaded it to the forums that evening. I stuck to my guns on the promise I made to Ater, stressing how important our team progress was in Black Temple, and how important each and every one of the contributing raiders were to our continued success. I was determined to acknowledge their efforts and remind them that while we (much like the Reliquary of Souls itself) may have changing faces, we remained a family and a team. I needed to tell them. I needed to convince them.

I needed to convince myself.

The Reliquary of Souls was the last boss that Ater defeated as a member of the 25-Man progression team in Descendants of Draenor.

Thursday, March 7, 2013

2.39. The Different Guild

"Archimonde the Defiler"
Artwork by Jim Nelson

Archimonde Anxiety

I have reason to believe that Xanax was invented as a result of the Archimonde encounter.

Since Blain's return to leading in full force, we saw a tremendous turnaround in raid progression. Serpentshrine Cavern and Tempest Keep were systematically blown apart, and the first boss in Mount Hyjal, Rage Winterchill, was one-shot with zero preparation. Bosses that followed -- Anetheron, Kaz'rogal and Azgalor -- were all pushing up daisies. To ensure our continued momentum, Blain switched gears and diverted us to Black Temple. High Warlord Naj'entus was our first victory there, and I earned my five minutes of fame dominating the damage meters during our execution of Supremus. But our rocket thrust was now in jeopardy. Blain was comfortable with the amount of people now in possession of their PvP trinkets, which meant it was time to return to Hyjal Summit, and wrap up the only outstanding obstacle:

Archimonde.

I dreaded the return to Hyjal Summit because after stripping Archimonde of all his bluish tint, his ret-conned Eredar lore, his pixels and sound effects and 3D model animations...I knew exactly what he was: A zero margin-of-error linchpin encounter. Linchpins like this caused anxiety to nearly strangle me, ever since Magtheridon fell to DoD's raiders a year earlier. Our strengths would be diminished, while our weaknesses would float to the top. Team jell was now much lower in importance on the totem pole. In its place stood the "personal accountability" obelisk of doom, wherein each player had to take their survivability into their own hands -- or ensure the death of all of us.

No carrying.

No covering for one another.

No room to excuse lag or timing or your add-ons or your slow-ass computer.

Everybody performs...or everybody dies.

As with linchpins before this, the typical tactics of a guild leader weren't an option. Continued failure couldn't result in kicking these players to the curb, bringing in another round to replace them. We had invested heavily in our 25-Man Progression team by this point, many of whom were well-geared -- starting from scratch because a certain person who "didn't get it" wasn't going to work. I had to be proactively correcting the roster's issues, not be a victim to it. Rather than wait for someone to complain that they used their Tears of the Goddess, but "lag got them", I went to the roster ahead of time, spoke to each player individually, and got a rundown of their Internet provider, general stability, problems they'd experienced with latency in the past. I even went so far as to check which players were using a wireless router, many of whom were none the wiser on its detrimental effects to real-time streaming online games.

In today's age, where Netflix usage is commonplace and every third house has an XBox 360 playing Call of Duty online, this may not seem like such a big deal. In 2008, however, working on Archimonde via a wireless router would sign our death warrant. Packet loss was an inevitability on hardware in those days. Even with players that claimed to have never experienced a router problem in their life, I still politely insisted that they cut over to a hard wire. It would only take one player death for this to end poorly. One lag spike, one moment of wireless latency that would bring it all crashing down. Each vocalist in my choir had to be pitch-perfect. The potential for any one single player to be the cause for a wipe left me perpetually wound up, a constantly bouncing ball of nerves. My mind begged for release but would gain no such relief from prescription meds.

"Legend of Mount Hyjal"
Artwork by Trent Kaniuga

Twilight of the Gods

April 13th, 2008, was an otherwise ordinary Sunday. Discussion on the guild forums circulated around various topics: whether or not win-trading was taking place in arenas, a link to a "Teron Gorefiend" simulator available on the web, and a group of players leaving MySpace for a new site that was gaining popularity identified only as "Facebook". Chief among the posts, however, was a discussion title "Archie", including videos and references to the Elitists Jerks forums. DoD actively engaged in discussion and assessed valid strategies. Of primary importance was the acquisition of PvP trinkets: our backup plan to break Archimonde's fearbomb...if you had the good fortune to be heading uncontrollably towards Doomfire. The healthy debate of strategy, what would work, what we should try, how we should solve problems on-the-fly was impressive.

They were aligned. Constant, consistent success.

---

As we huddled near some Night Elf architecture, buffing, flasking, and eating food, Blain gave us the 411.

"We can do this tonight."

Inside my brain, confidence was at war with skepticism. My inner realist kept picking away at me. Archimonde was a brick-wall boss, a linchpin with no room for error, a verifiable guild-killer. Every failure would be the result of a single man or woman fucking up, ruining the chance for the rest of us. Handled incorrectly, this would cause bitterness to impregnate the team. Animosity would incubate, eventually blooming into hatred and disgust. An undeniable stench of meh would fill the room. Left alone, it would infect the team and devour us from the inside out. Signups would fall off. Players would stop talking to one another, replaced by sarcasm and cheap shots.

"Oh, great. Him again. Thanks for ruining our raid night on Archimonde YET AGAIN. I love having my time wasted."

Eventually, the guild would collapse as its insides were eaten out. The risk was very real, the question was, would my guild be ready to rise above that?

In a final act of encouragement, Ater wrapped up the strategy by reiterating the guild motto he coined many moons ago -- one whose meaning was more relevant now than ever, due to Archimonde's Soul Charges:

"If we don't die...we win."

Descendants of Draenor defeats Archimonde,
Hyjal Summit

Famous Last Pull

The first few attempts allowed us to get a feel for timing on fears and Doomfire calls. Most important was the first-hand experience on the air blast, and at what part of the arc was most appropriate to use Tears of the Goddess. Too soon, and the buff would wear out before the player landed. Too late, and they'd become a fine red paste across the green plains at the Hyjal Summit. Misjudging either way produced the same result: falling to one's death, or "cratering". Each death allowed Archimonde to generate a Soul Charge, which he would then burn on us and wipe the raid.

While players adjusted to the timing of air burst and perfected use of their Tears, Blain observed the position of the groups. He spread us into the four prongs of a fork, with the tanks and melee at the base, and continued to refine this placement as the hours ticked away. Ater kept communication flowing back to the raid, alerting us of air bursts, and with each attempt he improved his own positioning, avoiding the air burst himself.

As expected, the mechanics were unforgiving. Doomfire wreaked havoc on us, especially during fear-bombs. Players cratered as they struggled to match their timing with their latency. The chain reaction of player-death-to-raid-wipe was alarming...and blunt. My fear was realized. One simple mistake was all it took. As soon as a player died, Archimonde's Soul Charge took out massive groups of players until it was a wipe. By the fourth and final hour, we completed a total of twenty-two pulls, and not one attempt had whittled the boss's health down below 50%.

"Last pull", Blain announced in Vent.

We arrived at the tail end of the raid. I did not want us to leave with ours tucked between our legs.

---

Ater's infamous countdown in Vent began, thus signaling the start of our twenty-third and final attempt of the night. I moved into position along my fork prong and began to light the giant Eredar up with Vampiric Touch and Shadow Word: Pain. A bluish beam of shadowy energy followed my DoTs, flaying Archimonde's mind. Doomfire etched its way across the plains without remorse, seeking targets to ignite; I side-stepped the fire and continued my shadowy barrage. Images of Battle.net forum posts began to flash in the back of my mind:
"DoD fails at raiding, disbands. LOL"
"Zanjina an embarrassment to Deathwing-US. Worst player on server."
I snapped out of it and refreshed Vampiric Touch to keep the mana flowing back to my group. Ater held Archimonde tightly in position, calculating small, surgical shifts to avoid air bursts. A tremor totem hit the ground, and moments later, Archimonde dropped a fear-bomb. Melee shifted for half-a-second in terror, then instantly returned to their duties...the tremor totem mitigating the bomb. My chat window lit up in bright purple as Melkezadek's' macro spammed me.

[W From] Melkezadek: FEAR WARD Cast: You're next!!!!

I moved towards Cyrant, hit him with a Fear Ward, and and spammed my own macro.

[W To] Neps: FEAR WARD NOW ON CYRANT...YOU ARE NEXT OMGWTFBBQ!!!!!!

Calm. 

Focus.

The air burst struck me and I was flung in to the air.

Hold.

Hold.

I reached the apex of the arc.

......Now.

I spammed Tears of the Goddess and drifted back down to the grass, rushing back into position. Cyrant dropped his tremor totem, moments before another fear-bomb, safe with my Ward shielding him from the chaos.

"Ater's air bursted."

"The warlock's are cut off from Doomfire."

Blain called out to Eacavissi, warning him of the impending fear bomb. A handful players along the ranged forks began running in random directions as panic and tension continued to smash its fist at the door.

"STRAIGHT. BACK." Blain reminded everyone. Running in a zig-zag pattern would only make Doomfire more vicious as it snaked its way toward targets. Staying in a straight line was the only way to keep it at bay, running along the length of the fire, rather than towards the tip. The fear-bomb hit; melee and tanks remained safe and in control.

"Oh, sweet Tremor." Blain said with relief.

I dropped from Shadowform and began putting whatever minuscule heals I could on the the players eating Doomfire. Houla dropped dangerously low, his health-bar a tiny green sliver on my screen. One more tick of damage would end him...along with this final attempt. I slapped on a renew and continued to look for players that needed help.

Suddenly, Blain called out. The moment of truth had arrived.

"OK, Bloodlust in 3, 2, 1...Go Bloodlust. GO. All out."

"Even healers. DoTs..." called Neps.

"Everybody DPS, there is no healing" added Breginna.

Lightning bolts flashed around the great Eredar, and the sky faded to red as night elf wisps bore down on him. Every raider blew every cooldown they had, all DPS, all working together, all alive....

At last, one single blinding explosion erupted in a shower of arcane energy, and Archimonde's battered armor lay at our feet. I couldn't believe it. Other players in the raid joined me in disbelief.

"...four fucking hours??" asked Dalans, as if to say how is this even possible?

Disbelief hung suspended while reality slowly set in. One of the most difficult bosses in The Burning Crusade, killed in only one night of work. Visions of the weeks we wasted on Gruul and Magtheridon, making the same mistakes over and over, were quickly blurring over. We had become so used to the same failures, the same excuses, that it was hard to digest what an accomplishment this truly was. Our crutch had been the profound claim that we took anyone to raids; that we felt everyone deserved a shot at end-game content. That mission statement wasn't wrong, but simply incomplete. We had failed with an incomplete vision for so long that an accomplishment like this seemed unreal.

But it was very real.

"Setting players' expectations of what our unified goals were" had finally taken hold of this group of players. Keeping people accountable, disallowing them from making excuses for failures, proactively solving problems before they manifested...it was like a different world. A different game.

A different guild.

Tuesday, February 12, 2013

2.34. The Lemmings Are Marching...

Descendants of Draenor defeats Rage Winterchill,
Hyjal Summit

Rage Winterchill

My heart was racing. I frantically scanned the landscape for anything that could kill me, but wasn't certain exactly what to look for. Twenty-four players were in the instance with me and seventeen of them were dead. My eyes darted down to the damage meters. I took a deep breath, trying to remain calm, keeping my DoT rotation as maximized as possible. Being unprepared was unsettling. Our attention had been a laser for the last five weeks, burning a focused beam of light squarely through Kael'thas Sunstrider and his council. The encounter's nightmarish complexity of tactics and coordination dominated our thoughts and invaded our dreams. With all of our energy poured into his defeat, we spent little time on anything beyond his lifeless body...yet he lay dead at our feet only an hour earlier. In any other case, this would be cause for celebration and an early night off.

Blain was uninterested in ending the raid early.

We still had a long road ahead. Two full tiers of content were now crushed under our boots, leaving us to tread the final path through tier 6. And there was a deadline to keep.

The enormous skeletal necromancer continued to lose health, while Blain kept the raid calm -- kept me calm. Panic was not an option, regardless of your level of preparedness. Be calm. Focused. Do your job. Stop calling things out. Winterchill's health melted away while I hopped out of Death and Decay, my PvP trinket granting me the ability to break out of his ice-block. A few moments later, the lich burst apart in a flash of light.

We had one-shot Rage Winterchill, the first boss of tier 6 content. The last time we had one-shot a boss on the first pull was Broodlord Lashlayer, third boss of Blackwing Lair. Vanilla. Two years earlier. I was beginning to think that the new raid mentality was sinking in. The guild's expectations of fun were starting to align with ours. Constant, consistent success. And for the first time in months, I felt like Illidan was once again squarely in our sights. Our confidence remained intact.

---

This surge of confidence catapulted me back into examining the issues that plagued the guild. Long had I been a slave to the roster, with its constant fluctuations and myriad of faces giving me varying degrees of commitment. Step one was already behind me: set expectations clearly and concisely, so there was no room to misinterpret who we needed each night in raids. In order to shift the power the roster had over me, I needed to grow the pool further, riding on the steam of our recent completion of tier 5. If I could find away to recruit more efficiently, more effectively -- I might be able to put a stop the never-ending excuse factory:

"I don't want to raid anymore."

"Sorry, I'm grounded."

"I don't want to bring my rogue, I want to change my main to a shaman."

"Oh, I thought the raid was cancelled?"

"Man, Nip/Tuck is on!"

It amazed me how a guild like Elitist Jerks could pull it off for an entire expansion (or longer) with a fixed roster -- how do you compel a player to show any sense of loyalty and dedication to the guild? I remained baffled, spending far too much time in-game trying to keep the roster from falling apart. Our new schedule demanded that we raid every Friday and Sunday without excuse. I needed to ensure that Descendants of Draenor held good on that promise. So recruitment continued. I spent hours sifting through useless Battle.net forum posts, cluttered with other guilds begging for new players; leaders in the same boat I was in. Trying to find a single player looking for a new guild was almost entirely a wasted effort, as the reams of forum topics were nothing but officers cast into the same leaky boat as I.

An item from the game Unweb,
written by Hanzo

Gimme The Cache

I needed to come up with a new recruitment strategy, something that would save me hours of sifting through Battle.net forums looking for "that one priest" or "that one druid" that could potentially close the door on the excuse factory for good. I had been toying with the idea of writing a parser in CFML that would scan the Battle.net recruitment forums for users, trying to pick out only what we wanted: players looking for a guild. This automated process could save me hours of recruitment time as it tossed aside the miscellaneous posts of other guilds sharing my pain. But there was a concern with my approach.

Fetching web pages, parsing their HTML, and performing very specific business logic on the content seemed too expensive for CFML to handle. I attempted on-the-fly parsing once before in a web-based game I called "Unweb". Inspired by Diablo II, Unweb let you type in a URL which was converted into a "monster" that you would go on to slay for items and gold. It was a pretty fun exercise to explore application development and allowed me to grow as a programmer.

In practice, however, my architecture was short-sighted. Unlike a typical website driven by static pages of unchanging content, Unweb needed to create content dynamically on each and every page click. To further complicate this, a key step in the process -- the act of reaching out to a specific URL and parsing its content -- was what we in the industry refer to as a blocking call: a part of program execution that must pause and wait for a completion flag before continuing. This pause varies in time because the data is somewhere else, and can only run as fast as the slowest result.

Confused? Let me give you an example of how horrible this particular decision would've played out if it were in WoW. Pretend for a moment that all of the character data for your toon doesn't sit natively in the WoW game client, but rather exists in its entirety in only one place: the WoW armory on the Battle.net website. So while you are playing the game and decide you want to open your character panel to review your stats, the entire game locks up the minute you press the "C" button, as the game client pauses to fetch info from the website. Can you imagine how frustrating this would be if it were the case in real life? Constant pauses and lock-ups, just to look at your character info?

This is what was happening behind the scenes in Unweb, each and every time someone tried to play the game.

The strain of many hundreds of concurrent users playing Unweb caused the webserver to hang while blocking calls waited for URLs to return website results. Alas, this design was the oversight of an amateur developer attempting a large-scale game which didn't lend itself well to HTTP. My lack of experience afforded me no strategies to mitigate its poor performance. The flawed design of Unweb essentially turned what was supposed to be a fun web-based game into a inadvertent load testing tool; the more players that piled on, the quicker the web server buckled.

With the Battle.net forum parser idea in the back of my head, but lacking a real strategy to solve the performance issue, I turned to the one person I knew that could offer me new insight: Ater.

---

"Cache the results", he said to me, biting into a sandwich. Luggage was piled up behind his kitchen table, as he prepared for his upcoming move to Illinois.

"What?" I replied. His simplicity often overwhelmed me.

"You're thinking about it the wrong way." Ater elaborated, "You're approaching this like you've got a search interface, and when you enter in a URL, it's going to go out to Blizzard's forums and parse them live. Right when you click the submit button."

I never told Ater about Unweb, but In that one sentence, he successfully described Unweb's architecture, thereby pointing out the flaw in my original design.

"The search interface will hit a cache, not Blizzard's live forums. You schedule a task for the parser and it'll run in the background, on some fixed interval. Y'know, say every thirty minutes. It'll scan the forums on its own, collect up the data, dump it in the cache...a local database on your server. Then your search interface queries the cache. Simple."

Everything was just so damn simple to Ater. Simple, and one-hundred percent correct. In his succinct explanation, he re-designed my idea and solved the problems I experienced with Unweb. Now, it was not just a CFML-based forum parser, it was a fully-fledged spidering engine.

A screenshot of WoW Lemmings, a guild
recruitment tool, written by Hanzo

Rebuild Your Guild

I went to work immediately, implementing Ater's suggestions. That entire weekend was spent coming up with the initial architecture of the spider. It would run in three passes. The first pass would scan Blizzard's guild recruitment forums, looking for posts, slurp them up, and dump them into a database. On the second pass, the engine would follow the URLs to those forum posts from the database, extracting the bodies of the actual post itself. This is where the meat was: where a player would talk about themselves, what server they were on, what class they played, and where they hoped to find a new guild they could call home. It was the third and final pass where the spider would analyze the content in the forum post, scoring it on such things as: Can I determine a class (ie. Priest, Hunter, Rogue), a server (ie. US-Deathwing), a server type (ie. PvP, PvE). Additionally, was there an armory link provided? Could I use it to process the player's gear? The more information that was provided, the better the score. This scored database of parsed data became what Ater called the "cache" -- a collection of pruned posts comprising only players looking for guilds and nothing else.

I slapped on a web-based interface to allow users to search the cache, and released the new website into the wild, watching the cache grow. Every thirty minutes, another set of players would show up:

"Priest LF new Guild"

"4/5 Hyjal Resto Shaman LFG"

"Tankadin looking for raiding guild"

It was working. Not only was it incredibly cool, but I actually started seeing people I wanted to contact immediately...just while testing the app! The days of wading through hundreds of forum posts were fast becoming a distant memory. Now all the players needing a guild would come directly to me, through a simple search interface. Towards my web site they headed, single file, awaiting their fate. They hoped to be saved, to be plucked from their death march and placed into a new raiding home. It was in that instant that I came up with the name of my new guild recruitment tool:

WoW Lemmings.

A place where guild leaders and recruitment officers could go to find the masses of lost players seeking a new home. A place to rebuild your guild.

On February 13th, 2008, after briefly discussing the tool with Gurgthock, I announced WoW Lemmings on the Elitist Jerks forums, hoping to solicit feedback. Initial response was extremely positive; I received numerous suggestions and tweaks that I used to improve the app further, including the ability to scan other forums outside of Battle.net: MMO-Champion, Wowhead...anywhere recruitment forums resided. WoW Lemmings served (and continues to serve) me, as well as countless other guild leaders, shaving significant time off our recruitment hours. Thanks to this tool, I was able to once again get a handle on recruitment without it dominating all my waking hours. Slowly, eventually, I grew the roster back to a healthy pool of progression raiders (and fillers). And like so many times before, I again had Ater to thank. His simple insight into changing my approach toward the app's architecture turned it from a doomed load-testing tool, to one of the most stable and self-reliant systems I've ever assembled.