What I learned this week: Providers & Self-Signed Certificates

I would say that about once a month I have a client or coworker sending me an email that looks like this and asking “what do I do?”

SelfSignedCert has expired
SFDC Expired Certification Notification

I remember getting my first one of these and panicking, and the documentation available for admins with little knowledge of single sign-on is poor. I am pretty sure that we have all found the answer via the Answers section of Salesforce’ Help, as opposed to actual documentation.

I have kept a link on hand to share for just this occasion (it’s here, in case you need it).

Fast forward a few years, and I’m studying security and identify more in-depth than I have in the past, and much like data skew, that involves learning the correct terms for what used to sound like jargon.

As the link above to Salesforce’s help article states, this Self-Signed certificate is most commonly used for Single Sign-On settings, but…what does that mean? As with anything else, stating the purpose or cause of something doesn’t always answer a person’s question. Many people much smarter than me have rightly pointed out that if you cannot explain a concept to a child, you do not truly understand that concept. And Salesforce’s Help Articles aren’t always great for that level of explanation.

So let’s start with the basics: Single Sign-On.

If you work for a company in an office, you may already experience this everyday. You log into your computer, and doing so logs you into other company services – an extranet, your inbox, etc. To varying degree, the idea is in the name – you sign in once to multiple platforms.

Ultimately this works because there are two entities working together to allow this to happen.

The Service Provider is the system you’re being logged into secondarily – let’s say JIRA. This is the platform that is requesting your login credentials. Normally this request looks like a login screen, but for single sign-on the whole point is that you bypass that screen. So instead of asking YOU, it asks the system you’re logging in through.

This initial system is the Identity Provider. It is helpfully passing along your credentials to the system that needs the information.

Salesforce, as you can imagine, can be both. And the self-signed certificate is sort of like your global permission slip. And like a permission slip it needs to be updated every once in a while.

“But I don’t have single sign-on enabled!” you cry.

Well sure, that makes sense. That means that Salesforce may not be a Service Provider in your org.

Have you installed any connected apps, though? Many connected apps walk you through a setup process that includes a handy UI that takes on the heavy lifting of setting up your API connection. During this process, some of those apps may create a certificate, which you’ll see by reviewing your connected apps link to that certificate. Sometimes these will take care of themselves – the third party companies you’re working with KNOW about this, and they plan accordingly, but at the least, you’ll know.

And if you’ve enabled Salesforce as an Identity Provider, even if you’re not using it that way…well, there you go.

Long story short: if you don’t remember setting this up, it’s very unlikely to cause issues, but it’s also very easy to update. Bookmark that link, and next year when you get that email, you’ll be ready.

 

What I learned this week: Data Skew

Disclaimer: In the spirit of full transparency, I learned about data skew a little while ago. But the whole point is “what I learned this week.” In some cases, “this week,” just refers to this week in time…like…last week, last month, whatever.

My first brush with NPSP was as a consultant. I remember very clearly thinking that some of the features would have been very handy for my B2B sales staff back in the day. In a lot of ways it was love at first sight. I still get prickly when people say mean things about it…

[Insert about a half hour of me looking for the best option for a “Don’t talk to me or my son ever again” meme before realizing there could potentially be a better use for my time.]

That said, the first time I started getting error emails at about 2am was ALSO around this time.

You know, this one:

Message: “First error: Update failed. First exception on row 0 with id 001……………; first error: UNABLE_TO_LOCK_ROW, unable to obtain exclusive access to this record or 1 records: 001…………….: []”

And I was flummoxed. What does that even mean? Why are you locking anything? Who said that you needed exclusive rights? And what does this have to do with merging records?

For a while I sort of…ignored it. Honestly it would run again at some point, right? It rarely happened more than once for the same record.

Sometimes I would have dozens of them. Usually right after some major data change or something. I suspected they were related, but I had other pressing concerns, and eventually everything would be sorted.

Over time I filled in the blanks. Unable to lock row meant that whatever the code was trying to do, it couldn’t get update access to the record.

If I spent more than 30 seconds on it, it made sense. A record cannot be edited by more than one person at a time, so why would it make an exception (ha ha – get it?) for custom code.

And then again, for a while, I left it at that.

Enter Data Architect Trailmix, stage right.

A super important part of the large data volume considerations that are discussed in the data architect arena is the concept of data skew. And as I read about it, I was taken back to a project early on, a move from the Starter Pack and a bucket model to NPSP with Household Accounts.

This client was looking to upgrade to the new success pack. They had been using the bucket model for YEARS – more than 50,000 contacts all inelegantly shoved into this single Account called “Individual.”

It was difficult to report on things. It took forever for the record to load.

I knew that there was a correlation, but I could not, especially at that time, explain what it was. I had a sense that having to many child records was a bad thing. I didn’t know what to call it. And I wouldn’t know, until years later, that that very situation was what caused errors during the overnight batch processing.

Data skew occurs when we have too many child records, plain and simple. It has an impact on loading time (you try showing a record and querying tens of thousands of records at one time), reporting, and…yes, automation.

It doesn’t exactly help me fix the errors all the time. Sometimes it’s just bad timing, and not even because of data skew. But putting a name to something makes it more accessible, less concerning.

Carry on, NPSP. Carry on.

What I learned: TDX19

We’re just going to leave the elephant in the room right where it is, so…make peace with that.

I had the great pleasure to attend TrailheaDX last week, Salesforce’s smaller developer conference, in San Francisco. It was my first TDX, but I certainly hope it won’t be my last.

For those who have never been, it is WAY smaller than Dreamforce. Dreamforce spans over blocks and blocks, from Moscone to local hotels, and it’s not unheard of to walk close to a mile just to get from one session to another. TrailheaDX is not like that. It takes place entirely in Moscone West – granted, all three floors, but comparatively, it’s easy.

It also is repetitive. That has some negative connotations, I realize, but hear me out.

Dreamforce takes place over what I’m confident is half of the city, and very few sessions are alike. If you miss a session because you’re on one end of the event, and the session is on the other, then that’s it. You can hopefully catch a recording later.

TDX had some – not all – but some sessions repeated in the theaters, so if you missed it one time, you might be able to catch it again. Not all of the sessions worked that way, but enough of them that I was able to safely select one session over another because I knew I’d get a second chance later during the event.

There was still all of the energy and good vibes of the community; I still got to see a lot of my friends and coworkers.

And this was the first time in years that I simply attended the event. I didn’t volunteer or serve on a panel or do anything but go to sessions and try to absorb, and I’m glad I did. I learned quite a bit while I was there, and I came away energized enough to sit down and write this. Which is no small feat.

I had a bit of an epiphany, as well, that I’d like to share now.

As a self-proclaimed polymath, I have struggled with how best to run this blog. I wrote about it already, but I still never answered my own question.

So I’m going to unshackle myself a bit. Moving forward, I’ll be sharing things I learn – random, and untethered to a single category. Because that’s what’s interesting to me. Sometimes it’ll be Salesforce related, or technology related, or project management related, or…whatever I learned.

That’s what I’m taking away from TDX19, and I’m already looking forward to next year.

Live from Dreamforce

It’s Wednesday – halfway through Dreamforce, and I’m returning from a day and evening of volunteering, playing Dungeons and Dragons, and having dinner with some of my absolute favorite people.

I look back on my first Dreamforce, and I look at where I am today, and I still can’t believe it. How is this my life? How did I get so lucky?

Not to say that it comes for free. I work hard, and I work a lot, but I enjoy my work, and part of my career is experiencing this event (and others like it) every year.

One of the first things I was asked to do this year was fill out a gratitude card – what am I grateful for?

This. All of it. I’m just grateful.

Online Proctoring: My Horror Story

I enjoy my creature comforts. I like working from my couch some days, with blankets all bundled around me, feet propped up, and a cup of coffee nearby. Most importantly I like all of those things in my own house. If offered an opportunity to get coffee at a fancy coffeeshop or make myself a cup of Chock Full O’ Nuts at home, I’m going to pick home. Every time.

So when I learned that certification could be done from home, those many years ago, I signed up immediately. The first online proctored exam I took was not actually for Salesforce. It was my Marketo Certified Expert exam, and I took it in December after signing up for a training course that came with a voucher. I figured it couldn’t hurt. And given that December is prime time for crap weather, I was excited, despite the “it’s not awesome” warnings available online. How bad could it be?

Well…

First my webcam just stopped working. It had been fine, doing its thing, and literally just before it was time for me to sit down and show my stuff, it stopped.

Kryterion was super chill. Their support team rescheduled my exam for an hour later, and I ran out to get a new webcam. Done.

Fun fact: new webcams are better than old webcams. The resolution on my new one was too good, in that it couldn’t match my face because the old picture I had on file for facial recognition didn’t have as high a resolution.

No worries. Super awesome support team reset that. Face recognized. Typing recognized. It was time to take the test. Aced it.

When it came time to take my first Salesforce exam, I figured I had worked out the kinks and could handle anything.

Well…

I just couldn’t log in! After about three or four attempts, calling support, and still not being able to access my exam, we discovered there was a server error on their side. They told me they would reschedule my exam (for free, again, thank you super awesome support team!) and call me when I would be able to log in.

I made myself a drink and watched an episode of the Office. I was halfway through my vodka-cran when they called and said I could get started. Aced it.

I took a few onsite exams after that. Switching it up, I guess. But the testing location was not a huge step up from the headaches I’d had at home, so it was back to online for me.

Testing with a Mac is different. Testing with the new MacBook Pro (with its nearly universally despised Thunderbolt 3 ONLY connections) is actually impossible. Literally. If your external webcam (which you have to use) is connected via a dongle (which is has to be), the feed won’t go through.

For my Pardot exam, it took us about 2 hours to troubleshoot. If not for the super awesome support team at Kryterion, I would still be in the fetal position upstairs. I ended up needing to use the gaming computer to take my exam. Sweet graphics, anyway. I still had to stop like five times to adjust where the camera was or the microphone volume, or whatever.

I’m really not trying to scare you off. Legitimately not my purpose here. But I want you to KNOW what you’re getting into, if you go the online route.

First of all, your test may go way smoother. I had at least two that went off without a hitch. But just in case, keep these things in mind:

  1. If you have a brand new MacBook Pro, just plan on taking the exam onsite or with a cheap-o PC you pick up at Best Buy for like $200.
  2. When they say that you should buy their specific webcam…consider it. I didn’t. I had to buy one last minute, and I just wasn’t going to reschedule. But they have one that works, so you might as well.
  3. Download Sentinel and do your “biometric scan” in advance but not TOO in advance. Like two or three days beforehand is fine. But if you sign up for the exam in June to take in November, just wait.
  4. Be prepared to spend some time getting INTO the exam.
  5. Be prepared to be interrupted DURING the exam to fix something.
  6. Lean heavily on the support staff there. They really are awesome, really patient, and they have the answers.
  7. Be NICE to the support staff. Their job sucks. They just watch a bunch of under-dressed, maybe showered, work-from-home people take exams and get mad all day. And they can help.
  8. Maybe make a drink beforehand?
  9. Definitely eat beforehand – it might be HOURS before you get another chance.
  10. Be prepared to retake the exam. After fighting with computers and getting interrupted and feeling like NOTHING YOU DO IS WORKING, you might not be in the best place to take an exam…so be patient with yourself, too.

Maybe I’m a glutton for punishment, but I’ll probably continue doing the online proctored exams. That is how much I hate driving in snow.

 

DnDF17 Episode 2: Everything must be dwarf

Previously on DnDF17…

The members of Bacon Ipsum stared in growing horror at the flames consuming Moscone.

Datatello’s concern heightened with each area he recognized, but his eyes focused on his own neighborhood, wondering if his sister, Erikuhl, was safe.

Bakaryu had to use all of her mental discipline to stay put, seeing the glow and smoke from the Temple district.

Trailblazer turned away to seek Dirk in the crowd. Their handler had his head held down to his wrist, shaking it and prodding it, his visage one of consternation. She approached, waving vaguely at the door, “Where do you need us?”

“What?”

“I assume everyone’s scrambling at this point, but what are our orders?”

His eyes narrowed, “I’m not getting anything. What are you talking about?”

Perhaps just as confused as he clearly was, she pointed out the still-open door, hoping that the fires raging through the streets would be indicative enough of her question. His eyes widened, and he looked back at her, “They must have hit Site 14. Where are you going?”

This felt like some terrible comedy bit, and the timing was awful, “I don’t know! Where do you need us?”

He shook his head again, considered a moment, then reached into a pouch and tossed her a wrist brace similar to his, “Here. Take this. When Site 14 is back up and running, you’ll need to know what the plan is.”

He approached the prone, metal dwarf and leaned down to inspect. To Trailblazer’s horror, two needles rose from his chest and struck Dirk in the hand. Her years of surviving in the wilderness made it clear that this was poison, but no matter her abilities, she couldn’t pinpoint it.

“I’m fine! Go!”

With a frustrated shout to the patrons to look after him, Trailblazer joined the others, “The system is down. We have no orders.”

Even as she said it, as she listened to her companions’ reports, she saw the glow in the distance and knew that her mentor’s shop was, if not already burning, in danger of doing so soon. She focused on the reports, and nodded, “We need to get to the residential area first. The Temples have more power to stop this. We’ll go around in a loop.”

Datatello had already hopped onto his magical, rolling board and was heading toward his home, the others following. Erikuhl, his sister, was waiting, waving frantically when she recognized him.

“Are you ok?”

“Fine, I’m fine.”

“What about the kids?”

“They’re…” she trailed off, her eyes unfocused, as she tried to think – there were flames and children, and the children needed to be…led away from the flame. She had done that, yes. She nodded, “Yes, they are safe.”

“What happened here?”

“Dwarves! Large dwarves,” she started, rummaging through a pack and shoving things into his hands, “Take these!”

He looked down to see a pair of bracers and a necklace, a kind of upside down triangle with something carved into it. He had barely any time to don them, for lack of a place to put them otherwise at least, before three dwarves, large and covered in metal like the one Master of Coffee, turned in unison and began stalking toward them.

Things swiftly fell to chaos. Coming up swiftly behind Datatello, Kriv summoned fire and hurled it at the oncoming monstrosities. Either unprepared or unconcerned, the dwarves seemed to simply walk into the new flames. Bakaryu sprinted forward, first to ensure that neither Datatello nor Erikuhl were similarly engulfed in flame, and to open her maw and breathe a rolling ball of energy onto their attackers.

Datatello had retrieved his juggling balls, spinning them through the air; they gained momentum, as his companions attacked, and when he knew they were clear, he made his attacks, “You guys shouldn’t play with fire! You could get hurt that way!”

One of the weighted spheres flew directly at the dwarf closest to him, knocking into its head. It turned to stare quietly at him, and the half-orc moved closer to attack, punching him in his jaw. The dwarf had no reaction, but there was a definite sting in his own hand.

Trailblazer, astride Cloudy, came up behind the party. She took aim with her bow, the goat’s added height making it possible for her to use her longbow. The arrow shot out, whistling through the air to bury itself in the eye of the dwarf Datatello had just angered.  In the time that it flew, she drew another arrow. Before it cleared Cloudy’s head, the goat twisted and caught the arrow, chewing on the wood thoughtfully. Trailblazer stared at her, feeling betrayed.

Arrow still in its eye, the dwarf still stared at Datatello, its hand starting to shudder, opening and closing with a strange regularity, as if on a spring. The dwarf behind it, prone, lifted back to standing, like a fulcrum. Once straight again, he reached behind, drawing a battle-ax from its back. The axe grew, extending both the handle and its blades – blades that started to spin wildly.

The dwarf took a step and swung the spiraling blade at Datatello, slashing into the half-orc hard enough that the monk stepped back, inadvertently dodging the second blow.

The third dwarf standing near Bakaryu held up his arm, his hand popping down, as if on a hinge, and a circular blade came out, spinning menacingly. Before he lunged, he turned, seeing Trailblazer. He turned and started toward her.

Kriv’s eyes narrowed, seeing the change in direction, and lashed out, a blast of electricity arcing through the air toward their attackers. All but the potential leader, wielding the battle-ax, seized suddenly, then fell unceremoniously to the ground.

The leader turned toward his attacker and began stalking toward Trailblazer, a well. Bakaryu acted immediately, stepping in front of him and driving forward with her sword. The dwarf looked at the sword, taking a step forward, still staring at Trailblazer.

Another step.

And he fell slack on the blade.

The team looked around, Bakaryu looking over at her dwarf companion, who was muttering about nightmares, “Maybe you should wear a disguise or something.”

“So Ryu, ask me if I have anything that would work as a disguise for Trailblazer.”

Datatello grinned, “This is a joke he’s been telling lately. I don’t really get it, but it is pretty funny.”

The paladin smiled, “Ok. Kriv, do you have something that we could use as a disguise for Brunhilde?”

Kriv reached into his cloak, digging around a bit, before pulling out a large cloak. It was clearly too large for the dwarf, but it would most certainly hide her from view. He handed it over, “Try this on. If it’s too long, maybe Cloudy will hem it up for you.”

Datatello watched all of it joyfully, “I don’t know what you’re paying for your magic classes, but it’s worth it.”

The others looked at him, but he went peacefully into a meditation. He twirled then brought his quarterstaff down, shouting his holy cry, feeling his body start to heal.

“Maybe you should ask if the wizard has a health potion,” Kriv offered helpfully, frowning when his cloak came into view. The corner snapped him in the face.

“It was a genuine ask,” he grumbled. The corner snapped him the other way.

Bakaryu, realizing that her companion was still injured approached, reaching out to offer him healing.

With the battle over, and the healing done, the group looked around to see the fires creeping in. Kriv cleared his throat, “Wouldn’t it be great if we had some sort of hose and a never-ending supply of water to help put out this fire.”

Datatello smiled, “Ok. Kriv, do you have a hose that we can use to put out this fire?”

The wizard sighed, “It’s not as useful if we don’t have water.” He gestured, as he spoke, a tube started falling out of his robe, and with each gesture, more fell out.

“I recognize this! But listen, Kriv, this isn’t a time for joke.”

Trailblazer shook her head, “Datatello, you live around here – do you know anyone who can help us put this out, so we can continue on?”

A grunting sound, followed by hands waving, became apparent, as Erikuhl started to shout, “I can help!”

She grabbed the tube coming out of Kriv’s cloak and began to run, pulling it. It continued to flow until, finally, the end popped out.

“We need a water source,” Kriv sighed.

Datatello made his way to a nearby entry to the aqueduct below them, while Kriv’s cloak dropped another hose out, as if annoyed. They connected the hoses and, after some additional work and questions, they had a pump to bring water out of the sewer and toward the fire.

They took a moment, breathing deeply and centering themselves, trying to not think about the city burning around them. At some unspoken agreement, they headed out again, Trailblazer gesturing, “Let’s get to the template district.”

A little over halfway there, they came across a dwarf sprawled on the ground, black, spiderwebbed marks on his face, as he struggled to breathe. Datatello called Trailblazer over, and she approached, recognizing him immediately as Wuric, a traveling merchant who had the displeasure of being in town.

“Kill me,” he begged, through harsh breaths, clearly unable to move otherwise, “Please. Please. I don’t want…this.”

She could see the black poison in his skin spreading, the same as Dirk, and Trailblazer waved to Bakaryu, “I need…I’ve seen this before. I don’t know what kind of poison it is.”

The dragonborn approached, holding her holy symbol in her hand and kneeling. She channeled the power of the storm through her, focusing it and shaping it, as she reached down to place her hands on his chest.

Before Trailblazer could shout, to warn her, two needles whipped out, just as they had in the Master of Coffee, but they stopped, evaporating. The black lines on Wuric’s face began to recede; his breathing returned, even and steady, and finally the only indication of his previous condition were two pinpricks on his cheek.

“What happened?”

“Dwarves. Some dwarves attacked,” he muttered, sitting slowly, “focused on dwarves, but they attacked everything. I fend them off as best I could, but something got me with some poison, I guess. I couldn’t do anything. I felt my mind retreating, like I was losing grip of it, like I was being pushed to the back. And there was…this voice. So loud. It just said…all things must be dwarf,” he finished, shaking his head.

Kriv approached then, hand raised, “Still want us to kill you?”

The dwarf blinked rapidly, “No! No, no. I’m ok now.”

As her companions spoke, Bakaryu concentrated on the poison that she had just cleansed. It felt…like power of the undead. Her sense of the divine made it clear, the clawing sense of evil dissipating, along with the poison in the dwarf before her.

“Were the dwarves strange looking?” Trailblazer asked, rubbing her face.

In answer, Wuric began gingerly removing chainmail, asking her for help. While the black had receded, there was already metal plating across his chest. She nearly recoiled but steeled herself, leaning forward. It looked like iron. The aura itself was faint, and growing fainter, but it was there.

“When did this start?” Trailblazer asked.

He shrugged, “Never had it before.”

“How long ago were you attacked?”

“Hard to say when all you know is pain. Every moment is an eternity when you’re in agony.”

No one said anything, and Trailblazer looked bemused.

“Was that too dramatic?”

Datatello scaled a building, feeling that he needed to watch for any further bad news. The fires seemed to have died down, or at least not spread, much to his relief. As he scanned, he saw pockets of dwarves, all heading in the same direction – not speaking, not showing signs of camaraderie, simply…marching.

Trailblazer helped Wuric up, eying the abandoned cart of TaskRays and nodded toward it, “You should get out of town.”

He nodded, taking up his cart, and waving, “Thank you. I, uh, I owe you.”

As the dwarf retreated into the distance, Trailblazer turned back to the party, “So let’s get you to your temple,” she grinned at Bakaryu.

They were close, so it wasn’t long before they entered the courtyard of the temple district, all centered on the towering statue of a flower, multi-colored with the stones and metals that made it. Many of the temples were untouched, but damage had been done to both the Temple of the Maker and Temple of the Storm. Puddles of water surrounded them, clearly the work of magic.

The Temple of the Maker was razed to the ground.

Bakaryu approached the Temple of the Storm, where Longshore, a bronze dragonborn that she knew through the temple was finishing some work.

“You made it, Ryu,” she breathed.

“Yes, I made it. What…happened here?”

“You knew? The dwarves. They came. They did not bring the love. They brought only pain and poison. You’ve seen the poison?”

“Yes – we healed one of them, on the way here.”

“How so?”

“Restoration,” she shrugged, unsure how else to explain it.

“Oh? Good to know that something so simple can do so much good. I will send word.”

“It seems to be undead in nature.”

Longshore nodded, “Yes, we sensed that as well.”

Trailblazer approached, then, “Are they attacking non-dwarves”

The other dragonborn frowned, “They focused on the dwarves. They came and went directly to the temple of the maker. One of them called them traitors, called them…undwarfish.”

Kriv nodded, “A very short conversation.”

Longshore said nothing to the wizard, “He said they were…bringing down, or, no, taking away from dwarves society by trying to allow others to be equal to dwarves. That dwarves were superior, and that if others could not live up to their standards, then they should live in the dirt.”

Datatello pointed, “Did they go in that direction, when they left?”

Longshore nodded, “Yes.”

The other party members turned to look in the direction, trying to determine what they could be headed toward. No one could put their finger on what they could be headed toward – it seemed innocuous. But they knew, at least, that that was the direction they needed to head in.

DnDF17: The adventure so far

Last week, on DnDF17 (some artistic liberties have been taken)

The weary members of Bacon Ipsum wound through the streets of Moscone. They were silent, all of them thinking only of the destination and what would await them there – the best coffee in Forcelandia and payment for their efforts defeating what may or may not have been a dragon. What was definitely not a dragon. What had definitely been someone with too much time on their hands. Either way, the team would be paid through the Trailhead Expeditionary Forces.

The Apex palace loomed before them, the Master of Coffee nestled within its walls, when Kriv, the surly and aloof wizard heard his name being called. The rest of the team paused, waiting for their companion to complete his transaction, all of them on edge at the rough tones of the conversation. Brunhilde, the dwarf better known as Trailblazer, watched and waited, ready to jump in and pull the wizard out of a scuffle.

“Oh, hey, guys,” Datatello suddenly began at her side, pulling her attention away from hearing what words were being exchanged, “I just remembered! Remember those crystal shards that we found in that basement a long time ago?”

Kriv and Brunhilde remembered, of course, having been part of their first adventure. Bakaryu and Flash both nodded politely, not wanting to correct the half-orc. After all, they had all traveled long enough, it was easy to forget who was where and for what.

“I sold them!”

Kriv straightened under his robe, hearing the words sold, as he approached the group once more.

“I found a buyer at the Wizard School, and this guy bought them for 600 gold!”

“600 gold?” Kriv began.

“Yeah! I gave it to a children’s hospital,” Datatello beamed.

Kriv shriveled within his cowl, “You gave it away?”

“Not all of it,” the half-orc continued, producing pouches from his bag and handing them out, “here’s what’s was left.”

The party entered Master of Coffee, placing orders and taking their respective places at a table large enough to seat them all.

“We should check in,” Kriv muttered, waving for Bakaryu to follow. It was best that others be with him when dealing with their handler, and the noble paladin was a good choice, despite her looming presence and scaled visage.

Their handler sat in the back, clothed in all black, peering at them from behind half-moon spectacles, “Yes?”

“We’re checking in,” Kriv spat, his mood only darkening after the exchange he shared with his supplier, Quick. His problem was becoming increasingly expensive, and he just wanted to take on the next job. And the next. However many it took.

“I suppose you have evidence, then?”

Something like a growl left the wizard, as he turned and stalked back toward his dwarf companion, who was staring into the steaming mug in front of her and watching Datatello request other patrons join him in a game of darts. She had offered, but experience had proven that her height put her at somewhat of a disadvantage for the monk’s preferred play style, specifically another player throwing a dart at his face, so he could deflect it.

He was, perhaps unsurprisingly, very good at the game.

“Do we have any evidence from the last job?”

“Dragon scales,” she leveled at Kriv, taking a sip.

The words sparked the memory of their dragon born compatriot, who smiled widely – probably smiled; the teeth made it difficult to tell – and presented a bag, “Oh yes! The dragon scales.”

Satisfied, their handler nodded, “500 gold then.”

Brunhilde saw Kriv’s jaw clench, “500? Fine. Well what’s the next job?”

“There is not one.”

Apparently things were quiet. Too quiet. They would swiftly become much louder, if Kriv had nothing to occupy himself with. Trailblazer prepared to talk him from the ledge, shove something free in front of him and distract him, but the planning was unnecessary, as just at that moment, the door opened, and the loud thumping of heavy boots rang through the air.

The coffee tavern, as a whole, turned to watch a group of angry dwarves step inside. They were known to Brunhilde, the one at the fore a known rabble rouser, and to her surprise, a usually friendly Skuid vendor from the markets. Friendly or no, it was clear this group was looking for trouble.

The friendly monk approached, hoping to calm whatever had the dwarves so angry, “Hello there! Can I offer you a beverage?”

“Ale,” the leader growled at Master Coffee.

Master Coffee smiled calmly, “I’m afraid we don’t sell ale here.”

“What kind of tavern is this?”

Datatello watched the exchange, clearly uncomfortable with the tone. Kriv, too, saw the tension rising.

“Datatello, ask me for ale.”

The half-orc tilted his head, “I don’t need it. They’re-”

“Just ask me for ale. Tell me you need ale. Ask me for ale!”

Unsure what the wizard was on about, but not wishing to disappoint, he complied, “Kriv, can I get some ale?”

The wizard reached into his robe, digging around for a moment, before pulling out a smallish barrel and showing it to the dwarves, as well as the proprietor, “Here. Ale. Please open the barrel.”

Master Coffee didn’t seem pleased with the idea, but he agreed. Kriv placed the barrel on the counter and stepped away, just before an axe whizzed through the air and shattered the wooden cask.

Moving on instinct, Kriv raised his hand, fire springing from his palm to shoot directly at the dwarf who had thrown the axe. The smell of burnt dwarven beard followed, as well the angry shout of alarm and the sound of many heavy weapons being drawn from their scabbards and holsters.

It was enough for Datatello. The half-orc pulled his bo-staff free, swiping high and then low against the dwarf just in front of him before moving beyond him to stun the second armed intruder. He was caught on the calf with a blade but elected to ignore it, the cut barely registering, as he left open-handed strikes on his attacker.

There was a brief pause, as Bakaryu stood, looking down at the dwarves, “Listen, friends, let’s not be short sighted here. I understand that tempers may be short, but fighting is only a short-term solution. I’m sure there’s a way to short – oh, no, sort – this out, so that everyone gets what they want, and we can all go our separate ways shortly.”

Flash, their silent thief, ducked into the shadows, hoping to remain unseen until he could strike.

Brunhilde blinked at the calm, reassuring dragon born, wincing with each passing moment. Other dwarves, who had been ducked behind tables to avoid being caught in the fray, stood to level shocked glares at the paladin.

Before the angry, at least no longer flaming, leader could roar and charge at her companion, Brunhilde slid her longbow around and lifted it, tilted to ensure she could use it, and took aim. The arrow soared through the air and struck its intended target – the thick rope holding onto a strange contraption, unique to this establishment, with wooden blades than spun lazily through the air. The rope snapped, and the heavy instrument fell, knocking into the dwarf’s shoulder and sending him to the ground, though it did not knock him out.

That was a mistake.

The dwarf stared at her, recognition sparked, and he bellowed toward the door, “SHE’S HERE!”

The spectacle served as enough of a distraction, though. Flash leapt from the shadows, his sights on the dwarf who was still stunned by Datatello’s flurry of blows. It was all he needed, taking two swipes, enough that the dwarf staggered away.

Ignoring his companion in need, the dwarf who had just yelled sprinted, or at least lunged forward. Brunhilde watched as the attacker, and her past, rushed to greet her. He didn’t make it to her, though, instead tripping. Her relief was short-lived, as behind came another attacker, this one wielding two axes, both of which came down swiftly and lodged deep in her chest.

She grunted, unable to pull away, then staggered when the dwarf ripped the blades back out. Pain blossomed, and she at first thought the shaking of the wooden planks beneath her were her imagination until she saw the hulking form coming through the doorway.

All patrons stopped and stared at the dwarf entering the coffee tavern, if one could still call this creature a dwarf. Parts of his body had been covered in ore, as if he had been dipped in molten metal and left to cool, or something blew up and fused to his skin. He turned to Trailblazer, “Traitors die a terrible death,” he rumbled.

Never one to standby, when the shock wore off, Datatello sprung into action, launching his magical rolling board at one of the stocky attackers who had hurt his friend. It did little to deter their enemy, but it was of little concern. He swung back with his hand, feeling the distinct crunch of crushing bone under his palm, followed by the sound of someone gasping for breath.

“Someone throw me an alley-oop!” the monk shouted.

For a breath, nothing happened. Then the half-orc, Sodak, popped out from a table, tossing a dart. Datatello spun, kicking the dart furiously. It turned and sped toward the new-comer, only to ping uselessly against the metal coating on his skin.

Bakaryu rushed past the remaining combatants, ignoring the dwarf that ran into her, only to bounce off again with a grimace. She inhaled deeply, rearing back, then opened her mouth again, a purple and blue cloud of writhing electricity spitting out at the intruder. The tendrils wrapped around him, sparking to life, then fizzling out. He choked for a moment, enough time for her to hurl a nearby table. He stood and shook off the energy in time to watch the table soar overhead and crash through the window behind him.

He ignored both attackers, his focus still intent on Brunhilde, as he took floor-rattling steps toward her.

“You are a disgrace to your kind,” he spat, “First you took the dishonorable path of a role not meant for you. Then you abandoned that path for an even less honorable path.

THUMP. THUMP.

“And now you sit in a tavern that does not even serve ale!”

THUMP. THUMP.

“You have usurped your rightful place.”

THUMP. THUMP.

“You are a crime with your very existence.”

THUMP. THUMP.

As he approached, the remains of his face became clear, and Trailblazer realized who this dwarf was, why he was angry, rambling and intent on destroying her. Eric the Unready.

Maybe it was the pain or the blood loss, but all she could think to say was, “Eric, hey. How are you?”

He blinked at her, “I – what?”

It was enough time for her to take action. She kicked Datatello’s magical rolling board at him, as he took a step, hoping to trip him. His foot landed on the wooden board, and as he brought up his other foot, he lost his forward momentum, though not his balance. Brunhilde watched, as he rolled slowly back away from her, his low center of gravity keeping him upright, but the momentum of the board enough to carry him at least a few feet away.

Sodak, still peeking out from behind the table, stuck out a leg.

Eric toppled onto his back with a roar, and Trailblazer, eyes narrowed, swung out with her short sword at the closest thing still nearby, the dwarf who had nearly cleaved her. He grabbed at his throat and fell away.

Seeing his opportunity, Flash narrowed his eyes at the monstrosity on the floor. The metal and stone had him still prone, rolling in an effort to stand. Before he could, Flash moved with the speed he had been nicknamed for, trusty daggers in hand.

As the dwarf stood, Flash dropped, sliding past him on the floor to dig one biting dagger into the behemoth’s back.

Eric the Unready roared and swung back with his left arm. Flash ducked, leaning back and then lunging with his remaining blade, sliding it under the dwarf’s arm to lodge firmly in his chest. Eric stumbled back, gurgled, and then fell to the floor, unmoving.

The remaining dwarves took their cue, rushing out of the tavern.

Through the open door, they all saw it. Smoke and flames.

Moscone was burning.