Friday, August 17, 2018

Interview on A Geek Leader Podcast

Somehow I forgot to post here that John Rouda was kind enough to invite me on his A Geek Leader podcast some time back.

We talk about leadership, learning, adversity, and of course The Event from Jan 10th, 2017.

John’s a wonderful, gracious host and we had a great conversation. You can find details at John’s site.

Stop Rationalizing Bad Coding Practices

Rant. (Surprise.)

Want to work alone for long periods without testing or running your code? Want to avoid doing TDD or at least test-immediately-after-coding because it breaks up your flow? Don’t want to be disturbed discussing things with your testers, product owners, and users because it takes time away from coding?

Believe it or not, there are times I’m OK with this.

I’m OK with the practices above if:

  • Your business stakeholders and users are happy with the system in production
  • Your rework rate for defects and missed requirements is near zero
  • You have fewer than six to ten defects over several months
  • You have near zero defects in production
  • Your codebase is simple to maintain and add features to
  • Static analysis of your codebase backs up the previous point with solid metrics meeting recognized industry standards for coupling, complexity, etc.
  • Everyone on the team can work any part of the codebase
  • New team members can pair up with an experienced member and be productive in days, not weeks

If you meet the above criteria, then it’s OK to pass up on disciplined, PROVEN approaches to software delivery–because you are meeting the end game: high-value, maintainable software that’s solving problems.

The thing is, very, VERY few people, teams, or organizations can answer all those questions affirmatively if they’re being remotely honest.

Some people, way to the right of the bell curve, and I’m talking like the miniscule number of folks out on the fifth standard deviation, can pull this off. Not intuitively, but after years of study and hard work and a metric crapton of failure.

The rest of the 99.865% of the software industry has decades of data proving how skipping careful work leads to failed projects and lousy care of our users.

Those of us who’ve been around the block a few times see the awful results time and time again: Dysfunctional organizations who can’t deliver critical internal systems but once every two or three years. Product companies folding due to angry customers and bad reputations. Miserable teams of humans trapped in death march scenarios.

Do not rationalize your concious decisions to do poor work with “I’m more effective when I just…” No. No, you are not. You think you may be, but not unless you can answer the questions above “Yes!” with confidence and honesty.

Stop rationalizing. Stop making excuses.

Own. Your. Shit.

And clean it up.

Friday, August 10, 2018

Understanding WebDriver Components

Understanding WebDriver Components

[UPDATE] This post is based on a submission I made to the official WebDriver documentation in early Spring of 2018. It's meant to help folks understand how pieces and parts fit together for WebDriver. [/]

Building a test suite using WebDriver will require you to understand and effectively use a number of different components. As with everything in software, different people use different terms for the same idea. Below is a breakdown of how terms are used in this description.

Terminology

  • API: Application Programming Interface. This is the set of "commands" you use to manipulate WebDriver.
  • Library: A code module which contains the APIs and the code necessary to implement them. Libraries are specific to each language binding, eg .jar files for Java, .dll files for .NET, etc.
  • Driver: Responsible for controlling the actual browser. Most drivers are created by the browser vendors themselves. Drivers are generally executable modules that run on the system with the browser itself, not on the system executing the test suite. (Although those may be the same system.) NOTE: Some people refer to the drivers as proxies.
  • Framework: An additional library used as a support for WebDriver suites. These frameworks may be test frameworks such as JUnit or NUnit. They may also be frameworks supporting natural language features such as Cucumber or Robotium. Frameworks may also be written and used for things such as manipulating or configuring the system under test, data creation, test oracles, etc.

The Parts and Pieces

At its minimum, WebDriver talks to a browser through a driver. Communication is two way: WebDriver passes commands to the browser through the driver, and receives information back via the same route.

The driver is specific to the browser, such as ChromeDriver for Google's Chrome/Chromium, GeckoDriver for Mozilla's Firefox, etc. The driver runs on the same system as the browser. This may, or may not be, the same system where the tests themselves are executing.

This simple example above is direct communication. Communication to the browser may also be remote communication through Selenium Server or RemoteWebDriver. RemoteWebDriver runs on the same system as the driver and the browser.

Remote communication can also take place using Selenium Server or Selenium Grid, both of which in turn talk to the driver on the host system

Where Frameworks Fit In

WebDriver has one job and one job only: communicate with the browser via any of the methods above. WebDriver doesn't know a thing about testing: it doesn't know how to compare things, assert pass or fail, and it certainly doesn't know a thing about reporting or Given/When/Then grammar.
This is where various frameworks come in to play. At a minimum you'll need a test framework that matches the language bindings, eg NUnit for .NET, JUnit for Java, RSpec for Ruby, etc.

The test framework is responsible for running and executing your WebDriver and related steps in your tests. As such, you can think of it looking akin to the following image.

The test framework is also what provides you asserts, comparisons, checks, or whatever that framework's vernacular for the actual test you're performing, eg

AssertAreEqual(orderTotalAmount, "$42");

Natural language frameworks/tools such as Cucumber may exist as part of that Test Framework box in the figure above, or they may wrap the Test Framework entirely in their own implementation.

Natural language frameworks enable the team to write tests in plain English that help ensure clarity of why you are building something and what it is supposed to do, versus the very granular how of a good unit test.

If you're not familiar with specifications, Gherkin, Cucumber, BDD, ATDD, or whatever other soup-of-the-day acronym/phrase the world has come up with, then I encourage you to go find a copy of Specifications By Example. It's a wonderful place to start. You should follow that up with 50 Quick Ideas to Improve Your User Stories, and 50 Quick Ideas to Improve Your Tests, both by Gojko Adzjic.

Following Up

Don't stop here. Go learn more about how WebDriver works. Read the WebDriver documentation. Sign up for Dave Haeffner's awesome Elemental Selenium newsletter and read his past articles.

Join the Slack Channel and ask questions. (But please, do yourself and the Selenium community a favor and first do a little research so you're asking questions in a fashion that can help others best respond!)

Slides from ThatConference

I spent the last week at THATConference in Wisconsin Dells, WI. It's a wonderful conference somewhat along the same lines as CodeMash, but with a very different culture and vibe. I gave my talk "More Better Quality Coverage" which is on improving how your teams test--and understanding what modern testing and quality needs to look like.

Lots there on moving testing conversations to the left. Lots there about testing as an activity.

Thank you if you attended the session. I had some really good questions, folks were patient with my bad jokes, and there were some really good conversations after the talk.

Also: Thank you to THATConference staff and attendees. I've been to five conferences already this year. I'm finally finding myself coming out of the funk I've been in since January 10th, 2017. SeleniumConference Bangalore was the first conference I felt somewhat "myself" at. This time at THATConference I felt almost 100%.

Thank you.

Monday, July 30, 2018

Slides from Selenium Conference India

I just realized I'd forgotten to post my deck from my talk "Changing Culture in a Ginormous Company." 

This an experience talk on lessons learned from my three  working with software delivery organizations at a Fortune 10 company. I worked with teams across several continents while embedded with one specific delivery team. This talk is about the lessons learned (re-learned), lots of failures, and some significant successes.

https://speakerdeck.com/jimholmes/changing-testing-culture-in-a-ginormous-organization

Thursday, May 17, 2018

Slides From My Leadership Workshop

Last week I was honored to be a part of Romanian Testing Conference 2018 in Cluj-Napoca, Romania. It’s a wonderful conference with a lot of great attendees, and it’s extraordinarily well-run. (I’ve a fair amount of experience running conferences. I appreciate a good one!)

One of the two workshops I did was Learning to Lead an IT Team. This is an eight-hour workshop based off my book The Leadership Journey (https://lnkd.in/gS2p_5t) and is full of conversations and exercises meant to help attendees figure out if they want to become leaders, and what they need to learn about themselves in order to be successful as they grow. It’s also full of my bad jokes, but what else would you expect?

Slides for the workshop are on SpeakerDeck at https://speakerdeck.com/jimholmes/leading-an-it-team-workshop

Thursday, April 19, 2018

Get The Most Out of KalamazooX

The last KalamazooX Conference is this weekend.

I'm hoping folks attending will step back and take the conference in for what it is: one of the most amazing, impactful events you could ever possibly attend. KalX is extraordinary in the power and depth of the speakers' stories. Mike Eaton's done an incredible job over the decade he's run it. Attendees and speakers all come away drained, exhausted, and inspired.

The thing is, the best talks at KalX are intense and polarizing. I've heard a talk held up as an inspiration for positive life changes--while others felt that same talk was instrumental in breaking up a marriage, or a feeble attempt at the speaking trying to rationalize their own life choices.

A few years ago one talk by a close friend laid out a case about not simply following "passion" but instead planning out a life and career of awesomeness. A small group took great offense that, and railed against both the talk and the speaker because they were offended.

This year one person Tweeted "I hope this year's opening talk isn't as upsetting as last year's." [1]

If you're going into KalX loaded up with fear about sessions you're doing it wrong. Instead, go in with an open mind and a vulnerable heart. You should go to KalX EXPECTING to get upset, because the awesome speakers Mike lines up are throwing out intense, deep stuff they care about at their cores.

I've been to conferences all over the world. I've listened to a huge number of talks on podcasts and videos. There is nothing like KalX. Nothing.

Be open. Be vulnerable. Stop getting offended because someone phrases things differently than you might.

It's how you'll get the most out of this last KalX.

[1] I was the one who gave that opening talk at last year's KalX. The reaction of a few ungracious people who decided to surround me and yell at me for ten minutes because they were upset is part of the reason I've written this post.

Wednesday, February 07, 2018

Succeeding at Titanfall 2: Some Closing Thoughts

[NOTE: One in a series of posts on my Titanfall 2 experience. Find the intro article with links to others here.]
Titanfall 2 is a really fun game, even though the multiplayer aspect is not a type of game I do well at or even search out to play in other games. [Ed.: Dude, you have 28 days of total gameplay and you just got Gen 50. WTF? Seriously?]
A few closing thoughts for this series:
  • Find Game Modes That Work For You. Early on I said I’d rather punch myself in the balls while being drug behind a motorcycle through a field of cactus and broken glass than play pure pilot v. pilot modes. I find myself in those modes spending a lot of time dying and cussing. Attrition is different because there are pilots and minions, plus Titans come in to play. I still die and cuss, but have a much better time. The other modes I've mentioned suit my skills and mindset very well. Find modes that work for you.
  • Figure Out Your Goals. Or If You Even Care. In TF1 I was determined to max out at Generation 10 Level 50 just to prove I could do it. TF2 is completely open ended, so my goals were more around game play. Then at a certain point I decided I wanted to play well enough with each weapon to Gen them up to Gen 2 at least. Then I could stop playing ones I hated, because at least I’d proved myself with that weapon. Remember my DMR being in the same grave as Jimmy Hoffa and Chuck Schumer’s conscience? Yeah. That. You don’t have to have goals. That’s just fine too.
  • Get a Mic. Chat With Your Team. The Titanfall player community is really pretty awesome. There’s a lot of funny players online. I’ve only ever had one teammate who cussed at the rest of us. He was playing really poorly and decided it was the fault of all the rest of us he was scoring so poorly. “Worst fucking team I’ve ever played with!” Yeah, pal. That’s exactly why you ended with five kills and few points. Jerkface.
The vast majority of folks with mics tend to be good teammates. A very few even know how to communicate well to help the team, especially when you’re playing Frontier Defense.
  • Learn Effective Communication. “Cover me!” isn’t helpful. Where are you? Where are you going? What direction are you taking fire from? Learning the maps can be very helpful so you can call out useful info like “Careful! Pilot sentry in the main courtyard.” or “Pilot’s camped out in cover up on the grain towers.”
Of course, there’s my always helpful running “useful” commentary: “Well, shit. That didn’t work so well.” Or “Damnit, Funky Chicken killed my ass again because I was stupid and ran in front of him.”
Don’t be me. Be better than me…
  • Have Fun. Like any multiplayer game, it can be extremely frustrating, particularly when the game matching algorithms don’t work all that well. You get baby seals (me!) thrown in with sharks. Which is why I gave up on playing Call of Duty multiplayer after leveling up my Prestige to prove I could. Move past that frustration and focus on all the fun parts.

In Closing

I hope this series has been helpful to whomever runs across it. It’s not getting a lot of views, but that’s not really why I wrote it. I was more interested in getting back in a writing groove, and laying out my experiences was a fun way to do it.
Look me up some time if you’re interested. My GamerTag is FrazzledDad and I’m online 9pm-ish in the Pacific timezone.
In the meantime, go have some fun.

Succeeding at Titanfall 2: Movement and Shooting

[NOTE: One in a series of posts on my Titanfall 2 experience. Find the intro article with links to others here.]

Movement as a pilot in Titanfall 2 is just a crapload of fun. I love flow of dashing around, wall running off even small bits of vertical structure, combining that with a leap and a slide. There are even HUD mods you can use to show your current speed. (That’s cool, but I’m a HUD minimalist.)

Speed Is Your Friend

ProTip from Captain Obvious: The faster you’re moving, the harder it is to get shot. Duh.

Spend time in the Gauntlet learning to move quickly, and learning how to string together moves that add to your speed: wall runs, leaps, grapple, slides, all the neat things that really make moving as a pilot so fun.

Learning the maps well will help you out greatly with your movement, simply by knowing “Oh, yeah, I can bounce along this route right here.”

Colony is a good example of this. If the initial spawn is at the corner back from the garage, then I can get a short run off the corner building’s edge, slide, and get another tiny wall run off the wall ahead of me. I can then use my grapple to get fast boost and fling to the hill by the SOS platform/grain towers.

Speaking of the grapple…

I Love My Grapple

The various pilot tactical mods are all neat, but I have used the Grapple exclusively for many months. The Grapple lets me get to higher spots for better firing positions.

Used well, the Grapple can also get you a huge speed boost. Aim out ahead of you, just below the horizon, fire off your grapple and you’ll get a serious amount of momentum. You can stay on/near the ground (useful in hallways), or you can get yourself moderately airborne with a careful bit of up controller movement.

You can also use the Grapple to literally fly well across the map. Catch the edge of a building, then use your controller to look slightly up and off to one side. This will work just like a rope swing in real life—you’re effectively catapulting yourself through the air. There are some great YouTube videos showing how players can remain airborne for long periods of time with repeated grapple flings. I don’t shoot well airborne, so I don’t chain together these actions, but one fling will get me much closer to a different firing position, so it’s all about quick mobility for me.

Perhaps one of the best things about the Grapple is you can kill opponents with it. Grab ’em with the Grapple and they’re pulled right at you where you can give them a quick melee kill. Warning: they can shoot at you as they’re being drawn in, and they can also out-melee you if they’re perfect in their timing. But holy crap is it a satisfying kill when you pull it off!

Like everything else, the Grapple take some practice to get proficient with it. It’s freaking awesome once you’re good.

As I’ve repeatedly said in this series, this is specific to my style of play. I’m happy for you if there are other tacticals you prefer. Honest.

Changing Direction via Slides

Slides aren’t just for increasing your speed—they also enable you to rapidly change direction! Get a good slide going in one direction, then look in another and do a quick stand/slide action. You can make 90 degree turns, which is awesome for helping you keep your speed up while getting to a new firing point.

Sight Location While Moving

Pay attention to where you’re keeping your hip-fire sights while moving. For the longest time I’d run around with my ADS reticule down below the horizon. No clue why, it’s just how I rolled.

One of the best lessons learned I got from watching the Kill Replay was to see how good players moved and kept their sights just above the horizon. Like, at body height. This is really important because it dramatically reduces time to get the sights placed on target. You come around a corner and SURPRISE OMG THERE’S AN ENEMY PILOT AND MY SIGHT IS WAY OFF IN EAST JESUS AAAAND I’M DEAD.

Moving Sideways, Or Keep Your Sight on Threats

You’re not Charlize Theron’s character in Prometheus. You realize you can move and slide sideways, right? It’s a great way to displace or move to a better position while keeping your weapon pointed at threats or potential threats. Just keep your sight at a good height while doing it.

Get Faster at Getting Your Sight on Target

Getting your sight on target faster means you’ve got better odds at killing the enemy before they kill you. Hello, thanks Captain Obvious.

One part of this is the Gun Ready mod which gets you into ADS quicker. The other part is getting better at getting your sights on the target. That comes through practice, either deliberate practice or in the game.

Spend some time at the gun range in The Gauntlet working on speed and accuracy of good sighting. There’s lots of good exercises in the real firearm world on exactly this sort of thing. Look up things on YouTube or blogs/articles and find something that makes sense for you.

For me it was just repetition of a lot of simple movements: look 30 or so degrees off to one side of a target, then raise to ADS as I’m snapping onto the target. Work on limiting overshooting the target, meaning if you’re traversing left to right don’t traverse too far right.

I spent a lot of time doing things like that simple movement from various directions at various target ranges (near, mid, far).

I’m not great, but it paid off.

Learn to Shoot From the Hip

Firing from the hip saves you time transitioning to sights. It also leaves you a wider view versus the constrained one you get in ADS. Hip fire is especially good against opponent minions who don’t move and dodge very effectively.

Don’t focus on improving just your ADS firing; spend time on hip fire too.

Tuesday, February 06, 2018

Succeeding at Titanfall 2: Tactics

[NOTE: One in a series of posts on my Titanfall 2 experience. Find the intro article with links to others here.]

Oi. Where to start?

As I was trying to improve my game play, I found it frustrating how little writing there was on how to play better at a tactical level. Not just Titanfall or TF2, but first person shooters in general. There are plenty of rather useless platitudes like “Don’t run across open fields. Learn from every death.”

Thanks a Ton. Next in that series: “Five Ways to Make Friends, Starting With Not Picking Your Butt in Public.”

Here are a collection of odds and ends I’ve picked up. It’s stuff that lots of accomplished FPS players will be saying “Well, duh!” to, but hopefully some readers (all three of you) may find useful.

This is general tactics—there’s a whole separate post on movement and shooting. Yes, there’s some overlap. Deal with it.

Learn The Maps

Know the map. I can’t emphasize how important this is. It took me far longer to figure out just how critical this is for any FPS game. Knowing the map inside and out gives you many critical advantages.

Some things you can pick up in practice mode running solo around maps exploring. I’m embarrassed how long it took me to figure that out. On the other hand, I was always just looking forward to jumping in to battle and having my ass handed to me by folks who knew the maps really well.

Some things to look for as you’re learning the maps:

  • Find good shooting spots

  • Find good shooting spots that help hide you

  • Find good shooting spots that help hide you with good cover that protects you from fire from at least one or more angles. (Think of hiding with a wall to your side or mechanical structures on roofs behind you.)

  • Find good fire lanes—areas that offer good cover for you and lots of visibility to see opponents. Think of the main street under the monorail on Eden; the main corridors on Rise; much of the open spaces on Homestead

As you progress and play more, you’ll find spots where opponents like to hang out on particular maps. These are generally newer players who haven’t yet learned, through multiple, painful deaths, that those spots are actually Bad Places Since Experienced Players Shoot There Right Away. Examples of such places would be the central tower in Colony, the comm tower on ExoPlanet, the courtyard towers in Angel City, or the large central tower in Homestead. “Hells yeah! That’s a freakin’ awesome spot. Imma gonna climb right up top here and snipe me some players right now… Crap I died.”

Cover

It took me way, WAY too long to get better at using cover.

If you’re moving, do so along paths that block you from fire from one or more directions. Wall running is great for several reasons. First, you’re moving fast. Secondly, you’re harder to hit. Third, nobody can shoot you anywhere from the other side of the wall.

When you stop to scout or shoot (or recover health), make sure you’re not standing in the open. Don’t stop in front of windows. Don’t stop in front of doors. Make sure you’ve got solid cover in as many directions as possible—and be aware of directions you’re not covered from.

Keep an eye on your minimap. Keep cover in mind when you see threat indicators on the map. Keep something between you and those threat directions until you’re ready to have a look or attack out in that direction.

Avoid Fire Lanes

Above I mentioned finding good fire lanes to shoot from. The converse of that is avoid running through those same fire lanes. If you have to cross one of those areas, check your HUD’s threat map first and see if there’s anything obvious. Secondly, use whatever you can to speed your crossing: sprint, slide, grapple, etc. Casually strolling across a well-known fire lane will likely get you stomped like a narc officer at a biker rally.

Reload Constantly

As Master Sergeant Brianna Fallon eloquently put it to her squad in Chains of Command, “If one of you sons of bitches gets killed for lack of shooting back because you ran out of ammo, I will personally violate your carcass.”

You do not want to die because your mag had one round in it when you come face to face with an opponent who has you in their sights.

Regardless if I’m in a Titan or on foot as a Pilot, I reload constantly. I’ll take advantage of displacing movements to reload, ducking behind cover, etc. I don’t wait for my mag to empty and auto-reload. Instead I want to make sure I’m heading to the next engagement with a full mag.

There is nothing worse than sneaking up for a good shot on an opponent, getting a good aim down, squeezing the trigger, and seeing one or two rounds go downrange to damage your opponent. And alert them so they dash off someplace else while you’re reloading and cussing about how you blew yet another sneaky approach.

Reload. Reload all. The. Freaking. Time.

Fire, Displace, Repeat

You know what I love? I love opponents who fall in love with a clever spot and hang out there firing away, giving me a chance to work around to get shots at them.

Don’t be that player. Don’t fall in love with your firing position. Get a few shots, then displace rapidly to another good spot. If you’re having an extraordinary run of raining death down on your opponents, then you certainly can make a choice to die in your firing position. It’s not a completely wrong choice as long as you’re making it thoughtfully.

What I mean by that is “OK, I’ve gotten three quick kills from this sniping spot. I know the opponents are starting to figure out where I am, but I’ve been faster on the trigger than them, and I think I can get another two or three kills from here before they kill me. I’m OK with a five-to-one KDR for this streak.”

That’s a tactical choice, and it’s not necessarily a bad one. Just make those choices with some smarts instead of “HOLY COW IMA TOTALLY HAVING A GREAT TIME HERE OH CRAP I DIED.”

Watch Your Flanks. Nobody Else Will

Very, very few teams work well together. Frankly, few teams even work modestly well together. Nearly everyone runs off in search of their own glory while ignoring that paying attention to what’s going on around them might help them and the rest of the team.

Especially in Titan-based games, make sure to pay attention to your flanks. It’s a regular occurrence to gang up with other teammates to wreak some havoc, only to find that nobody’s checking six (as in “six o’clock”, directly behind you), or the sides. All of a sudden you’re getting blasted by one or more opponents who circled around and are hell bent on turning you into a red pile of good. Normally this happens right as you notice your own teammates splitting off to dash to some other position.

Keep a weather eye on your flanks. Because it’s rare that others will.

Avoid Rodeoing Titans From the Front

Titans seem to have an ability to melee and kill you when you’ve gotten inside their arm span, and even nearly on top of them. Avoid grappling a Titan from the front and try to rodeo. The odds of getting killed via melee are very high. I know this from lots of painful deaths.

If you do from the front, use whatever ordinance you have to try and distract the Titan. This is partially why I like Firestars—you can blind a Titan and either run or rodeo with much better chance of success. Be careful, though, because you can kill yourself with your own Firestar or electric smoke ordinance. Ask me how I know…

If you’re grappling from the front of a Titan, do not fly towards the titan in a straight line. Use your controller to fly up high, then loop down and mount the Titan. This will keep you out of melee range. Same thing works flying to one side or another. Point being, don’t fly in straight to the Titan.

Odds and Ends

Choose Your Colors Carefully: I love the look of the red character and Titan cammo selections, but they can be distracting. Opponents get lightly highlighted in red, so taking an outfit with red-ish coloring can be misleading. Conversely, I like to run blue or green outfits since friendlies are lightly highlighted in this fashion in your view. This can help give you a split-second advantage when an opponent sees you, similar to the Ghost kit’s semi-invisibility. It’s only a split-second, but it may be enough to help you out.

Avoid Drop Ship Door Fire Lanes: Opponents in the drop ship can still shoot out and kill you quite nicely, thank you very much. If you can avoid it don’t get in the roughly 120 degree arc in front of the doors when you’re trying to shoot at the ship and blow it up.

Don’t Waste Ammo on Pilots in the Drop Ship: You can’t kill pilots in the drop ship, just the ship itself.

Subscribe (RSS)

The Leadership Journey