Just two weeks ago, I was in Portland, Oregon, with my family of five, about to pick up a rental car from Hertz. It was 9:00PM Pacific, about midnight back home; the rental area was nice and empty …
It was still nice and empty forty-five minutes later when we received our vehicle.
It turns out the computer system was down from 1:00AM that morning until 3:00PM that afternoon. During that time, people still returned (and checked out) automobiles, and the technical staff lost them.
That’s right, they lost cars — knowing the car is on the lot, in one of a few hundred places, but not exactly where.
Then things get weird.
“Collaborative tools” is a large bucket. Wikis, multi-edit documents, shared spaces, asynchronous editing, chat tools, video conferencing, terminal multiplexing, and a variety of other options can all be considered “collaborative tools”. The goal is to encourage people to actively work on things together, to make changes in real time, or where asynchronous edits can be versioned so that no information is lost. Below are some of my favorite ways to use collaboration tools, and what you can use to get similar results.
Screen sharing can be performed in a variety of ways. When working at the console, or command line level, there are tools that are referred to as “terminal multiplexers”. Terminal multiplexing is a technique where you can open up a terminal window and either display several windows separately, or watch them in real time in the same pane. The two I am most familiar with are GNU Screen and tmux. Both allow the user to open several windows from the same terminal shell, but what really makes these tools valuable is the ability to share the screen and interact with each other at the same time. The first thing we do each day when we get to work or consider ourselves “on the clock” is to go to our shared development server and start a screen session. If we find ourselves in need of guidance, or if we have questions, the next question is “what is your screen session?” By doing this, we can jump on the screen session and interact together to see what is happening. In the process, we hand control to each other as needed.
In addition to using multiplexer applications, there are ways to share an entire desktop with your team mates. Google Hangouts allows users to share their screens and change views, and join.me allows you and your team mates to interact and pass control to each other.
Wikis and Document Shares
Wiki is Hawiian for “quick”. A wiki is a web page with an ‘edit’ button that allows you to create many pages, and link them to each other, very easily. Since Ward Cunningham invented the wiki in 1994, we have continued to see faster pages with more incremental changes. Google Documents and Etherpad are examples of document sharing where you can edit text at the same time and visualize who is editing what. This approach lets teams edit or create documents where sections can be worked on simultaneously. Changes can be examined and agreed to in real time. This is exceptionally helpful with test design, executing tests, and seeing output or anomalies together. Two people in front of a screen is great, but if that’s not an option, collaborative editing sessions can do the same thing, and there’s a paper trail to prove it.
There are a variety of chat tool options, ranging from the grand-daddy of them all, Internet Relay Chat (IRC), to more modern chat tools like GChat and Skype. All of these examples mentioned are free! Many chat tools allow recording of sessions (our group chats are archived every 24 hours). We can also set up private chat sessions outside the main groups. These options allow testers and programmers to communicate in real time. Going back to review sessions, I can see the light go on, and understand where the “A-ha!” moment occurred. Chat sessions are also good for sharing links and checking each others work for errors or missing test cases.
It’s In the Way That You Use It
With a little time, and communicating with your team, you could easily put together a broad array of useful tools that are open source and free to use. Regardless of what you use, the goal is to help others “work with me and see what I see”. Given enough practice, the process of collaboratively sharing ideas, along with active create, edit and debug sessions, will help you pick up many valuable new skills.
Disclaimer: I work for Socialtext. We make collaborative tools. Having said that, this article offers a tool agnostic approach, emphasizing goals and methods rather than specific tools to accomplish the job.
Developing and maintaining a pipeline of work, existing clients, and potential clients has been one of the more tricky aspects of doing freelance work so far. When I was starting out, all I had was a vision of how I wanted my career to progress. Unfortunately, that vision didn’t come with actual work built into it. Over time, my pipeline of work has improved a bit and I’ve of course learned a few lessons.
Harvard Business Review has data suggesting that freelance workers are getting up to 84% of their work from word of mouth, not advertising or recruiters or freelance sites.
The way HBR dissected the data is pretty specific of course, they classify based on number of hours worked and then again by age, but the study matches well with my experience.
Lets take a closer look at what is happening.
Agile has fostered a fair bit of change in how software development happens. Change in what people value, how people work together, and changes in openness and and candor. For a long time, software was a black box, or close to it at least. A business feeds in some sort of information about the problem they are trying to solve in the form of requirements, and maybe six months later they get something. That something may or may not have solved the problem. If the problem wasn’t solved, the cycle begins anew.
This post is, in a way, a response to Justin Rohrman’s post about “Ageism in the Tech World“. Does it exist? Yes. Is it detrimental? It certainly can be. Does it have to be? No.
Overcoming ageism, or any other “ism”, requires taking control of our own career trajectories. How do we do that? We make choices and invest our efforts in areas that will ultimately prove beneficial.
Yes, it’s that simple.
No, it’s not easy.
No, there is no one size fits all method to doing this, but here are some things that I have done to address this in my own career.
Ron Jeffries, signer of the Agile Manifesto and co-creator of Extreme Programming, has a new book (currently in beta) out titled The Nature of Software Development. The Nature of Software Development is an accumulation of experience and ideas Ron has collected over his past 50 years of software work. The work is divided into two segments, The Circle of Value which explains his ideas on how software work should be done, and Notes and Essays which are questions from readers and reviewers as well as anecdotes from his experience.
When I ask friends why they moved to a new company, the most common answer I get is they were “just looking for something different”. When salary, benefits and other side “perks” are not part of the equation, their answers tended to end up being one of these three things:
- To learn something new.
- To be challenged and do better.
- To be surprised.
That tells me those things aren’t happening in their old environment, and the person believes they couldn’t make those thing happen — the change is impossible given the work, or the politics, or something else. The answer that comes to mind may be to pull up stakes an start over elsewhere. Sometimes, that is the right answer, but I have to wonder – how far did they push before coming to that conclusion?
Before you quit that old job, I’d like to offer you a challenge.
If you said to yourself “I just got hired today. I want to make the next 30 days a blueprint for success”, what would you do?
Software development hasn’t existed for all that long now, maybe 60 or so years. Things have changed a little during that time, and some things have come full circle. One significant shift that has occurred, is a change in how we think software work should be done. This shift can be seen in the way our development teams are put together.
Hello to everyone who reads “Uncharted Waters”. I am excited to be one of the writers to contribute to this space, and looking forward to collaborating with Matt and Justin on future posts. For those who do not know me, I’ve been a software tester for twenty years (a lot more about that below) and I have had a wide and varied career, touching many different industries and disciplines. Through them all, the primary theme has been to test software and devices, and to encourage other testers to learn more, do more and dare more. It’s my hope that I can continue that tradition here and in future posts.
I officially became a “software tester” in 1994, when I was working with Cisco Systems. Actually, the title I was given was “Development Test Engineer”. I’ve had a variety of job titles since then, such as Application Engineer, QA Engineer, QA Tester, Lead QA Engineer, and other variations that HR departments deemed necessary. I was given the choice of choosing my own title (within reason, of course) when I went to Sidereel. I asked them “Can my title be “Software Tester?” After a quizzical look, they said “Sure, if that’s what you want.” Only once in my career have I had my actual work discipline in my official title. By any other name, do we not still test software the same?
The past twenty years have taught me that experiences with testing are all unique. I have worked for seven different companies. Each has had its own take on what testing is and what made testing “good”.
At Cisco, planning your work and working your plan was a huge part of the job. In the 90s, ISO 9000 was all the rage. I would create test plans, trying to think of every possible area, only to have it turned back with “sorry, we need more detail”. I learned the art of “turning the requirements sideways”. Every listed requirement was reworded into a test case. Did it help me test better? It made for a massive checklist, but I’m not sure it did much to improve the quality of the code.
Testing Virtualization Software
Wow, what a blessing. The systems were streamlined. It didn’t matter what the real machine hardware was, the virtual machine abstracted away everything. One machine to be used everywhere. We did not have voluminous test plans. Instead, we did lots and lots of bug reporting, followed by numerous bug fixes and retesting. Each setup and teardown was clean and seamless, but we worked with a lot of images for all the possible software combinations.
Synaptics was all about touch. Everything had some aspect of how the body carried electricity. Additionally, I learned a lot about environments, including extreme heat, extreme cold, extreme wet and dry, extreme turbulence and various other conditions, not to mention getting pretty handy with an ESD gun. It was heady and scientific. I often struggled to understand what I was doing. When I did understand it, though, what a ride!
Time For Video Games
“Testing games; that has to be the most fun job ever!” Truth is, do not mistake playing games with testing games. For example, take a movable character and rub it over every surface to see if you fall through any cracks. Repeat for every scene. It’s not fun, though that was just one aspect of testing games. The most memorable experience was the language barrier. Every test plan, bug report and test report had to be reviewed for consistent language use. A QA Liaison would take all of our test artifacts and translate them into Japanese. The next day, we’d receive replies from Japan (translated back into English) that we’d review in our daily meetings. I learned a lot about the precision of words. It takes discipline to write unambiguously (or as close to that as possible).
Immigration Law Case Management
Case management for foreign nationals requires strong analytical skills and attention to detail. My testing had to pass legal audits with the tiniest details intact. My best testing tool was an abundant use of personas, making up entire families and back stories, to see if I could follow them all the way through the necessary workflows. It required learning many corner cases and scenarios, but it proved worth it in the long run.
Testing a Video Content Site
The world of television required a total rethinking of who my customers were at any given time. The end users, the studios that generate content, aggregation services that gather links, the advertisers, etc. are all different customers, each with a different expectation. The ability to focus and defocus rapidly proved extremely valuable.
Today, I work for a company that creates collaboration tools. Our system focuses on one piece flow. There are no bugs while a story is in process. We talk about issues, rework, missed test cases and under-scoped features. We deal with bugs when they hit our staging server (which is our production environment). Testers get involved early in the game. To minimize rework and story churn, we aim to be at every story design and kickoff so we can articulate issues with requirements or implementation ideas.
Is There a Right Way to Test?
Anyone looking to say “there is a right way to test” will feel silly if they trace my path. There are many right ways to test. They are as unique as each organization. I am certain of one thing. Each company helped build skills that informed every job that followed. I’ll learn a lot more in the next twenty years, though I can’t say how many companies or ways of testing that will include.
Next time you are at the office, take a look at the average age of the folks around you. The people doing the tech work; programmers, testers, ops and admin people. You’ll probably see some folks in their 20s, a few more in their 30s. From there the numbers quickly drop off.
My data sample is admittedly biased, and definitely unscientific. I’ve worked at mostly early stage startups for the past few years and those have a tendency to attract younger people for a variety of reasons.
Probably partly because startup benefits usually aren’t very competitive, and partly because of the crazy hours most tech startups expect from people.
The question of why people leave tech so early is interesting.
I want to know where people are going when they leave hands on tech jobs, and why.