Tuesday, April 18, 2017

שתיים ועוד שלוש הן חמש

Two plus three is five

Source: Every conversation between a parent an a child in four conversations (link in the text)
- אני יכול את זה?
- לא? 
- אולי לא הסברתי את עצמי היטב, ביקשתי כי אני רוצה את זה. 
- למעשה, הבנתי.
- אולי אינך שומע אותי היטב, אני רוצה את זה.
הקטע הזה ממשיך עוד קצת (והרבה יותר מוצלח בלי התרגום החובבני שלי) ואפשר לקרוא את כולו כאן (ומשם גם התמונה בראש. לאחרונה אני נזכר בטקסט הזה לא מעט. 
ואיך כל זה קשור לתוכנה? זה לא סוד שיש לפעמים פערים בתקשורת בין מהנדסים לבין האנשים שמנהלים את הצד העסקי של הדברים - אנשי מכירות, מנהלי מוצר וכדומה. הפערים הללו מתבטאים לרוב בדרישות מורכבות, לוחות זמנים בלתי אפשריים או סתם בקשות חסרות פשר. בערך כמו שקורה למומחה הקווים האדומים (וכן, גם בסרטון הזה אני נזכר לא מעט, באותו הקשר). 
בעבודה, יש לנו פרוייקט חדש. יש לו תאריך סיום שלא אנחנו קובעים, קצת כמו שתעשיית המשחקים לא קובעת מתי בדיוק תגיע עונת החגים. הפרוייקט היה צריך להתחיל לפני הרבה זמן אבל בגלל עומס של דברים דחופים לא פחות, לא באמת התחיל לזוז עד לפני חודשיים-שלושה. במהלך הזמן הזה, הקדשנו המון זמן לישיבות אינסופיות בהן מנהלי המוצר ניסו להבין איך אנחנו יכולים גם לא לאחר בשנה וגם להכניס פנימה את כל התוכן שאנחנו רוצים. תוכניות נכתבו, שעות הושקעו בהערכת מאמצים, מדי פעם נערכו כמה חשבונות בסגנון "אם נשים עשרים אנשים על הפרוייקט, נסיים אותו בתוך תשעה חודשים" (מה שהזכיר לי את הבדיחה על מנהלי פרוייקטים והריונות), מה שהוביל לכל מיני משחקים בהם עובדים חדשים הופיעו יש מאין, משל היינו בתרגיל צבאי ומנהל הפרוייקט הוא השליש שמשלים את מצבת הלוחמים במטה קסם, תוך התעלמות מוחלטת מכך שלוקח לנו לפחות שלושה חודשים לאייש משרה.
בקיצור, למישהו היה כיף, והמישהו הזה לא היה אני. אבל, סוף כל סוף, נגמרו הקשקושים ואפשר לומר שאפשר להתרכז בעבודה ולא בתכנונה. ואז, במסגרת אחת מישיבות העדכון, מנהלת המוצר הודיעה על שינוי כיוון - אחד הספיחים לפרוייקט הזה הוא שיתוף פעולה בינינו לבין חברה אחרת, ושיתוף הפעולה הזה אמור להכניס לא מעט כסף לכל הגורמים המעורבים. כל התוכניות שנעשו עד כה הניחו שאנחנו יכולים לסמוך על כך שסיימנו את עיקר הפרוייקט הראשי ולהשתמש במה שנבנה שם, מה שמיקם את הספיח במרחק יפה על לוח השנה. ובכן, שינוי הכיוון היה כזה - הנהלה החליטו שאנחנו רוצים את הספיח מוקדם ככל שאפשר. רגע, מה? זה אומר שכל העבודה שצריך לעשות לפרוייקט הראשי ונדרשת כדי לתמוך בספיח צריכה להיעשות קודם. כלומר, כל מה שחסכנו הוא חודשיים או שלושה. תגובת מנהלת  המוצר הייתה פשוטה, ומרגיזה להחריד - "זה לא מספיק טוב, אני צריכה תוכנית שתאפשר לנו להעלות את זה לאוויר בתוך חודשיים מהיום". אוקי, אנחנו מכירים את המשחק. בטווח של חודשיים לא רלוונטי לדבר על תוספת משאבים, ואם התאריך נעול, כל מה שנשאר לדבר עליו הוא על התוכן. אבל גם על התוכן אי אפשר לוותר, כי את כל הוויתורים כבר עשינו כשהגדרנו את הפרוייקט הראשי. בכל זאת, בדקנו - "האם את מוכנה לוותר על א'?" "לא". כך גם לב' וג'. בקיצור - איך שלא מסובבים את זה, הבקשה היא לדחוף תשעה חודשים קלנדריים (לא חודשי אדם) לתוך שלושה. התגובה לכל הסבר שמצביע על הפער הזה הייתה "אז תעשו משהו מהיר ומלוכלך" (עד לנקודה בה אחד המפתחים הסביר שאנחנו אמנם יכולים לכתוב את הקוד מלוכלך יותר, אבל יותר מלוכלך ממה שכבר מתוכנן לא יהיה מהיר יותר).
אני יצאתי מתוסכל מאוד מהישיבה הזו, מקטר ביני לבין עצמי שזה לא משנה אם סופרים שתיים ועוד שלוש או שלוש ועוד שתיים, ואפילו לא שתיים ועוד שתיים ועוד אחת - התוצאה תמיד נשארת חמש ולעולם לא תהיה ארבע.

אבל, משהו מעניין קרה קצת אחר כך, אחרי שסיימנו להתבשל קצת במיץ של עצמנו והתרגלנו לכך שהדרישה החדשה היא המציאות - יש צורך לעשות משהו בתוך שלושה חודשים, מה אנחנו יכולים להציע? בסופו של יום מצאנו פתרון - שינינו כמה מהנחות היסוד, ואנחנו עונים בערך על חצי מהדרישה המקורית, אבל את החצי הזה אנחנו יכולים להציע להנהלה ולראות אם זה יעזור. החצי הזה, מבחינתנו, דורש בערך עשירית מהמאמץ המקורי: בתנאי שהנחת היסוד שלנו תהיה נכונה (ההנחה הזו תלוייה בשותף העסקי).
וזה גרם לי לחשוב קצת - כן, קל מאוד לומר שההנהלה לא מבינה שום דבר מהחיים שלה. קל להתרגז מלוחות זמנים בלתי אפשריים. אבל בסופו של דבר, צוות הפיתוח הוא צוות שמוצא פתרונות. לא מושלמים, ולא בדיוק בזמן, אבל פתרונות טובים. לפעמים, צריך את הילד הקטן שיאמר "אני רוצה" ויתעלם מכל המגבלות שבבירור חוסמות את המטרה כדי להכריח את הצוות למצוא משהו.
חוץ מזה, כל החבר'ה של #NoEstimates - איך אתם מתמודדים עם פרוייקטים גדולים שיש להם דדליין? איך אתם יודעים מתי צריך להוסיף עוד אנשים לצוות? אם יש משהו שהתקופה הזו שכנעה אותי בו הוא שאני לא נהנה בכלל מכל הקטע של הערכות זמנים - אבל אני לא ממש רואה איך להתמודד עם דברים כאלה אחרת.

-------------------------------------------------------------------------------------
Child: Can I have this?
Me: No.
Child: Ah, perhaps I’ve miscommunicated. I’m asking for it because I want it.
Me: I understood that, actually.
Child: I think maybe you’re not hearing me. I’d like it because I want it.

This quote is from a longer text that goes on (and gets funnier), which you can read here. Lately, I'm reminded quite often of this text. 
And what does it have to do with software, you wonder? Well, it's no secret that there are sometimes gaps between engineers and business people - salespersons, project managers etc. . Those gaps often manifest as complex requirements, impossible timelines of simply senseless requests, as is happening to this poor red lines expert (yes, I'm reminded of this video as well, in the same context). 
We have a new project at work. It has a deadline that we do not set, in the same manner that the gaming industry cannot move holiday season just because the game is a bit more complex to build. Worse - this project should have started quite a while ago, but a load of other urgent tasks didn't actually begin to move until about three months ago. So, what's the first thing to do when you start a project late? Naturally, begin with a month-long estimations and planning phase. Ok, I'm being a bit over-sarcastic here, as the planning was quite important for us to know what we actually need to do, and start having a discussion about what must be released in the first deadline of the project and what can wait a bit, so there was value to it, but it was just so annoying to go through.  During those endless meetings, the product management goal was to understand how can we get all of the content that we need and not miss our scheduled release date in a year or so.at certain times there were some calculations such as "if we'd put 20 people on the project, we could be done in 9 months". This reminded me the joke about project managers and child bearing and then I was reminded of some war-games where dead or injured soldiers are magically replaced by other troops when the discussion started guessing that we could assume we'd recruit three new employees within the next couple of months, ignoring the history (in which finding a suitable candidate usually takes us between 3 and 6 months during which the effectiveness of the employees interviewing drops sharply).
So, to state it simply - someone was having fun, and that someone wasn't me. But, finally, we got to the point where we can shift our time and focus from talking to doing. great. Then, during one of the update meetings the project manager announced a change of direction: One of the side tracks to this project was another sub-project that depended on many of the capabilities in the main project. This  sub project is a collaboration between us and another company, and should produce a nice revenue to all involved parties. So, instead of waiting until the main project is done, now we want to have the sub-project done as quickly as can be, so all of the work that had to be done in the main project and supports the sub project now have to be done separately and all that we would save is probably two or three calendar months. The product manager's response was simple and frustrating: "This isn't good enough, I need a plan that will enable us to go live with this in a couple of months". OK, we know this game - it's the triangle of resources\time\content.  Since it's a schedule of 2 months, adding people is not really an option, and the time is set, so it must be content. However, we already cut content to a minimum when defining the main project. Still, we asked "Are you willing to give up on A?" the answer was "no, we must have A", and the same went for B and C. In short, we were asked to find a way to cram some 9 calendar months into 3. Doesn't really matter how you do the math, it does not work. Any attempt to explain this was met with the response "just do something quick and dirty". This phrase came up so many times in the conversation that one of the developers reacted with "we can do it as dirty as they want it to be, but at the point we are, dirtier won't be quicker".
Personally, I got out of this meeting feeling very frustrated and ranting to myself that two and three is five, as is three and two, and even two and two and one - it does not matter how you count it, it won't stop being five.

But, later that day something interesting happened. After we were done ranting and got used to the fact that this new requirement is the reality - we need to do something in three months, what can we suggest?  - we came up with a solution: it solves only part of the problem, and it depends in our partner's capabilities and goodwill, but we can do it in a single month. We have something management can work with.
This made me think - It's really easy  to rant about how management knows nothing, It's easy to be annoyed with impossible schedules. But the whole purpose of a delivery team is to find solutions to problems. Those won't always be perfect or complete (or on schedule), but they are still good solutions. Sometimes, that little annoying brat who says "I want it!" and won't take no for an answer is what needed to nudge the team to find a solution.

Also, on another note - you people who preach #NoEstimates , how do you cope with projects of this size that have a deadline and you need to know whether or not you should recruit more people? If there's something these last months convinced me it's that I really don't enjoy estimating stuff. I would love to hear of another way of dealing with this problem. 

Wednesday, April 12, 2017

מה אני מחפש אצל מועמדים

What do I look for in a candidate

http://yomamultinational.com/blog/wp-content/uploads/2013/12/finding-perfect-candidate.jpg


This post is written after James Thomas, who has a fascinating blog of his own, commented on this post and pointed out that I did not mention what I was looking for when interviewing candidates, and why. And, since to the best of my knowledge, James does not read Hebrew, I'm starting this post with the English version. 

Generally, we are trying to get an understanding about the following points:

  • Testing skills
    • System-wide view\ understanding
    • Technical affinity
    • Asking questions and questioning authority. 
    • Identifying context and understanding what does it mean for testing. 
    • Risk awareness (and tendency to spot risks)
    • "Thinking on your feet" 
    • familiarity with testing theory & terminology. 
  • Programming (roughly at the skill level of a university graduate)
  • Interpersonal skills
  • Career goals
      Each of these points can be broken down to smaller parts, and in some cases, those parts can be broken down again. And breaking those definitions is exactly what I'm about to do.

      • Programming - probably the easiest thing on this list to explain. We expect the candidate to be able to write code, we don't care in which language. We look for the ability to come up with algorithms that solve simple problems, some basic understanding of data structures, good coding habits (e.g.: meaningful names, division into functions) and while it's not a must, we sometimes also try to see if the candidate has some idea about what is happening in the memory below the code (not registers and assembly language, just an understanding of the stack, heap and garbage collection).
        Why are we looking for that? In short - because we use programming in our work. No, we are not "automation engineers", but we do write automated checks in a framework that we built and maintain (and I'm even somewhat proud of). Learning to code on the job is possible, but it's way too expensive for us to accommodate that. In addition, formal learning in this case will be more thorough and cover the things you need only once in a blue moon, but we're long past the point where one needs "just enough programming to manage", and a decent theoretical base is always helpful. Sure, one does not need 10 years of programming experience to work with us (in fact, universities graduates might  fit well), but sometimes there are problems that require some investigation and fiddling around. In a team as small as ours, we don't have the luxury of having this task within the skill-set of only part of the team. 
      • Interpersonal skills - A bit undefined, and can be roughly translated to "how much we like you". We look for people who are pleasant to talk with, won't cower in a corner in face of a loud voice. Into this category comes also the ability to explain oneself, to accept criticism and just about a million other things I can't exactly name, but can tell when they are missing.
        Why are we looking for that? First of all, because we look for people we would want to work with. I don't want to work with people I feel unpleasant around, so if I can affect that - I will. Secondly, because as testers, our work is all about communicating with others, so a candidate better not be horrible on this account. Third, and most importantly - We are quite of an aggressive team. We have some people in the team who respond fast and think while talking - which might push aside the more timid team members. Like it or not - and until we manage to change that - timid people will be run over, so when we assess the candidate fit for the team, this must be a parameter, even if it's only so that we'll know how much protection the candidate needs. Candidate who can hold the conversation when there is some cooperative overlap (I found this term here) and will not let themselves be pushed aside when the overlap becomes a bit competitive, will have easier lives in our team. One need not posses the glib tongue of a lawyer or a salesperson, but we prefer candidates who can join our team painlessly. By the way, this is more important for female candidates who will face unconscious gender bias on top of the general pushiness. 
      • Testing skills is a title for a long list of possible skills, and everyone has a slightly different definition of what it actually is. It's also an umbrella term for stuff we don't have anywhere else to put but deem important for a tester - stuff such as professional pessimism, familiarity with different kinds of testing (there's very little in common between performance testing to localization testing, despite the fact that both are "testing").
        Within this list, we try to focus on the following:
        • System-wide view: There are two ways in which systems can be understood: bottom-up, in which one learns all the fine details and slowly constructs the whole, and top-down, in which one learn how things are connected and what is the role of every part, and only later fills this schematic with details. The added value of testers is usually in putting the new feature in context - who will be using it? what other parts are affected? and so on. A person who learns in a top-down manner will probably have it easier to provide this kind of value, but in the end, it's about being able to see the system and zoom in and out as needed: if someone is very comfortable in the high-level descriptions, we'll drive to more technical details. If someone's very keen on the details, we'll push for a higher abstraction level. 
        • Technical affinity - Be as it may, we are testing software (or hardware), which is something technical. A tester should not be afraid of it, and should understand how computers work instead of regarding to it as magic. In addition, when something stops working, we dive into it and investigate, and this requires technical skills.
          (Also, if you're using "technical" as a euphemism for "knows to code", please stop. Thank you.)
        • Questions in face of authority: I hope I don't have to convince any of the readers that asking questions is one of the most important things testers do. The authority part is no less important. We ask questions that people don't like to hear such as "are you certain you want to release with this unfixed?" and sometimes we just call other people's baby ugly with questions like "will your solution still work when five people click on the button simultaneously? " There's always some sort of pressure against such questions, especially close to a release. A tester should not be too much intimidated by such pressure, and leave a question unasked only when there's a decent professional reason for that. Also, good questions that are based on understanding the system can save a lot of time and effort to everyone. 
        • Identifying context: This one's simple. We don't test everything the same way, and we don't test the same thing in the same way on a different project. Being able to justify our testing and prioritize them is important. A tester who can do that with no context is reading from a manual that was never relevant. 
        • Risk awareness & tendency to see risk: It's an extension to the previous bullet. Risk is what drives testing. If there is no risk, there's no need for testing. It also provides us with language to communicate with other team members - "I'm going to invest three days on this, since a minor defect will cost a whole lot of money, while no one will really care about the typos and spelling mistakes in the help file, so I'll go over it only if I'm really bored").  
        • Thinking on your feet: In many cases, a tester need to provide a quick response. For instance, if someone raises an idea during a design review meeting, the best time for a feedback would be right then, not after a week of analysis. In fact, in most situations I can think of, saying "here's my initial thoughts, and it seems to me that there's a week of analysis that can be done here to find out what I've missed" is by far more useful than "oh, really? Gimme a day to analyze and I'll tell you what I found". 
        • Familiarity with testing theory & terminology: Well, that's usually a probe to see if the candidate is familiar with some of the basic terms found in the ISTQB syllabus, maybe the difference between testing & checking or the ability to hold a short conversation about "why test?". Having a common language enables passing information precisely and concisely, but it has another aspect to it - behind each such term there's an idea. Once something has a name it can be easily recalled and used. Boundary values, for instance, is a really simple idea (which doesn't mean it's shallow) - but it's not something one will necessarily think about if they never heard of it before.
          In addition, being familiar with the jargon is a good indicator that the candidate is learning testing in some ways. There isn't anyone who is interested in testing and did not encounter some basic terms such as equivalence partitioning or a test oracle. From the experience I gained thus far, it seems that candidates that are not actively learning are not familiar with such terms. Sadly, it's true also for people who have recently bought their ISTQB CTFL certificate (and I say bought since learning or earning was clearly out of the question in their case. They passed the test, probably without cheating, and they didn't learn a thing).
        Why are we looking for that? Because we are hiring testers. Because we don't know how to teach stuff such as "system view" and while we can help people learn to stand their ground, it's not a short process, nor it is perfect (or fun to all involved parties). To put it simply - we are looking for employees, not offering training. We will be happy to hire inexperienced people, but they have to show us that they did the first steps themselves (or have some natural affinity to the testing mindset) to convince us that there will be value in investing in training them. 

    • Career goals: Here we try to guess whether the candidate is regarding software testing as a profession.  We try to understand what are the short term career goals of the candidate, and ask about the long term ones (we don't usually ask about the short term goals, since it's an invitation for a lie).
      Why are we looking for that?
      Two reasons: The first and only one that matters is that we have a long ramp-up period. Our product is carrying over fifteen years of history, and is quite complex. Usually we consider the first three months as pure training time, and don't really expect an employee to be highly effective in the first year. If a candidate will ask to switch role after a year (or worse - leave in favor of another place), we invested a lot and got little in return. Additionally, employees that are interested in testing will be more open to acquiring new skills in this domain. Employees that want to use testing as a stepping stone towards a different role will try to acquire skills that are relevant to that role.
      We ask for the long term goals for two reasons: One is to gain insight for the short term goals. The other is to see if we can accommodate such goals - Not everyone can be a manager, and if someone is keen on accessibility testing, there are better places for them to be in. A candidate that can only see progress as "becoming a manger" might need some guidance to find other options (unless specifically recruited to become a manager) in comparison to someone who is familiar with the technical career paths that are out there.
      The second reason is  a matter of ideology. I see testing as a profession and not as something temporary to do in order to "get into high-tech", or because someone lacks the skills to do what they actually want to do. I prefer to work with people who share this view. 

    • ------------------------------------------------------------------------------------------

      בעקבות הפוסט הקודם, ג'יימס תומס (שיש לו בלוג מרתק) העלה נקודה חשובה - בשום שלב לא ציינתי מה אני מחפש אצל מועמדים בזמן ראיון ולמה, וזה משהו שעשוי לעניין אחרים שנמצאים בתהליך גיוס עובדים. מעבר לכך, המטרה המשנית שלי הייתה לעזור למי שמגיע לראיון אצלי. ובכן - אם אתם מגיעים להתראיין אצלי, שימו לב. 
      בגדול, אנחנו מנסים לקבל מושג לגבי הנקודות הבאות (הסדר אינו מעיד על חשיבות):
      • כישורי בדיקות
        • תפיסה מערכתית
        • הבנה טכנית
        • שאילת שאלות ועמידה בפני סמכות
        • זיהוי ההקשר והבנת ההשלכות שלו על הבדיקות
        • מודעות לסיכון (ונטייה לראות סיכונים)
        • חשיבה על הרגליים
        • היכרות עם העולם התיאורטי של בדיקות תוכנה.
      • תכנות (ברמה של בוגר אוניברסיטה פלוס מינוס)
      • כישורים בין-אישיים
      • מטרות להמשך הקריירה
          בגדול, כל אחת מהנקודות האלה ניתנת לפירוק לנקודות קטנות יותר, ובחלק מהמקרים, גם הנקודות הקטנות יותר ניתנות לפירוק נוסף, וזה בדיוק מה שאעשה. 
          • תכנות: ככל הנראה, זה החלק הכי קל. תכנות הוא תחום סגור ומוגדר למדי, ואנחנו לא נכנסים לדקויות של שפה. אנחנו מנסים למצוא את היכולת לאתר אלגוריתמים לפתרון בעיות פשוטות ולהעביר אותם למשהו שנראה כמו קוד. על הדרך אנחנו בוחנים יכולת שימוש במבני נתונים בסיסיים, הרגלי כתיבת קוד טובים - שמות בעלי משמעות, חלוקה הגיונית לפונקציות. לפעמים נגיע ונבדוק שימוש נכון באובייקטים או היכרות עם הדרך בה מנוהל זיכרון.
            למה אנחנו מחפשים את זה? בקצרה, כי אנחנו נעזרים בתכנות במהלך העבודה שלנו. לא, אנחנו לא "מפתחי אוטומציה", אבל אנחנו בהחלט כותבים מבדקים אוטומטיים בתוך תשתית בדיקות שכתבנו (ואני אפילו גאה בה באופן יחסי). ללמד תכנות זה אפשרי, אבל זה גוזל הרבה מאוד זמן, וממילא יש לעובדים חדשים הרבה מאוד מה ללמוד ולנו מעט מאוד זמן ללמד אותם את כל מה שצריך. בנוסף, לימודי תכנות במקום העבודה יהיו פחות מעמיקים מאשר לימודים פורמליים, ואת הנקודה בה צריך "לדעת רק מספיק תכנות כדי להסתדר" עברנו מזמן. לא צריך עשר שנות ניסיון כמתכנת כדי להשתלב, אבל מדי פעם יש בעיות שמצריכות קצת חקירה ומשחק, ובצוות קטן אין לנו את היכולת להשאיר את הכל לאחד או שניים מאיתנו.
          • כישורים בין-אישיים: כאן ההגדרה קצת יותר אמורפית. אנחנו מחפשים מועמדים שנעים לדבר איתם ולא מתחבאים בפינה לנוכח הרעש הקטן ביותר. לתוך הקטגוריה הזו נכנסת גם היכולת להסביר את עצמך, להתמודד עם ביקורת, ועוד מיליון דברים שאני לא באמת יודע  עדיין להגדיר במדוייק.
            למה אנחנו מחפשים את זה? בראש ובראשונה, כי אנחנו מחפשים אנשים שנרצה לעבוד איתם. אני לא רוצה לעבוד עם מישהו שלא נעים לי להיות במחיצתו. שנית, כי העבודה שלנו מבוססת על תקשורת עם אחרים, ומי שנעדר את היכולת לתקשר באופן הולם לא יצליח. שלישית, ואולי הכי חשוב - אנחנו צוות עם התנהלות כוחנית למדי. אנחנו (או לפחות רובנו) נחמדים למדי ורוב העקיצות הקטנות שמתעופפות בחדר נראות הרבה יותר גרועות מאשר הן מרגישות, אבל אנחנו לא מאוד מוצלחים בלהשאיר פתח שיאפשר לחדשים להיכנס לדיון. אם מועמד מסוגל להיכנס באופן טבעי לשיחה ולתפוס את מקומו בה, העבודה שלו תהיה קלה יותר (ובמקרה זה, אפסיק לרגע להשתמש בלשון סתמי ואציין שזה נכון שבעתיים אצל מועמדת). אנחנו לא מצפים לכישורים הרטוריים של עורך דין או לחלקלקות של איש מכירות, אבל אנחנו מעדיפים מועמדים שיוכלו להשתלב בצוות בלי שזה יכאב להם.
          • כישורי בדיקות: זו כותרת כללית מאוד להרבה מאוד דברים, וכל אחד מגדיר אותם באופן קצת שונה. זהו מונח מטרייה לכל מיני כישורים שלא נכנסים תחת שום הגדרה אחרת - היכולת להבין מערכת בלי להיכנס לפרטי פרטים, פסימיות מקצועית, היכרות וניסיון עם סוגי בדיקות ספציפיים (כי אין הרבה דמיון בין בדיקות ביצועים לבדיקות לוקליזציה, למרות שלשני הדברים קוראים "בדיקות").
            בתוך כל זה, אנחנו מתמקדים בכמה אזורים. 
            • תפיסה מערכתית: יש שתי צורות בהן ניתן להבין מערכת - ללמוד את כל הפרטים לפני ולפנים ומתוך זה ליצור את התמונה השלמה, או ללמוד את התמונה השלמה ורק מתוכה להבין את החלקים הקטנים. הערך המוסף של בודקי תוכנה הוא ביצירת הקשרים בין חלקי המערכת השונים. מי שמבין מערכות מלמעלה למטה יהיה מסוגל ליצור את ההקשרים האלה מהר יותר, וגם במערכות שהוא מכיר פחות טוב. אבל בסופו של יום, זה לא ממש משנה איך לומדים, כי הבנה טובה של המערכת מחייבת כמה רמות - הרמה המופשטת למעלה והרמה הטכנית למטה. בודק תוכנה צריך להיות מסוגל לדלג בין הרמות האלה בהתאם למשימה הנוכחית. לכן, אם מועמד חש בנוח ברמה האבסטרקטית אנחנו נשאל על הפרטים הקטנים ואם מועמד מפגין בקיאות גבוהה בפרטים הקטנים אנחנו נחפש את ההבנה הפשטנית יותר שאפשר לסכם בחמש מילים.  
            • הבנה טכנית: איך שלא מסובבים את זה, אנחנו בודקים תוכנה. תוכנה היא משהו טכני - קוד, מחשבים, טלפונים. בודק תוכנה צריך להיות מסוגל להבין איך הדברים האלה עובדים ולא להתייחס אליהם כאל קסם. כשמשהו לא עובד כמו שאנחנו מצפים, צריך לצלול פנימה ולהתחיל להבין קצת יותר לעומק, וזה דורש חוש טכני טוב.
              (ובקשה קטנה - אם אתם משתמשים ב"טכני" כדי לומר "יודע לתכנת", בבקשה הפסיקו. תודה)
            • שאלות וסמכות: אני מקווה שאני לא צריך לשכנע אף אחד מהקוראים בחשיבותן של שאלות טובות ומתוזמנות כהלכה. החלק של הסמכות הוא חלק חשוב לא פחות - אנחנו שואלים שאלות שלא תמיד נעים לשמוע, כמו למשל "האם אנחנו רוצים לשחרר את המוצר עכשיו עם הבעיות עליהן אנחנו יודעים?", ולפעמים אנחנו סתם מערערים על סמכותם של אחרים בשאלות כמו "האם הפתרון שהצעת עכשיו יעבוד אם חמישה אנשים ינסו אותו ביחד?". יש לא מעט לחץ נגד השאלות האלה, במיוחד כשרוצים לשחרר משהו לאוויר. בודק תוכנה צריך לדעת לא להתקפל בפני לחץ שכזה ולוותר על שאלות רק כאשר יש סיבה מקצועית לעשות את זה. כמובן, סוג השאלות ששואלים חשוב גם הוא - שאלות טובות שמבוססות על הבנה של המערכת יכולות לחסוך לכולם הרבה מאוד זמן ומאמץ. 
            • זיהוי הקשר: דברים שונים דורשים בדיקות שונות. לא נשקיע את אותו מאמץ בכל דבר, ולא ניגש לבדוק כל דבר באותו האופן. בודק תוכנה טוב ידע לזהות את הנקודות בהן צריך להשקיע יותר ואת אלה בהן צריך להשקיע פחות. 
            • מודעות לסיכון ונטייה לראות סיכונים: זה הבסיס לנקודה הקודמת. זה גם נותן שפה לתקשר בעזרתה עם חברי צוות אחרים - אני הולך להשקיע יותר בבדיקה הזו, כי אם נפספס פה משהו זה יעלה המון כסף, ואם נפספס במקום אחר זה סתם יהיה קצת מכוער. 
            • חשיבה על הרגליים: במקרים רבים, צריך לתת תגובה ראשונית מהירה (זה מה שאתה רוצה לעשות? האם חשבת על... ועל... ?). התשובה "תן לי חצי יום לנתח את זה" תהיה במקרים רבים אפקטיבית הרבה פחות מאשר "במבט ראשון נראה לי ש..., אבל בוא ניקח קצת זמן כדי להבין את זה כמו שצריך". לפעמים התשובה ששלפנו מהר מספיקה. 
            • היכרות עם עולם המושגים התיאורטי של בדיקות תוכנה: זה אומר להכיר טיפה את עולם המונחים שאפשר למצוא בסילבוס של ISTQB, לדעת דבר או שניים על ההבדל בין בדיקה לווידוא (testing & checking) והיכולת לנהל שיחה על למה צריך לבדוק תוכנה. שפה משותפת מאפשרת העברה יעילה יותר של מידע וחוסכת זמן, אבל יש לזה אספקט נוסף: מאחורי כל מונח יש רעיון. ברגע בו למשהו יש שם, קל יותר לחשוב עליו ולראות אם הוא רלוונטי או לא. מחלקות שקילות, למשל, הן רעיון פשוט מאוד (שאפשר להעמיק בו) - אבל מי שלא שמע עליו מעולם לא בהכרח ידע לחשוב עליו.  בנוסף, היכרות עם עולם המונחים מעידה על עוד משהו קטן - שהמועמד טורח ללמוד קצת - אין מישהו שמתעניין במקצוע ולא נתקל במונחים השונים מדי פעם. על בסיס המועמדים שראיינתי עד כה, נראה שרוב מי שלא לומד קצת בעצמו, לא מכיר את המונחים הבסיסיים, או משתמש בהם באופן שגוי - וזה כולל מועמדים שקנו את תעודת CTFL לאחרונה (אני אומר "קנו" כי בבירור לא היה שם תהליך של לימוד. הם עברו את הבחינה, כנראה ביושר. הם פשוט לא למדו כלום).
            למה אנחנו מחפשים את זה? כי אנחנו מחפשים בודקי תוכנה. כי אנחנו לא יודעים ללמד דברים כמו "ראייה מערכתית", וכי למרות שאנחנו יכולים לעזור קצת למי שמפחד לשאול שאלות ולעמוד על שלו, זה לא תהליך קל, קצר או מושלם. בסופו של יום, אנחנו מחפשים עובדים, לא מציעים קורסי הכשרה. אנחנו נשמח לקבל אנשים חסרי ניסיון - אבל הם צריכים להראות שאת הצעדים הראשונים הם כבר עשו (או שיש להם נטייה טבעית לדפוסי המחשבה הרלוונטיים). 

        • מטרות להמשך הקריירה: כאן אנחנו מנסים לנחש עד כמה המועמדים רואים בבדיקות תוכנה מקצוע. אנחנו מנסים להבין מה הן המטרות לטווח קצר ואנחנו שואלים על המטרות לטווח ארוך (אנחנו בדרך כלל לא שואלים על המטרות לטווח קצר, כי זו הזמנה לאנשים לשקר לך)
          למה אנחנו מחפשים את זה? משתי סיבות. הסיבה הפרקטית היא שלוקח הרבה זמן להיות יעילים בעבודה על המוצר שלנו. זמן הלימוד הראשוני הוא כשלושה חודשים, וצריך בערך שנה בצוות כדי להתחיל לתרום באמת. אם  אחרי שנה המועמד יבקש לעבור לתפקיד אחר - השקענו המון וקיבלנו מעט בתמורה. אם המועמדת תגלה שהאתגרים בתפקיד לא מעניינים אותה ותחפש עבודה במקום אחר - אותה בעיה בדיוק. בנוסף, עובדים שרוצים להתקדם בתחום הבדיקות יהיו פתוחים יותר לרכישת כישורי בדיקות נוספים תוך כדי עבודה. אלו שרוצים להחליף מקצוע יתמקדו בכישורים של אותו מקצוע אליו הם שואפים.
          על הטווח הארוך אנחנו בדרך כלל שואלים גם כדי לקבל תובנות לגבי הטווח הקצר, וגם כדי להבין האם יש לנו את היכולת להציע למועמדים משהו לטווח כזה - לא כולם יכולים להיות מנהלי צוות, ומי שמחפש התמחות מקצועית בבדיקות לוקליזציה כנראה לא יקבל מאיתנו תרומה משמעותית לקריירה שלו.  אנחנו גם מקבלים מהתשובה הזו מושג לגבי ההיכרות של המועמד עם המקצוע - מי שיכול לדמיין התקדמות רק באפיק הניהולי צריך יותר הכוונה מקצועית (אלא אם הוא מגוייס כדי להתקדם לתפקיד כזה) מאשר מישהו שיודע מה הם התחומים הטכניים בהם אפשר להתקדם.
          הסיבה השנייה היא עניין של אידיאולוגיה: אני רואה בבדיקות תוכנה מקצוע שדורש התמחות של ממש. לא משהו זמני שעושים כדי "להיכנס להייטק", או כי אין למישהו את הכישורים לעשות את מה שהוא באמת רוצה. אני מעדיף לעבוד עם אנשים שיש להם גישה דומה.