Wednesday, March 25, 2015 18:15 PM
After some final tweaks, messages being sent out to the speakers and presenters, keynotes and other behind the scenes machinations... we are please to announce that registration for AST's tenth annual conference, CAST 2015, to be held August 3-5, 2015 in Grand Rapids, Michigan, is now open!
The pre-conference Tutorials have been published, and these tutorials are being offered by actual practitioners, thought leaders, and experts in testing. All four of them are worth attending, but alas, we have room for twenty-five attendees for each, so if you want to get in, well, now is the time :)!
The tutorials we are offering this year are:
"Speaking Truth to Power" – Fiona Charles
"Testing Fundamentals for Experienced Testers" – Robert Sabourin
"Mobile App Coverage Using Mind Maps" – Dhanasekar Subramaniam
"'Follow-your-nose' Testing – Questioning Rules and Overturning Convention" – Christin Wiedemann
Of course, there is also the two day conference by itself that you can register for, and yes, we wholeheartedly encourage you to register soon.
If you register by June 5th, you can save up to $400 with our "Early Bird" discount. We limit attendance to 250 attendees, and CAST sold out last year, so register soon to secure your seat.
Additionally, we will be offering webCAST again this year. Really want to attend, but you just can't make it those days? We will be live streaming keynotes, full sessions, and "CAST Live" again this year!
Come join us this summer for our tenth annual conference in downtown Grand Rapids at the beautiful Grand Plaza Hotel August 3-5, or join us online for webCAST. Together, let's start “Moving Testing Forward.”
Monday, March 23, 2015 19:10 PMTesting is Broken by Philip Howard.
First things first; yes, I disagree with this post, but not for the reasons people might believe.
Testing is indeed "broken" in many places, but I don’t automatically go to the final analysis of this article, which is “it needs far more automation”. What it needs, in my opinion, is better quality automation, the kind that addresses the tedious and the mundane, so that testers can apply their brains to much more interesting challenges. The post talks about how there’s a conflict of interest. Recruiters and vendors are more interested in selling bodies, rather than selling solutions and tools. Therefore they push manual testing and manual testing tools over automated tools. From my vantage point, this has not been the case, but for the sake of discussion, I'll run with it ;).
Philip uses a definition of Manual Testing that I find inadequate. It’s not entirely his fault; he got it from Wikipedia. Manual testing as defined by Wikipedia is "the process of manually testing software for defects. It requires a tester to play the role of an end user and use most or all features of the application to ensure correct behavior. To ensure completeness of testing, the tester often follows a written test plan that leads them through a set of important test cases”.
That’s correct, in a sense, but it leaves out a lot. What it doesn’t mention is the fact that manual testing is a skill that requires active thought, consideration, and discernment, the kind that quantitative measures (of which automation is quite adept at handling) fall short with.
I answered back on a LinkedIn forum post related to this blog entry by making a comparison. I focused on two questions related to accessibility:
1. Can I identify that the wai-aria tag for the element being displayed has the defined string associated with it?
That’s an easy "yes" for automation, because we know what we are looking for. We're looking for an attribute (a wai-aria tag) within a defined item (a stated element), and we know what we expect (a string like “Image Uploaded. Press Next to Continue”). Can this example benefit from improved automation? Absolutely!
2. Can I confirm that the experience for a sight-impaired user of a workflow is on par with the experience of a sighted user?
That’s impossible for automation to handle, at least with the tech we have today. Why? Because this isn’t quantifiable. It’s entirely subjective. To make the conclusion that it is either an acceptable or not acceptable workflow, a real live human has to address and test it. They must use their powers of discernment, and say either “yes, the experience is comparable” or “no, the experience is unacceptable”.
To reiterate, I do believe testing, and testers, needs some help. However, more automation for the sake of more automation isn’t going to do it. What’s needed is the ability to leverage the tools available, to help move off as much of the repetitive busywork we know we have to do every time, and get those quantifiable elements sequenced. Once we have a handle on that, then we have a fighting chance to look at the qualitative and interesting problems, the ones that we haven’t figured out how to quantify yet. Real human beings will be needed to take on those objectives, so don’t be so quick to be rid of the bodies just yet.
Friday, March 20, 2015 17:28 PM
The following comment was posted to Twitter yesterday by Aaron Hodder, and I felt compelled not just to retweet it, but to write a follow up about it.
"People that conflate being anti wasteful documentation with anti documentation frustrate me."
I think this is an important area for us to talk about. This is where the pendulum, I believe has swing too far in both directions during my career. I remember very well the 1990s, and having to use ISO-9001 standards for writing test plans. For those not familiar with this approach, the idea was that you had a functional specification, and that functional specification had an accompanying test plan. In most cases, that test plan mapped exactly to that functional specification. We often referred to this as "the sideways spec”. That was a joking term we used to basically say "we took the spec, and we added words like confirm or verify to each statement." If you think I'm kidding, I assure you I'm not. It wasn't exactly that way, but it was very close. I remember all too well writing a number of detailed test plans, trying to be as specific as possible, only to have it turned back to me with "it's not detailed enough." When I finally figured out what they really meant was "just copy the spec”, I dutifully followed. It made my employers happy, but it did not result in better testing. In fact, I think it's safe to say it resulted in worse testing, because we rarely followed what we had written. Qe did what we felt we had to do with the time that we had, and the document existed to cover our butts.
Fast forward now a couple of decades, and we are in the midst of the "Agile age”. In this Agile world, we believe in not providing lots of "needless documentation”. In many environments, this translates to "no documentation" or "no spec” outside of what appears on the Kanban board or Scrum tracker. A lot is left to the imagination. As a tester, this can be a good thing. It allows me the ability to open up different aspects, and go in directions that are not specifically scripted. That's the good part.
The bad part is, because there's sparse documentation, we don't necessarily explore all the potential avenues because we just don’t know what they are. Often, I create my own checklists and add ideas of where I looked, and in the past I’ve received replies like “You're putting too much in here, you don't need to do that, this is overkill." I think it's important for us to differentiate between not overthinking and over planning, and making sure that we are giving enough information and providing enough details to be successful. It's never going to be perfect. The idea is that we communicate, we talk, we don't just throw documents at each other. We have to make sure that we have communicated enough, and that we really do understand what needs to happen.
I'm a fan of the “Three Amigos” model. Early in the story, preferably at the very beginning, three people come together; the product owner, the programmer and the tester. That is where these details can be discussed and hammered out. I do not expect a full spec or implementation at this point, but it is important that everybody that comes to this meeting share their concerns, considerations and questions. There's a good chance we still might miss a number of things, because we didn't take the time here to talk out what could happen. Is it possible to overdo it? Perhaps, if we're getting bogged down in minutia and details, but I don't think it is a bad thing to press for real questions such as “Where is this product going to be used? What are the permutations that we need to consider? What subsystems might this also affect?" If we don't have the answer right then and there, we still have the ability to say “Oh, yeah that's important. Let's make sure that we document that.”
There's no question, I prefer this more nimble and agile method of developing software to yesteryear. I would really rather not go back to what I had to do in the 90s. However, even in our trying to be lean, and in our quest for a minimal viable products, let’s be sure we are also communicating effectively about what our products need to be doing. My guess is, the overall quality of what comes out the other end will be much better for the effort.
Thursday, March 19, 2015 18:26 PM
However, there are those days where things look to go terribly wrong, where the information radiator is bleeding red. Your tests have caught something spectacular, something devastating. What I find ironic about this particular situation is not the fact that we jump for joy and say "wow, we sure dodged a bullet there, we found something catastrophic!" Instead, what we usually say is "let's do a debug of this session, because there's no way that this could be right. Nothing fails that spectacularly!"
I used to think the same thing, until I witnessed that very thing happen. It was a typical release cycle for us, stories being worked on as normal, work on a new feature tested, deemed to work as we hoped it would, with a reasonable enough quality to say "good enough to play with others". We merged the changes to the branch, and then we ran the tests. The report showed a failed run. I opened the full report and couldn't believe what I was seeing. More than 50% of the spun up machines were registering red. Did I at first think "whoah, someone must have put in a catastrophically bad piece of code!" No, my first reaction was to say "ugh, what went wrong with our servers?!" This is the danger we face when things just "kind of work" on their own for a long time. We are so used to little hiccups that we know what to do with them. We are totally unprepared when we are faced with a massive failure. In this case, I went through to check all of the failed states of the machines to look for either a network failure or a system failure... only none was to be found. I looked at the test failure statements expecting them to be obvious configuration issues, but they weren't. I took individual tests and ran them in real time and watched the console to see what happened. The screens looked like what we'd expect to see, but we were still failing tests.
After an hour and a half of digging, I had to face a weird fact... someone committed a change that fundamentally broke the application. Whoa! In this Continuous integration world I live in now, the fact is, that's not something you see every day. We gathered together to review the output, and as we looked over the details, one of the programmers said "oh, wow, I know what I did!" He then explained that he had made a change to the way that we fetched cached elements and that change was having a ripple effect on multiple sub systems. In short, it was a real and genuine issue, and it was so big an error that we were willing to disbelieve it before we were able to accept that, yep, this problem was totally real.
As a tester, sometimes I find myself getting tied up in minutiae, and minutiae becomes the modus operandi. We react when we expect. When we get delivered to us a major sinkhole in a program, we are more likely to not trust what we are seeing, because we believe such a thing is just not possible any longer. I'm here to tell you that it does happen, it happens more than I want to believe, or admit, and I really shouldn't be as surprised that it happens.
If I can make any recommendation to a tester out there, if you are faced with a catastrophic failure, take a little time to see if you can understand what it is,and what causes it. Do your due diligence, of course. Make sure that you re not wasting other people's time, but also realize that, yes, even in our ever so interconnected and streamlined world, it is still possible to introduce a small change that has a monumentally big impact. It's more common than you might think, and very often, really, it's not your imagination. You've hit something big. Move accordingly.
Tuesday, March 10, 2015 16:49 PM
|With thanks to Tomasi Akimeta |
for making me into "TESTHEAD" :)!!!
So how has this blog changed over the past five years? For starters, it's been a wonderful learning ground for me. Notice how I said that: a learning ground for me. When I started it, I had intended it to be a teaching ground to others. Yeah, that didn't last long. I realized pretty quickly how little I actually knew, and how much I still had to learn (and am still learning). I've found it to be a great place to "learn in public" and to, in many ways, be a springboard for many opportunities. During its first two years, most of the writing that I did in any capacity showed up here. I could talk about anything I wanted to, so long as it loosely fit into a software testing narrative.
From there, I've been able to explore a bunch of different angles, try out initiatives, and write for other venues, the most recent being a permanent guest blog with IT Knowledge Exchange as one of the Uncharted Waters authors. While I have other places I am writing and posting articles, I still love the fact that I have this blog and that it still exists as an outlet for ideas that may be "not entirely ready for prime time", and I am appreciative of the fact that I have a readership that values that and allows me to experiment openly. Were it not for the many readers of this blog, along with their forwards, shares, retweets, plus-one's and mentions in their own posts, I wouldn't have near the readership I currently have, and I am indeed grateful to all of you who take the time to read what I write on TESTHEAD.
So what's the story behind the picture you see above? My friend Tomasi Akimeta offered to make me some fresh images that I could associate with my site. He asked me what my site represented to me, and how I hoped it would be remembered by others. I laughed and said that I hoped my site would be seen as a place where we could go beyond the expected when it comes to software testing. I'd like to champion thinking rather than received dogma, experimentation rather than following a path by rote, and champion the idea that there is intelligence that goes into testing. He laughed and said "so what you want to do is show that there's a thinking brain behind that crash test dummy?" He was referring to the favicon that's been part of the site for close to five years. I said "Yes, exactly!" He then came back a few weeks later and said "So, something like this?" After I had a good laugh and a smile at the ideas he had, I said "Yes, this is exactly what I would like to have represent this site; the emergence of the human and the brain behind the dummy!"
My thanks to Tomasi for helping me usher in my sixth year with style, and to celebrate the past five with reflection, amusement and a lot of gratitude for all those who regularly read this site. Here's to future days!
Friday, March 06, 2015 19:18 PMIs Your Killer App Killing You?" If that may be a bit too much hyperbole, there is no question that E-mail can be exhausting, demoralizing, and just really hard to manage.
One area that I think is really needed, and would make E-mail much more effective, is some way to extend messages to automatically start new processes. Some of this can be done at a fairly simple level. Most of the time, though, what ends up happening is that I get an email, or a string of emails, I copy the relevant details, and then I paste them somewhere else (calendar, a wiki, some document, Slack, a blog post, etc.). What is missing, and what I think would be extremely helpful, would be to have ways to register key applications with your email provider, whoever it may be, and then have key commands or right click options that would let you take that message, choose what you want to do with it, and then move to that next action.
Some examples... if you get a message and someone writes that they'd like to get together at 3:00 p.m., having the ability to right there schedule an appointment and lock the details of the message in place seems like it would be simple (note the choice of words, I said it seems it would be simple, I'm not saying it would be easy ;) ). If a message includes a dollar amount, it would be awesome to be able to right click or key command so that I could record the transaction in my financial software or create an invoice (either would be legitimate choices, I'd think).
Another option that I didn't mention in the original piece, but that I have found to be somewhat helpful, is to utilize tools that will allow you to aggregate messages that you can review later. For me, there are three levels of email detail that I find myself dealing with.
1. E-mail I genuinely could not care any less about, but doesn't rise to the level of outright SPAM.
I am unsentimental. Lots of stuff from sites I use regularly comes to my inbox and I genuinely do not want to see it. My general habit is to delete it without even opening it. If you find yourself doing this over and over again, just unsubscribe and be done with it. If the site in question doesn't give you a clear option for that, then make rules that will delete those messages so you don't have to. So far, I've yet to find myself saying "aww, man, I really wish I'd seen that offer that I missed, even though I deleted the previous two hundred that landed in my inbox. Cut them loose and free your mind. It's easy :).
2. Emails with a personal connection that matter enough for me to review and consider them, but I may well not actually do anything with them. Still much of the time, I probably will.
These are the messages I let drop into my inbox, usually to be subject to various filter rules and to get sorted into the buckets I want to deal with, but I want to see them and not let them sit around.
3. That stuff that falls between #1 and #2.
For these messages, I am currently using an app called Unroll.me. It's a pretty basic tool in that it creates a folder in my IMAP (called Unroll.Me), and any email that I have decided to "roll up" and look at later goes into this app, and this folder. There's some other features that the app offers, such as Unsubscribing (if the API of the service is set up to do that), include in the roll up, or leave in your Inbox. Each day, I get a message that tells me what has landed in my roll up, and I can review each of them at that point in time.
I will note that this is not a perfect solution. The Unsubscribe works quite well, and the push to Inbox also has no problems. It's the Roll up step that requires a slight change in thinking. If you have hundreds of messages each day landing into the roll up, IMO, you're doing it wrong. The problem with having the roll up collect too many messages is that it becomes easy to put off, or deal with another day, which causes the back log to grow ever larger, and in this case, out of sight definitely means out of mind. To get the best benefit, I'd suggest a daily read and a weekly manage, where you can decide which items should be unsubscribed, which should remain in the roll up, and which should just go straight to your inbox.
In any event, I know that E-mail can suck the joy out of a person, and frankly, that's just no way to live. If you find yourself buried in E-mail, check out the Uncharted Waters article, give Unroll.me a try, or better yet, sound off below with what you use to manage the beast that is out of control email. As I said in the original Uncharted Waters post, I am genuinely interested in ways to tame this monster, so let me know what you do.
Thursday, March 05, 2015 23:36 PM
This is a bit of a rant, and I apologize for people who are going to read this and wonder what I am getting on about. Since I try to tie everything to software testing at some point and in some way, hopefully, this will be worth your time.
I have a drug/convenience store near my place of work. I go here semi-regularly to pick up things that I need or just plain want. I'm cyclical when it comes to certain things, but one of my regular purchases is chewing gum. It helps me blunt hunger, and it helps me get into flow when I write, code or test. I also tend to pick up little things here and there because the store is less than 100 steps from my desk. As is often the case, I get certain deals. I also get asked to take surveys on their site. I do these from time to time because, hey, why not? Maybe my suggestions will help them.
Today, as I was walking out the door, I was given my receipt and the cashier posted the following on it.
Really, I get why they do this. If they can't score a five, then it doesn't matter. You weren't happy, end of story. Still, I can't help but look at this as a form of emotional blackmail. It screams "we need to have you give us a five for everything, so please score us a five!" Hey, if I can do so, I will, but what if you were just shy of a five? What if I was in a hurry, and there was just a few too many people in the store? The experience was a true four, but hey, it was still pretty great. Now that experience is going to count for nothing. Does this encourage me to give more fives? No. What it does is tell me "I no longer have any interest in giving feedback", because unless it is something that says "Yay, we're great!" then it's considered worthless. It's a way to collect kudos, and it discounts all other experiences.
As a software tester, I have often faced this attitude. We tend to be taught that bugs are absolute. If something isn't working right, then you need to file a bug. My question always comes down to "what does 'not working right' actually mean?" There are situations where the way a program behaves is not "perfect", but it's plenty "good enough" for what I need to do. Does it delight me in every way possible? No. Would a little tweak here and there be nice? Sure. By the logic above, either everything has to be 100% flawless (good luck with that), or the experience is fundamentally broken and a bug that needs to be addressed. The problem arises when we realize that "anything less than a five is a bug", and that means the vast majority of interactions with systems are bugs... does that make sense? Even if at a ridiculously overburdened fundamental level it is true, that means that the number of "bugs" in the system are so overwhelming that they will never get fixed. Additionally, if anything less than a five counts as zero, what faith do I have that areas I actually consider to be a one or a two, or even a zero, will actually be considered or addressed? The long term tester and cynic in me knows the answer; they won't be looked at.
To stores out there looking for honest feedback, begging for fives isn't going to get it. You will either get people who will post fives because they want to be nice, or they will avoid the survey entirely. Something tells me this is not the outcome you are after, if quality of experience is really what you want. Again, the cynic in me thinks this is just a way to put numbers to how many people feel you are awesome, and give little to no attention to the other 80% of responses. I hope I'm wrong.
ETA: Michael Bolton points out below that I made a faulty assumption with my closing remark. It was meant as a quip, and not to be taken literally, but he's absolutely right. I anchored on the five, and it made me mentally consider an even distribution of the other four numbers. There absolutely is nothing that says that is the case, it's an assumption I jumped to specifically to make a point. Thanks for the comment, Michael :).
Thursday, March 05, 2015 19:45 PM
With "Ruby Wizardry", Eric takes his coding skills and puts them into the sphere of helping kids get excited about coding, and in particular, excited about coding in Ruby. Of all the languages my daughter and I are covering, Ruby is the one I’ve had the most familiarity with, as well as the most extended interaction, so I was excited to get into this book and see how it would measure up, both as a primer for kids and for adults. So how does Ruby Wizardry do on that front?
As you might guess from the title and the cover, this book is aimed squarely at kids, and it covers the topics by telling a story of two children in a magical land dealing with a King and a Court that is not entirely what it seems, and next to nothing seems to work. To remedy this, the children of the story have to learn some magic to help make the kingdom work properly. What magic, you ask? Why, the Ruby kind, of course :)!
Chapter 1 basically sets the stage and reminds us why we bought this book in the first place. It introduces us to the language by showing us how to get it ("all adults on deck!”), how to install it, make sure it’s running and write our first "Hello World” program. It also introduces us to irb, our command interpreter, and sets the stage for further creative bouts of genius.
Chapter 2 looks at "The King's Strings" and handles, well, strings. Strings have methods, which allow us to append words like length and reverse written with dots ("string".length or 'string'.reverse). Variables are also covered, and show that the syntax that works on raw strings also works on assigned variables as well.
Chapter 4 introduces us to a monorail, which is a train that travels in an endless loop. Likewise, the chapter is about looping constructs and how we can construct loops (using while as long as something is true and until up to the point something becomes false, along with for to iterate over things like arrays) to do important processes and repeat them as many times as we want, or need. Also, it warns us to not write our code in such a way to make an infinite loop, one that will just keep running, like our monorail if it never stops.
Chapter 5 introduces us to the hash, which is a list with two attributes, a key and a value, as well as the ability to add items to arrays with shift, unshift, push or pop. Additionally we also learned how to play with ranges and other methods that give us insights as to how elements in both arrays and hashes can be accessed and displayed.
Chapter 6 goes into talking about symbols (which is just another word for name), and the notation needed to access symbols. Generally, the content of something is a string; the name of something is a symbol. Utilizing methods allows us to change values, convert symbols to strings, and other options that allow us to manipulate data and variables.
Chapter 7 goes into how to define and create our own methods, including the use of splat (*) parameters, that allows us to use any number of arguments. We can also define methods that take blocks by using "yield".
Chapter 8 extends us into objects, and how we can create them and use them. We also learn about object IDs to tell them apart, as well as classes, which allow us to make objects with similar attributes. We also see how we can have variables with different levels of focus (Local, Global, Instance and Class) and how we can tell each apart (variable, $variable, @variable and @@variable, respectively).
Chapter 9 focuses on inheritance, which is how Ruby classes can share information with each other. this inheritance option allows us to create subclasses and child classes, and inherit attributes from parent/superclasses.
Chapter 10 shows us a horse of a different color, or in this case, modules, which are a bit like classes, but they can't be created using the new method. Modules are somewhat like storage containers so that we can organize code if methods, objects or classes won't do what we want to do. By using include or extend, we can add the module to existing instances or classes.
Chapter 11 shows us that sometimes the second time's the charm, or more specifically, we start getting the hang of Refactoring. Using or operators to assign variables, using ternary operators for short actions, using case statements instead of multiple if/elseif/else statements, returning boolean variables, and most important, the removal of duplicate code and making methods small and manageable.
Chapter 12 shows us the nitty-gritty of dealing with files. Opening reading from, writing to, closing and deleting files are all critical if we want to actually save the work we do and the changes we make.
Chapter 13 encourages us to follow the WEBrick Road, or how we can use Ruby to read and write data from the Internet to files or back to Internet servers using the open-uri gem, which is a set of files that we can use to make writing programs easier (and there are lots of Ruby gems out there :) ).
Chapter 14 gives some hints as to where you, dear reader, might want to go next. This section includes a list of books, online tutorials, and podcasts, including one of my favorite, the Ruby Rogues Podcast. It also includes interactive resources such as Codecademy, Code School, and Ruby Koans, and a quick list of additional topics.
The book ends with two appendices that talk about how to install Ruby on a Mac or a Linux workstation and some of the issues you might encounter in the process.
For a "kids book", there's a lot of meat in here, and to get through all of the examples, you'll need to take some time and see how everything fits together. The story is engaging and provides the context needed for the examples to make sense, and each section provides a review so that you can really see if you get the ideas. While aimed for kids, adults would be well suited to follow along as well. Who knows, some wizarding kids might teach you a thing or three about Ruby, and frankly, that's not a bad deal at all!
Thursday, February 26, 2015 21:30 PM
Today's entry is inspired by a post that appeared on the QATestLab blog called "Why Are Software Testers Disliked By Others?" I posted an answer to the original blog, but that answer started me thinking... why does this perception exist? Why do people feel this way about software testing or software testers?
This long time perception has built some defensiveness for software testers and software testing, to the point where many testers feel that they are the "guardians of quality". We are the ones that have to find these horrible problems, and if we don't, it's our heads! It sounds melodramatic, but yes, I've lived this. I've been the person called out on the carpet for missing something fundamental and obvious... except for the fact that it wasn't fundamental or obvious two days before, and interestingly, no one else thought to look for it, either.
We can be forgiven, perhaps, for bringing on ourselves what I like to call an "Eeyore Complex". For those not familiar, Eeyore is a character created by A.A. Milne, and figures in the many stories of "Winnie the Pooh". Eeyore is the perpetual black raincloud, the one who finds the bad in everything. Morose, depressing, and in many ways, cute and amusing from a distance. We love Eeyore because we all have a friend that reminds us of him.
The problem is when we find ourselves actually being Eeyore, and for many years, software testing deliberately put itself in that role. We are the eternal pessimist. The product is broken, and we have to find out why. Please note, I am not actually disagreeing with this; the software is broken. All software is, at a fundamental level. It actually is our job to find out where, and advocate that it be fixed. However, I have to say that this is where the similarities must end. Finding issues and reporting/advocating for them is not in itself a negative behavior, but it will be seen as such if we are the ones who present it that way.
If people disagree with our findings, that is up to them. We do what we can to make our case, and convince them of the validity of our concerns, but ultimately, the decision to move forward or not is not ours, it's those with the authority to make those decisions. In my work life, discovering this, and actually living by it, has made a world of difference in how I am perceived by my engineering teams, and my interactions with them. It ceases to be an emotional tug of war. It's not a matter of being liked or disliked. Instead it is a matter of providing information that is either actionable or not actionable. How it is used is ultimately not important, so long as I do my best to make sure it is there and surfaced.
At the end of the day, software testers have work to do that is important, and ultimately needs to be done. We provide visibility into risks and issues. We find ways in which workflows do not work as intended. We noticed points that could be painful to our users. None of this is about us as people, or our interactions with others as people. It's about looking at a situation with clear understanding and knowing the objectives we need to meet, and determining if we can actually meet those objectives effectively. Eeyore doesn't know how to do that. Spock does. If you are struggling with the idea that you may not be appreciated, understood, or liked by your colleagues, my recommendation is "less Eeyore, more Spock".
Friday, February 20, 2015 18:35 PM
I've had a back and forth involvement with standing desks over the years. I've made cheap options, and had expensive options purchased for me. I've made a standing desk out of a treadmill, but it has been best for passive actions. It's great for reading or watching videos, not so great for actually typing, plus it was limiting as to what I could put on it (no multi monitor setup). Additionally, I've not wanted to make a system that would be too permanent, since I like the option of being flexible and moving things around.
I'm back to a standing desk solution for both home and work because I'm once again dealing with recurring back pain. No question, the best motivation for getting back to standing while working is back pain. It's also a nice way to kick start one's focus and to get involved in burning a few more calories each year. I'll give a shout to Ben Greenfield, otherwise known as "Get Fit Guy" at quickanddirtytips.com for a piece of information that made me smile a bit. He recommends a "sit only to eat" philosophy. In other words, with the exception of having to drive or fly, my goal should be to sit only when I eat. All other times, I should aim to stand, kneel, lie down or do anything but sit slumped in a chair. The piece of data that intrigued me was that, by doing this, I'd be able to burn 100 additional calories each day. In a week's time, that's the equivalent of running a 10K.
For those who have access to an IKEA, or can order online, at this moment, the Ikea LACK square side table, in black or white, can be purchased for $7.99 each. I chose to do exactly that, and thus, for less than $20, including tax, I have set up this very functional standing desk at work:
What I find most beneficial about a standing desk, outside of the relief from back pain, is the fact that it is incredibly focusing. When I sit down, it's easy to get into passive moments and lose track of time reading stuff or just passively looking at things. When I stand, there is no such thing as "passive time". It's very focusing, and it really helps me to get into the zone and flow of what I need to do. For those looking to do something similar, seriously, this is a great and very inexpensive way to set up a standing desk.
Monday, February 16, 2015 21:39 PM
Something's in the air, I think. Maybe it's a new year of possibilities, maybe it's the nature of technical advancement and growth that happens each year, but there seems to be a groundswell in opportunities for programmers, testers and DIYers to learn new stuff all the time, often very close to free, and in many cases, just plain outright for free.
Packt Publishing recently did this with their 24 gifts for Christmas, in which they offered ebooks for free each day for a limited time, and they are back at it again with their "FREE LEARNING - HELP YOURSELF!" initiative, and again, available for a limited time.
Thursday, February 12, 2015 05:55 AMHumble Braniac Book Bundle" still underway, I felt it only fitting to keep the trend going and review books that are geared towards kids and those who want to have a quick introduction to the worlds of programming, web design and engineering. My daughter and I are exploring a lot of these titles at the moment, and one that caught my eye was "Build Your Own Website", primarily because it promised to be "A Comic Guide to HTML, CSS and WordPress", and that indeed it is.
I should probably mention that by "a comic guide", it does not mean in the funny sense (though some of it is), but in the illustrated, graphic novel sense. For those familiar with NoStarch Press and their "The Manga Guide to..." series of books, Nate Cooper's writing and Kim Gee's artwork fits very well in that space. What's more, "Build Your Own Website" follows the same template that "The Manga Guide to..." books do, in that each section starts with an illustrated graphic novel treatment of topics, and then follows on with a more in depth prose treatment of each area.
So what's in store for the reader who wants to start on a mission to make their own site from scratch?
Chapter 1 starts with our protagonist Kim looking forward to her first web design class, and shows that inspired and excited first timer's desire to get in and do something. It's followed by an explanation of the tools needed to be downloaded and do the work necessary to complete the examples in the book. All of the exercises and examples can be done for free, all you need is a web browser or two, a text editor, an ftp client (the book recommends FileZilla; it's the one I use as well) and you can get a free WordPress account at http://www.wordpress.com.
Chapter 2 talks about The Trouble with HTML, and how Kim and her dog Tofu meet up with the Web Guru, who introduces them to the basics of HTML, paths and naming conventions, loading pictures and following links, the hierarchy of files and directories that make up a basic web site, and a dragon called "404". The second section goes into details about all of these including explaining about document structure, HEAD and BODY tags, the items that go in each, embedding images, and a basic breakdown of the most common HTML tags.
Chapter 3 shows us how Kim Makes Things Look Great with CSS. Well, Glinda, the Good Witch of CSS helps Kim do that (graphic novel for kids, gang. Work with me, here ;) ). Glinda shows Kim the basics of CSS including classes and IDs, inline styles and external stylesheets that can be referenced along with inline styles, effectively creating a "cascade of styles" (CSS == "Cascading Style Sheets"). The chapter also discusses using div's for creating separate sections and blocks that CSS can be applied to, and ends with commonly used CSS properties.
Chapter 4 is where Kim Arrives in WordPress City, and where the examples focus on, of course, WordPress as a composition platform. Kim gets introduced to what WordPress is, which is a Content Management System (CMS), and the conventions of creating both blogs and websites. Kim is introduced to the Dashboard, creating posts, using the Visual editor, structuring her site, using Categories and Tags, using the Media Library to store media items, and the overall Theme to be used for the site. Each of these is covered in greater detail with examples in the second prose part.
Chapter 6 brings us to The Big Launch, where Kim and Tofu navigate the realities of hosting the site and how to set up hosting so that they can display their finished site to the world. There's lots of options, and most cost some money, but not very much (plans ranging from $5-$10 a month are readily available). Registering a domain is covered, and many sites have an option to install WordPress and use it there.
"Build Your Own Website" starts with some basic HTML and CSS, and then spends the bulk of the second half of the book introducing you, the user, to WordPress. For those looking to see the nuts and bolts of making a web site from scratch, including making the navigation elements, more involved interactions, and other esoteric features of web sites outside of the CMS system that WordPress provides, you will be disappointed. Having said that, if the goal is to get a site up and running and using a well designed and quick to use interface, WordPress is a pretty good system, with lots of flexibility and ways to make the basic formatting of a site nearly automatic. Younger web development acolytes can get in and feel what it's like to design and manage a site. To that end, "Build Your Own Website" does a very good job, and does it in an entertaining and engaging manner.
Monday, February 09, 2015 21:24 PM
First off, I have to say "thank you" to my friend Jokin Aspiazu for inspiring this post today. He wrote a piece about writing a blog from your own experiences and how he found inspiration from a number of people, including me.
The statement that prompted today's blog post was the following. In it, Jokin is explaining different styles and approaches to writing a blog post, and ways in which those posts are done:
"The Michael Larsen way. He wakes up early, so he has time to write before his daily routines start. The thing is that if you write late at night, when the day is gone, you are going to be tired in body and mind. And your writing won’t be as fluid as you would like, and the next day, when you read your text, you will hear “I’m so tired…” in the background."
Having said that, there are a few other things that I do, and I find them helpful as well.
The Voice Recorder on my Phone is a Really Good Friend
Oh, Voice Recorder, how kind you are to me. You make it possible for me to capture any insane and rambling thought I might have, and not lose it to the ether. I should also add I am grateful for the headphone and mic combinations now available with SmartPhones, because they make me look like less of a lunatic while I am walking down the street.
Some great spots where I can let loose with my thoughts are on my daily commute legs. I park my car about a half mile from the train station I use because I'm cheap and don't want to pay for a parking permit, but also because it gives me a bit of a walk each day. That walk is often a golden time to think out loud (something I do regularly), and having the voice recorder lets me capture all of that. Also, it gives people walking past me the impression I'm just talking to someone on the phone, so I'm not looked at as though I'm crazy ;).
Often, the ramblings don't amount to much, and those I tend to delete at the end of each week, but every so often, I'll find something that sticks, or that gives me a reason to say "OK, I want to explore that some more". Often that will result in something I want to write about.
Every Book Has a Story to Tell
Generally speaking, I love to read. Though my book buying habits have changed with Kindle apps and e-books, I still love having a lot of choices to choose from and read from. My SmartPhone has become my secondary reading device, but my first is my laptop computer. I often find myself reading books and grabbing passages or parts of a book that I have found interesting, and I pull them over into a Notes app that I use. Sometimes they sit there for months, but every once in awhile, something will happen, or I'll see something that jumps out at me and I'll say "hey, that fits into a problem I'm dealing with".
Very often, those discoveries are not limited to technical books or books about testing. I'm a fan of history, and I love reading about interesting things that have happened in the past, both distant and more recent. I often borrow the Dan Carlin quote of "history has all but ruined fiction for me", and that shows up in the things that I read. It's rare that you will find me reading fiction, though I do from time to time. Most of the time, it's non fiction of a historical, technological, or business perspective. Those lessons often make their way into my posts.
"That Reminds me of a Testing Story..."
I owe this phrase to the Cartoon Tester, aka Andy Glover. He used it as a comical way of showing the different type of testers out there, but it illustrated something I frequently try to do. Even in the mundane aspects of my life, I find things that both inform my testing, and also inform my view of the world as I see it, which in turn informs my testing. Something as simple as a way to mow the lawn, or deal with pests in the yard, or trying to manage the delicate balance of life in my fish tanks, or the daily dilemmas my kids face, or the often interesting and noteworthy events that happen in my role as a Scout Leader, all of these shape what often becomes an analogy to software testing. They may be helpful to others, they may not, but overall, I remind myself that they are helpful to me. Whether they be specific to ideas, events, or interactions with individuals, each of them informs what I do, and gives me ideas of ways that I can do it better... maybe :).
Again, I want to thank Jokin for helping me consider this, and give me a chance to respond a little more in depth. While everything Jokin says is accurate, I hope this gives you a little more of a glimpse into how I think and work, and how I like to gather material that ultimately makes its way into my blog. If these ideas help you to write better, more frequently, or at least think a little differently about how you write, awesome. If not, again, it felt good to give some additional thoughts as to what writing "the Michael Larsen way" actually means, at least to me.
Friday, February 06, 2015 22:12 PM
NoStarch Press has a number of books that are ideally suited for younger programmers, and to that end we both decided to look at the books together. We will be doing three “for Kids" books reviews during February, provided we can get through all of them. All journeys have to start somewhere though, and this journey will start with Python for Kids. I should also mention that, for a limited time, you can get Python for Kids as part of the NoStarch and Humble Bundle "Humble Brainiac Book Bundle" offer, which comes with a lot of other additional books.
Python for Kids is written in a way that lets the user, whether they are kids or adults, readily get into the material and see how the examples work and try them out for themselves.
Chapter 1 starts out with installing and using Python 3, so right away Amber and I had to adjust to the new syntax (Codecademy’s Python modules are still based on Python 2). Be aware that there are some subtle differences with Python 3, one of the main ones being the parentheses required when using the print(“text goes here”) function (yeah, like that ;) ).
Chapter 2 introduces the user to calculate values using simple equations via operators, using parentheses to ensure the desired order of operations, and creating and using variables to store values for use in those calculations.
Chapter 3 introduces strings, lists, tuples, and maps, each of which allows the user to manipulate text in a variety of ways. Each of the approaches has rules as to how to move items and how they are represented, ranging from simple strings with are just quoted sentences, up to maps which have keys and values that can be called as needed.
Chapter 4 introduces the user to drawing methods, and in this case, that involves using a module called turtle (which in turn uses a tool called tinter). Using this tool, we can actually draw the turtles movements with lines moving left and right, moving forward and backward, as well as starting and stopping with up and down commands.
Chapter 5 focuses on asking questions and responding based on the response the system gets. For experienced programs, this i about if statements and their related commands (elif, else) and how commands allow for combining conditions (using and/or) and converting values (using int, str, float and none).
Chapter 6 talks about “Going Loopy” which, as you might guess, deals with handling loop conditions and repetitive tasks. for and while loops are covered, and break conditions are shown to, well, break out of loops.
Chapter 7 talks about ways to recycle code and reuse it defining and using Functions and importing Modules. Variable scope is also covered so as to see where values are assigned, used and passed back and forth.
Chapter 8 focuses on the things in python, otherwise known as classes and objects. this chapter covered the details of classes and how they an be used to create instances, and how objects can be created, call functions to work with objects, and assigning object variables to save values in those objects.
Chapter 9 covers the various built-in functions available in Python, those that we can import into Python programs and use directly (functions like abs, bool, print, float, int, len, etc) as well as howe to open and manipulate files.
Chapter 10 covers a variety of helpful modules, such as copy, keyword, random, shuffle, and the sys module that allows the user to control the Python shell itself, reading input with stdin, writing output with stdout, telling time with the time module, and using pickle to save user information in files (yes, there’s a module called pickle ;) ).
Chapter 11 revisits turtle, and how we can use it to draw a variety of items. including basic geometric shapes, changing the pen color, filling shapes and reusing steps in functions to combine drawing shapes and using multiple colors in one function call.
Chapter 12 covered using tkinter to make “better graphics” and my oh my does this take me back. I used Tcl/Tk back in the 90s for a number of things, and the syntax to use tkinter is very familiar. Simple shapes, event bindings so objects can move when keys are pressed, using identifying numbers to move shapes and change colors are all covered here.
Part II gives the user a chance top practice the programming chops they have developed in the first Part by making a ball bouncing game called, appropriately enough, Bounce!
Chapter 13 starts out using the tinter module, in which we can create a class for a ball and move it around the screen. Coordinates can be set so that it will bounce off of the top and corners of the screen, and a randomized option so the ball has a dynamic movement.
Chapter 14 continues with creating classes for the paddle, and using coordinates to see if the ball hit the paddle. Event bindings tie the left and right arrow keys to control the paddle, and make it so, if the player misses the ball, the game ends when the ball hits the bottom.
Part III continues the ideas so far shown with “Mr. Stick Man Races for the Exit”.
Chapter 15 shows how to make graphical images of, you guessed it, a stick man (using GIMP to make the actual images) and making the backgrounds of the images transparent so they won’t cover up other things.
Chapter 16 covers creating a Game class making a background image. By using functions called within_x and within_y, we can determine if items have collided with other items. We also discover Sprites and a sub-class, PlatformSprite, to draw the platforms on the screen.
Chapter 17 walks through the details for taking the pictures we created for Mr. Stick Man back in Chapter 15 and setting up options for the figure to move, turn and jump.
Chapter 18 finishes off the Stick Man game, and shows that putting together a working game is not trivial, but it’s also not a huge endeavor either. We focus on using the images we made for Mr. Stick Man so he appears to be running, use collision detection to tell if he hits the sides of the canvas or another object, and have Mr. Stick man drop if he runs off the edge of a platform. We also make a door that Mr. stick man can go through, ending the game.
The book also provides an Afterward that discusses some additional options for doing basic game development Alice, Scratch and Unity3D, PyGame, which is a dedicated library for making games, band a discussion of other programming languages and a super quick look at what they do , where to get them, and what it takes to make a “Hello, World!” program. The Appendix highlights keywords in Python, and the glossary defines a number of words kids might not hear in their everyday interactions.
Python for Kids clocks in at a little over 300 pages, but you won’t feel like it as you work through it. There are numerous small projects and samples to examine, and all of the solutions to the puzzles and challenges are available at http://python-for-kids.com/. While this book is geared towards kids, there’s plenty in here to keep adults engaged and focused. Often, programming books are plagued with the “implied knowledge” trap that happens so often, where small projects give way to bigger ones, without a clear understanding of how the jump was made. Python for Kids does a very good job of avoiding that problem. Having kids as the primary audience, they take their time explaining key areas, and yes, for programmers with a little work under their belts, this is going to probably seem remedial, but as an introduction to Python, I think it’s first rate.
If you are looking to give your kids a kick start in learning how to program, if Python seems like an interesting language to start with, and if you’d like to have a couple of tangible projects to play with and augment as you see fit, then Python for Kids should be on your short list of programming books… provided having fun while learning is a priority.
Thursday, February 05, 2015 21:59 PMBack to Work podcast. That phrase is "expectational debt". Put simply, it's the act of "writing checks your person can't cash" (there's a more colorful metaphor that can be and is often used for this, but I think you understand what I mean ;) ).
Expectational Debt is tricky, because it is very easy to get into, and it is almost entirely emotional in nature. Financial debt is when you have to borrow money to purchase something you want or need, and it invariably involves a financial contract, or in the simplest sense a "personal agreement" where the money owed will be paid back. It's very tangible. Technical debt is what happen in software all the time, when we have to make a shortcut or compromise on making something work in the ideal way so that we can get a product out the door, with the idea that we will "fix it later". Again, it's also tangible, in the sense that we can see the work we need to do. Expectational debt, on the other hand, is almost entirely emotional. It's associated with a promise, a goal, or a desire to do something. Sometimes that desire is public, sometimes it is private. In all cases, it's a commitment of the mind, and a commitment of time and attention.
I know full well how easy it is to get myself into Expectational Debt, and I can do it surprisingly quickly. People often joke that I have a complete inability to say "no". That's not entirely true, but it's close enough to reality that I don't protest. I enjoy learning new things and trying new experiences, so I am often willing to jump in and say "yeah, that's awesome, I can do that!" With just those words, I am creating an expectational debt, a promise to do something in the future that I fully intend to fulfill, but I have not done the necessary footwork or put the time in to fully understand what I am taking on. Human beings, in general, do this all the time. We also frequently underestimate or overestimate how much these expectations matter to other people. Something we've agreed to do could be of great importance to others, or of minor importance. It's also possible that we ourselves are the only ones who consider that expectation to be valuable. Regardless of the "weight" of the expectation, they all take up space in our head, and every one of them puts a drag on our effectiveness.
Before I offer my solution, I need to say that this is very much something I'm currently struggling with. These suggestions are what I am doing now to rein in my expectational debt. It's entirely possible these approaches will be abandoned by yours truly in the future, or determined not to work. As of now, they're helping, so I'm going to share them.
Identify your "Commitments"
Get a stack of note cards, or use an electronic note file, or take a 365 day single day calendar, whatever method you prefer, and sit down and write out every promise you have made to yourself and to others that you have every intention of fulfilling. Don't just do this for things in your professional life, do this for everything you intend to do (family goals, personal goals, exercise, home repairs, car repairs, social obligations, work goals, personal progress initiatives, literally everything you want to accomplish).
Categorize Your "Commitments"
Once you have done this, put them in a priority order. I like to use the four quadrants approach Steven Covey suggests in "Seven Habits of Highly Effective People". Those quadrants are labeled as follows:
I. Urgent and Important
II. Important but Not Urgent
III. Urgent but Not Important
IV. Not Urgent and Not Important
My guess is that, after you have done this, you will have a few items that are in the I category (Urgent and Important), possibly a few in the III category (Urgent but Not Important), and most will fall into Categories II and IV.
Redouble or Abandon Your "Commitments"
These are questions you need to ask yourself for each commitment:
- Why do I think it belongs here?
- Will it be of great benefit to me or others if I accomplish the goal?
- Is it really my responsibility to do this?
- If I were to not do this, what would happen?
This will help you determine very quickly where each of the items fall. Most expectational debt will, again, fall in categories II and IV.
For your sanity, as soon as you identify something that falls into Category IV (Not Urgent and Not Important), tell yourself "I will not be doing this" and make it visible. Yes, make a list of the things you will NOT be doing.
Next is to look at the items that fall into Category III. These are Urgent but Not Important, or perhaps a better way to put this is that they are Urgent to someone else (and likely Important). They may not be important to you, but another person's anxiety about it, and their visible distress, is making it Urgent to you. It's time for a conversation or two. You have to decide now if you are going to commit time and attention to this, and figure out why you should. Is it because you feel obligated? Is it because it will solve a problem for someone else? Is it because you're really the only one who can deal with the situation? All of these need to be spelled out, and in most cases, they should be handled with a mind to train up someone else to do them, so that you can get out of the situation.
The great majority of things you'll want to do, and want to commit to, will fall in Category II. They are Important, but they are not Urgent (if they were Urgent and Important, you'd be doing them... probably RIGHT NOW!!!). Lose weight for the summer. Learn a new programming language. Discover and become proficient with a new tool. Plan a vacation for next year. Read a long anticipated book. Play a much anticipated video game. These are all items that will, in some way, give us satisfaction, help us move forward and progress on something, or otherwise benefit us, but they don't need to be done "right now". Your goal here is to start scoping out the time to do each of these, and give it a quantifiable space in your reality. I believe in scheduling items that I want to make progress on. In some cases, getting a friendly "accountability partner" to check in on me to make sure I'm doing what I need to do is a huge incentive. A common tactic that I am using now is to allocate four hours for any "endeavor space". I also allocate four hours in case I need to "change tracks" and take care of something else. This may seem like overkill (and often, it is), but it's a shorthand I use so I don't over-commit or underestimate how long it will take to do something. Even with this model, I still underestimate a lot of things, but with experience I get a bit better each time.
This of course leaves the last area (Category I), the Urgent and Important. Usually, it's a crisis. It's where everything else ends up getting bagged for a bit. If you ever find yourself in an automobile accident, and you are injured, guess what, your getting treatment and recovery rockets to Category I. In a less dire circumstance, if you are the network operations person for your company and your network goes down, for the duration of that outage getting the network to work is Category I.
I hate making promises I can't keep, but the truth is, I do it all the time. We all do, usually in small ways. Unless we are pathological liars, we don't intend to get into this situation, but sometimes, yes, the expectations we place on ourselves, or the promises we make to others, grow out of proportion to what we can actually accomplish. Take the time to jettison those things that you will not do. Clear them from your mind. Make exit plans for the things you'd really rather not do, if there is a way to do so. Commit to scheduling those items that provide the greatest benefit, and if at all possible, do what you can to not get into crisis situations. Trust me, your overall sanity will be greatly enhanced, and what's more, you'll start to develop the discipline to grow an expectation surplus. I'm working towards that goal, in any event ;).
Wednesday, February 11, 2015 20:17 PM
It's with this in mind that I want to alert TESTHEAD readers to a special offer. NoStarch Press and the folks at Humble Bundle have teamed up to offer a jump start for kids who want to learn programming and other technical skills. This is really significant right now for me, as I have a 14 year old daughter in the early stages of learning how to program.
What could that special offer be? I'm glad you asked ;).
Until February 18, 2015, 2:00 p.m. EST, Humble Bundle will be offering the "Humble Braniac Book Bundle". This is a variety of e-books geared towards kids so that technical subjects are more accessible to them. What makes this bundle interesting is that YOU get to decide how much you want to pay for it. Yes, you read that right, you get to name your price for a selection of books that, if purchased separately, would cost more than $250.
What do you get with this deal? There are three levels:
1. You can pay any amount of money (seriously, you decide) and for that payment, you will receive:
- Ruby Wizardry: An Introduction to Programming for Kids
- Lauren Ipsum: A Story About Computer Science and Other Improbable Things
- The Manga Guide to Electricity
- Snip, Burn, Solder, Shred: Seriously Geeky Stuff to Make with Your Kids
- The LEGO Adventure Book, Volume 1: Cars, Castles, Dinosaurs & More!
2. Humble Bundle keeps track of the average payment. For those willing to pay more than the average (which at the time of this writing is $13.08), NoStarch will sweeten the deal and throw in:
- LEGO Space: Building the Future
- The Manga Guide to Physics
- Python for Kids: A Playful Introduction to Programming
- Incredible LEGO Technic: Cars, Trucks, Robots & More!
- Build Your Own Website: A Comic Guide to HTML, CSS, and WordPress
3. Customers who pay $15 or more will receive all of the above, plus:
- Steampunk LEGO
- The LEGO Neighborhood Book: Build Your Own Town!
As if that weren't enough, all Humble Bundle promotions let purchasers choose how much of their money goes to the publisher (NoStarch), Humble Bundle, and charity. The two charities supported by this bundle are the Electronic Frontier Foundation (EFF) and the Freedom of the Press Foundation.
NoStarch has been great to me for many years. I really appreciate their willingness to provide me books to review. To be transparent, I have many of the books in the list already (that NoStarch gave me for free to write reviews), but there are several in this bundle that I don't have, and I have bought in for the Full Monty :).
This Humble Brainiac Book Bundle ends February 18, 2015 at 2pm EST time, so if you want to take advantage of it, best get a move on!
UPDATE: As of February 11, 2015, The Humble Brainiac Book Bundle just got a little sweeter. Three new books just got added to the "pay more than the average" bundle. Those new books are:
- The Manga Guide to Calculus
- Beautiful LEGO
- The LEGO Build it Book, Volume 1: Amazing Vehicles
If you have already purchased your Humble Brainiac Book Bundle, go to the confirmation email and click on the download link... the new books have been added and you can download them from there. Yes, they've been added to orders already purchased. Nice job, Humble Bundle and NoStarch... well done :)!!!
Tuesday, February 03, 2015 20:42 PM
Imagine my smile when I read "The Incredibly Obvious Secret: Finding (and Fixing) Product Bugs Through a Close Relationship Between Test and Customer Support”, written by Jay Kremer and posted to the Zoozk Engineering Blog. How, might you ask, would I think to be looking at an online dating web sites engineering blog? For that, I have to thank the great group of software testers who attend the Bay Area Software Testers Meetup group. One of them is the Test Manager at Zoosk, and he told me about this article and suggested I have a look. OK, yeah, that test manager is Jay ;).
In any event, I felt a lot of kinship with this post, and I wanted to have a chance to reply to it and say that, yes, there are organizations that do have this kind of relationship in addition to Zoosk. I work for one of them.
At Socialtext, if a customer reports an issue, the first line of contact is a real human being who walks through the issue with them. The support engineer can often see the the potential value of the bug in question (it’s real, it’s reproducible, it’s potentially impactful, and it has a high probability of affecting a number of people). At this point, that support person can contact us, or we can go over to them and say “hey, anything interesting coming in?”, and they will tell us what they are working on.
Socialtext has the approach that bugs get on the Kanban board as soon as we can identify and reproduce the issue (again, the easier it is to quantify the problem, the easier it is to fix, generally speaking). It is not at all uncommon to have a bug be reported one day, scheduled in the Kanban and picked up on the second day, a fix committed and tested, and then merged to our staging environment in short order thereafter. We are a company that runs most of our businesses processes on our product. This makes us, essentially, the primary alpha and beta testers, which in turn allows us to address bugs quickly, at least most of the time. It seems that Zoosk has a similar philosophy.
I have often said that customer support engineers make for awesome testers, and software testers can often make amazing support engineers. Like Jay, I believe this is a symbiotic relationship that needs to be enhanced and encouraged, and more testing organizations should make that connection and work closely with their support teams, not just for when they report issues. Software testers can learn a lot about the true state of their product and the workflows that really matter by spending some quality time with the support team. I think you will be pleasantly surprised with what you learn.
Friday, January 23, 2015 16:12 PMUncharted Waters" blog posts. The first is the thought and consideration that goes into the lead up to, the writing of and the making public of the post. The second is what happens usually within the first twenty-four to forty-eight hours after the post goes live, because I will get a comment or a thought from someone that will make me slap my head and say "Oh! Yes! That! That would have made sense to say!"
In my most recent Uncharted Waters entry "Heroes, Hubris and Nemesis", I decided to take on the "hero culture" that tends to exist in various companies, and the fact that, instead of them being shining examples of excellence, instead, those so called heroes are very likely the bottleneck to their team. I then spent the rest of the article giving advice about how to deal with all of that.
"Oh! Yes! That! That would have made sense to say!"
Here's where I think we really could make a difference. What if, instead of calling the person that does these things a hero, we used terminology like this instead? What if, for the people that hoard expertise, we called them out for doing exactly that? What if we made the perpetual online and self-flagellating martyr of the team out to be the problem rather than the savior of the organization? Would behavior change? I believe the answer is yes.
Alan Page and Brent Jenson talked about this in Episode 14 of "AB Testing" back in December. They likewise described a "hero" on their team and the way they did things. Brent described the challenge he had with a person that had no desire to teach others, because if others were taught, they wouldn't be special any longer. In addition, what was really happening was that, due to the existence of this particular hero on the team, management didn't have to invest the time or emotional energy in the rest of their team, because their hero was there to save the day.
What if, instead of extolling the hero, this team instead called out that behavior as anathema to their success? What if management had instead insisted that this person be given advancement based on how well and how frequently this person crossed trained the team, and made it clear that any opportunity for advancement would hinge on their ability to teach others and bring the whole team up to that person's level? What if, instead of praising the "hero" instincts, the management instead called out their opaque approach and unwillingness to share as fatal detriments? Do you think the entire culture of that team would have changed? I certainly do. One of two things would have happened. Either that person would have worked hard to train up the team, or that person would have left of their own accord because they would realize that their "heroics" were not going to be their differentiation. Either way, the team would have been better off, because the team as a whole would have to deal with the imbalance of skills. By relying on the hero, management was taking the lazy way out. They (management) didn't have to invest the time and energy in the rest of their team, the hero got to play the public martyr, and everyone was happy... at least until a crisis came where the hero couldn't step up.
My solution was to make a team of heroes, but perhaps the better way, the more appropriate way, is to try to remove the hero moniker from those who are not working to help the entire organization succeed. It would take a lot of guts, but I think the teams willing to do the latter will long term be better off than those who don't.
Monday, January 26, 2015 22:11 PM
The Association for Software Testing (AST) is holding its tenth annual conference this year. The Conference for the Association for Software Testing (CAST) will be held in downtown Grand Rapids, Michigan on August 3-5, 2015. Ten years is a cause for celebration in my book, and we are throwing a party. I say "we" because I am part of the Board of Directors and the President of AST, and therefore this conference is a big part of what 2015 will be shaping up to be for me.
The theme of the conference this year is “Moving Testing Forward”, and to that effect, I want to reach out and encourage my fellow software testers, programmers, quality advocates, or whatever area you see yourself, to put in a proposal for this year’s conference.
My belief is that the best way to move testing forward is to do so with more voices, and CAST is well known for being the conference where new and unique voices are heard. Several great speakers have developed over the years, and CAST has been quoted as being where many of them first had the opportunity to present. We want to encourage that approach further, so I am sending out a personal call to those software testers who might still be on the fence.
- Maybe you are a relative newcomer.
- Maybe you have not spoken in front of a large group before.
- Maybe you work in an industry and an environment where you think “oh, nobody would be interested in hearing what I have to say”.
Let me assure you, that last one is categorically false. In my opinion, the best talks and presentations are not built around theories or tools. They are built around real world experiences, the good, the bad, the occasionally ugly, and the often unintentionally hilarious.
I had the pleasure of having dinner last night with a couple of friends, both involved in various levels of software delivery, including software testing, and the stories we were sharing, and frequently laughing about, came from our core experiences, what we have witnessed, and what we have learned from those experiences. As I listened and participated with my friends, I mentally ticked off six or seven talk ideas and said “wow, these stories, and the lessons learned from them, would be so great if we could get them out to more people”. I have a pretty good feeling that several of these conversations will become talks at CAST, but the main point I want to encourage is that “your real world experiences make for great talks!”
The Call for Participation for CAST 2015 ends on January 31, 2015. That’s a little under ten days from now. I’d like to encourage all of you, if you are able, to propose a talk for CAST. How are you moving testing forward? There’s a very good bet that what you are doing (or perhaps wish you were doing, or perhaps not doing) will be of great value to your fellow software testers. We encourage people from all arenas, all experiences, and all backgrounds to come share in each others ideas and approaches. There will be a lot of fun things happening at CAST 2015. We want you to be part of it :).
Wednesday, January 21, 2015 21:55 PMRyan Arsenault and the folks over at uTest for showcasing me in their first "Ask the Expert" blog entry. The questions I was asked centered around career choices for testers and ways that we can succeed, or at least do better than we are now.
I cannot help it, part of me feels very strange using the word "expert" to describe myself at anything. I'm happy to use words like experienced, educated, practiced or even proficient, but "expert" carries a strange weight to it. It's so subjective, and it feels like, once you've been branded one, that there's only one way to go from there, and that's down. Moreover, I don't really believe there is such a thing as an "expert", because that implies that that person has learned all there is to learn and has mastered all there is to master... and that's just fundamentally wrong on so many levels.
I've come to realize that we all own our experiences, and that we all have opportunities to learn from our successes and our mistakes (oh, how much I have learned from my mistakes). This is why I have no problems talking about my experiences or my observations. They are mine, and as such, are certainly open to interpretation, or debate, or scrutiny, or even outright ridicule at times, but they are wholly mine. Expertise, however, is a judgment call. I personally have very little trust in people who proclaim themselves to be "experts" at anything. However, I place a lot of credence on other people who tell me that someone is an expert. Why? because they are witnesses to the skill, acumen and judgment being displayed, and they can then decide if the term "expert" makes sense.
It also often comes down to "expert compared to who?" I have many interests, and things that I spend a lot of time getting into. When I tell people I was a competitive snowboarder for several years, it conjures up an image in their minds; I must be an expert snowboarder. They may even watch me ride, and come to that conclusion because of the technique I can muster and the terrain I can ride on. Yet put me alongside other riders I used to compete with, and any questions of my so called "expert" level goes right out the window. That doesn't take away from what I have learned, the events I've participated in and the medals I won, but to use those hallmarks to say I am an "expert" is, in my mind, misleading. Still, to others who have never raced, or are newcomers to the sport, to them I am an expert, insomuch as I can show or teach them things that they do not know.
Again, I thank uTest for giving me an opportunity to share my experiences, and I am honored to be part of their "Expert" panel. I don't know if I deserve the moniker, but they seem to think so, and so do their readers, and ultimately, I guess that just means it's up to me from here on out to either prove them right, or prove them wrong. Here's hoping my actions and efforts do more to strengthen the belief in the former, rather than proving the latter ;).
Wednesday, January 21, 2015 18:52 PM
- Go to the link and subscribe so that they can contact you when the survey goes live.
- Participate in the survey and give you honest feedback.
- Make a point to tell as many testers as you can to likewise participate in the survey.
Tuesday, January 06, 2015 21:23 PM
Many books that talk about designing for accessibility tell you a lot of the what and the way around accessible design, but don’t put much emphasis on the how. Jeremy Sydik’s book “Design Accessible Web Sites: Thirty-six Keys to Creating Content for All Audiences and Platforms" does an admirable job on explaining the "how" of accessible design.
This book was originally published in 2007, so the technical underpinnings of the web have certainly changed a bit, but the overall message of “Design Accessible Web Sites” is still very relevant and still very usable. In the current rush for the latest and greatest, with frameworks abounding to handle just about every conceivable interaction, there comes a need for programmers and site designers to step back and consider if they are making it possible for the most people to use the sites and access the content they provide.
The core of the book revolves around what Sydik calls the Ten Principles for Web Accessibility:
- Avoid making assumptions about the the physical, mental, and sensory abilities of your users whenever possible.
- Your users’ technologies are capable of sending and receiving text. That’s about all you’ll ever be able to assume.
- Users’ time and technology belong to them, not to us. You should never take control of either without a really good reason.
- Provide good text alternatives for any non-text content.
- Use widely available technologies to reach your audience.
- Use clear language to communicate your message.
- Make your sites usable, searchable, and navigable.
- Design your content for semantic meaning and maintain separation between content and presentation.
- Progressively enhance your basic content by adding extra features. Allow it to degrade gracefully for users who can’t or don’t wish to use them.
- As you encounter new web technologies, apply these same principles when making them accessible.
Part 1 lays out the case for why accessibility is important (it’s good business, it;s the right thing to do, it’s the law in many places, and accessible sites are more usable for everyone). This section also steps through a variety of disabilities, some of which we automatically associate with Accessibility (visual, auditory and mobility impairments, as well as a variety of cognitive impairments and those who deal with a combination of the previous issues, specifically due to the results of aging). It also introduces the first eight “keys” of preparing for making an accessible site, including planning, making multiple access paths, avoiding the WET trap (WET stands for “Write Everything Twice”), and to set a solid foundation of accessibility testing, which really does require sapient skills to do. Automation can tell you if a tag is there or not, but it cannot tell you if a user experience for a disabled user is comparable to one for a normative user.
Part 2 focuses on building a solid structure for your pages, with thirteen additional keys to help you design your pages with accessibility in mind, such as keeping the site design simple, removing style from structure as much as possible, using links effectively, designing interfaces that emphasize the selecting of elements and actions rather than drag and drop movement, breaking away from tables and creating forms that are easy to follow and intact with without losing their interactivity or power.
Part 3 focuses on the visual aspects of the web, specifically how we deal with photographs and video clips. the nine keys in this section focus on selecting colors that contrast and don’t blend together, utilizing alt tags as more than just a place holder for generic text, and encouraging a design that can describe itself and allow the user to “see” the whole picture, or “hear” the whole story, even if those options are not on the table.
Part 4 looks at some additional aspects of accessibility and rounds out the last six of the thirty-six keys with how to work with documents that are not traditional for the web, options for dealing with PDF files, scripted output, as well as with Flash and Java apps.
Part 5 is a reference to a variety of web accessibility guidelines including WCAG, US Section 508, and examples from around the world, including Australia, Canada, European Union, Japan, United Kingdom, United Nations, etc.
To design sites that are accessible, we have to think differently, but the differences need not be radical. Also, accessible design need not be boring design. There are plenty of techniques and approaches to use that will help make sites easier to interact with for a broad population, and for those willing to embrace this approach, having the capability of designing sites that are accessible could be a differentiator for you as compared to other designers, programmers and testers. As the tenth principle says, "As you encounter new web technologies, apply these same principles when making them accessible.” Technology moves on, but the advice and methodology is still sound, making ‘Design Accessible Web Sites” an evergreen title to consider for years to come.
Thursday, January 01, 2015 19:38 PM
First off, Happy New Year to all of my friends and readers out there. I wish you all a great 2015 with the hope that what you strive to do and accomplish will be met.
About two years ago, I was given the opportunity to do a talk for a conference that would be happening in India called ThinkTest. My friend Smita Mishra extended an invitation to me to participate, and while I could not actually travel to India at that time, we decided to try something unorthodox. Why not video-tape my talk, and we would whittle it down to a presentation length and make it available to those who wanted to view it? Since I found myself in a hotel room near Chicago for an extra day, I decided to turn the room into a makeshift film studio and talk about my career as a software tester, its ups and downs, and other things that helped make it a reality.
Sadly, due to an automobile accident that incapacitated Smita for awhile, the conference had to be canceled. The talk project was, of course, put on hold, and then, over time, other initiatives took center stage, and I forgot about the talk and the recordings... that is, until a couple of months ago. Lalit Bhamare of Tea Time With Testers, asked me if we could use the material for his new project, TV for Testers. I said "sure", and he then proceeded to gather the clips I had recorded and delivered to Smita into the talk that is presented here.
In Through The Side Door
First, I feel it only appropriate to say... this is a long talk! I had originally recorded it with the idea that we would cherry pick the best parts and make a shorter presentation (something around forty minutes) but through correspondence with Lalit, he asked if it would be OK to present the entire talk, in its (mostly) unfiltered form. He felt that there was a lot of insights I offered that would be of value to those who, likewise, came to their careers from peripheral avenues, and the asides and segues, in his opinion, actually added to the value of the talk. So, again, that's what we decided to do. Lalit posted the talk on TV for Testers today, and I am now saying to those who would like to check it out, please do so.
Again, my thanks to Smita for asking me to put this together, and my thanks to Lalit for deciding he wanted to have it be seen. If you take the time to watch it, I also thank you for doing exactly that. To borrow from and paraphrase the recording artist Seal, "I hope you enjoy the presentation; it was the best material I had at the time" :).
Tuesday, December 30, 2014 15:58 PM
I am one for whom Dan Carlin's phrase "History has all but ruined fiction for me" rings true. I find that the real life exploits of historical figures, and the reality of their worlds, tends to make many aspects of fiction story telling, well, just not hold much interest. Fictional Mob Boss or the struggle for Alexander the Great's throne? Mythical marauders or real life Scythian warriors and their waves of descendants? Seriously, how can anyone top the Mongols, in fiction or elsewhere?
Still, there's a part of me that loves the "what if's" of both the near and distant future, with the possibilities, be they wondrous or terrifying, that make science fiction a place I enjoy spending time in. Added to that is my love of Role Playing Games, especially those that come from Japan (think the Final Fantasy series, Shin Megami Tensei, and Suikoden). Also, I love Animé series that look at the struggles of everyday people against overwhelming odds (think "07-Ghost" or "Gantz"). When something hits that sweet spot of all of those interests, and still focuses on the humanity of story telling, I pay attention. Add to that having an author of such material being a personal friend? Well, what else can I say? I want to share, and share I shall :).
M.C. Muhlenkamp is putting together a series of short stories that feel one part ancient Rome, one part Eurasian steppe, one part Japanese RPG and one part Young Adult dystopian struggle. Weave these all together and you get what is shaping up to be "Markram Battles". More to the point, "Markram Battles" takes a cue from the past, in that it is really a serialization. If you liked the idea of Alexandre Dumas publishing his "Three Musketeers" in small pieces, waiting to see where and when the next "dose" will appear, then here's an opportunity to do exactly that.
Genesis of an Uprising" and "Omens of Doom") focus on the interactions between Seven, a Unit Leader whose sole purpose is to lead recruits in battle, and Thirteen, an unwilling recruit who refuses to play the game, at least not in the way that the Markram want her to play.
The chapters are short and taut. The characters are believable even in their other-worldly space. Little in the way of useless exposition is given. The reader is expected to go with the story and figure out the world and its parameters without long winded explanations as to what has gone on before, except where it makes sense to give context to the situation. Even in the first short sections, you find yourself caring for the characters and wondering what will happen next, on both sides, Markram and human.
The cover sets the tone and the mood of the stories, and in this way, I can't help but feel drawn to parallels made in video games like "Shin Megami Tensei: Digital Devil Saga" or Anime like "07-Ghost", each with a fight to survive ethos and a shadowy "other" pulling the strings. The stories feel like they are designed for a YA audience, but don't let that dissuade you, as the themes and the stories focus are strong enough for all ages.
The serialization approach works well for this series. It feels like a Manga without the pictures, and that's meant as a solid compliment. Two issues in, I find myself asking "OK, so when will number three be ready?" If stories about human spirit and desire to not cave to the rules of an unfair system hit a sweet spot for you, give these stories a try. They are quick reads, and at $0.99 apiece, less expensive by far than a manga series, and every bit as engrossing and satisfying. Yes, MC and I are friends, but I'd dig this series even if we weren't ;).
Monday, December 29, 2014 19:17 PM