• Difficult conversation? No worries, just remember – S.O.S.

    by Matt Terry

    Have you ever been in a situation where you had to have a difficult conversation with someone?  I imagine we all have.  It’s tough – you get deflated, you dread having any kind of interaction with the other person, and you can barely focus on anything else.

    Part of the reason why I used to struggle so much was because I would basically wing it when I finally sat down with the other person.  And let me tell you, winging it was not the best approach.

    Inspired by Raman Ohri and Tom Sant, I wanted to share how I approach difficult conversations, now.

    Having a difficult conversation can be hard.  (Duh.)  In order to organize your thoughts, it helps to have some structure. Without a structure to lean on, it is more difficult to have a healthy and constructive conversation.  Your intentions may get missed, or people may get hurt.  Ultimately, you may do more harm than good.

    So when you’re in the difficult position of having a difficult conversation, remember this familiar little acronym – S.O.S. (Symptoms, Outcomes, Solutions).

    Symptoms

    Take a snapshot of today, and describe (from your point of view) what you see.  Keep it about you, and your point of view, though.  And try not to project a perceived behavior or motive onto the other person.

    An example of projecting would be “You aren’t doing X”.  When the symptom is actually “I don’t know what the status of X is.”

    Outcomes

    Forecast a little.  Describe how you see things turning out if we don’t address the symptoms.
    Outcomes are helpful to paint a picture of what is not acceptable to you. They’re also helpful in exposing differences in context and perspective – maybe the bad outcome you fear isn’t actually a big deal or isn’t something anyone thought about. You won’t know until you have that conversation.

    Solutions

    No, you shouldn’t expect to come up with the solution on your own.  But you should think about possible solutions and offer them in an emotionally detached manner – “here are some things that might work, but I don’t know if they are the right solution”.  At the very least, try to get some of your assumptions validated.

    Another “trick” is to write each of the Symptoms, Outcomes, and Solutions out in complete sentences.  By writing them down, you’re forcing yourself to put enough thought into it to have a discussion.  It has the added benefit to keep you on track during your discussion, should you get side-tracked.

    So, when you are about to have a difficult conversation, just remember S.O.S.

  • Product Engineering is like road construction…

    by Matt Terry

    Product Engineering is like road construction.  You have to satisfy the utility.  The utility of a road is pretty straight forward – I have to be able to drive my car from point A, to point B, without causing significant damage to my vehicle.

    Utility is your table stake.

    Without utility, you don’t have a product worth using.  In addition to utility, there are things like usability and aesthetics.  I’m not going to cover those in detail in this post.  However, both usability and aesthetics can be summed up into one word – desirable.

    Imagine driving on a road with the below sign…

    …probably not your favorite interchange, right?  What if it was someone’s first time driving in this area?  Or worse, what if the driver was a teenager who recently got their driver’s license?  This would be a nightmare.

    Imagine driving on a road like this…

    …this road _barely_ has utility, if you ask me.  While you could drive on this road, you would have to slow way down and dodge this rough patch.

    While both of these roads have utility (they are both passable), neither road is desirable for most drivers.

    This picture of potholes is a good reminder that you can’t construct a road and then forget about it either, you have to maintain it.  Quick-dry patches over a long period of time result in a less-desirable road.  Ultimately, your users will find a different route.

    Product engineering is no different.

    Ultimately, you have to build a road that people want to drive on.  It has to be desirable!  Meaning, you have to build a product that people _want_ to use.

    For example, this is the recently renovated Keystone Ave. here in Carmel, IN…

    …this is my preferred road for many reasons.

    Just as drivers choose roads for their daily commutes, users choose products for their daily uses.  Make sure you’re building a product that people would find desirable, in addition to your table stakes.

    Ask yourself – Is your product desirable?

  • Git Extensions has some sweet new toys…

    by Matt Terry

    I use Git Extensions on a daily basis.  It is a great git interface for a mouse-lover like myself.

    Well, it looks like Git Extensions grew some sweet new toys that take advantage of Windows 7.

    If you haven’t played around with some of the advanced features in Windows 7, I highly recommend it.  The JumpLists are probably my favorite new feature.  There are 2 different JumpLists that I use on a regular basis – in the Start Menu, and on the Taskbar.  They reduce context switching, and allow me to do activities quickly.

    Here is a snapshot of using the JumpList in the Start Menu…

    …it allows you to jump directly to a recently used repository.  Very handy!

     

    Here is a snapshot of using the JumpList in the taskbar…

    …it allows me to commit, pull, and push from the taskbar.  This is extra awesome because now I don’t actually have to pull up Git Extensions.  Instead, I just keep it minimized now, and even _more_ out of the way.

    Do any tools you use regularly have some cool/awesome/fun features that integrate with your OS?  If so, what feature and how does it impact how you use the tool?

  • “Overcoming Momentum” – laws of physics applied to software development…

    by Matt Terry

    Week #5 of the SEP Blog Battle.

    Read about it here.

    Follow us on twitter.

    Ever find yourself in a rut?  You just can’t crank anything notable out this week.  It’s so obvious that even your teammates start placing bets on the over/under of you meeting an estimate.  (No seriously, it’s _that_ obvious, and it is happening right now, for me.)

    Okay, maybe your team handles it differently than my team.  We’ve all been there, though – more refactoring than normal (sometimes all on the same blocks of code); less functional changes; and ultimately, less value added.

    It sucks.  It’s a tough place to be, and you feel like you aren’t pulling your own weight on the team.

    The longer you stay in your rut, the harder it is to get out.  These ruts are a dangerous place.  A rut can drain your energy and hinder your performance.  If you don’t find a way out of your rut in a timely manner, you can dig yourself so deep that it seems impossible to get out. We’ve all heard it – “I’m stuck doing [blank], even though I’m not interested in [blank].”

    So, to get out of your rut, you need to build up momentum.  Let’s look at what momentum is…

    p = m * v

    Well, mass is negligible, right?  It’s the knowledge you’re dumping into your IDE, or the weight of the paper you’re doing some discovery on, or conversations/emails you’re having with other people.  Effectively, we are left with…

    p = 1 * v

    With that, we know that velocity isn’t just your speed, or how fast you’re typing.  It is a vector…it has to have a direction.  If you aren’t moving in a direction towards the end goal, then you’re not moving forward.

    This means that momentum, in our world, is essentially how well you can move towards your goal – whether your goal is developing a feature, fixing a bug, writing an email, or something else.

    And according to the law of conservation of momentum, once an object has momentum it will continue to have momentum.  Or in more laymen’s terms – once you get the ball rollin’, it’ll keep rollin’.  So to get the ball rolling, you have to continue making strides towards your end goal.  If you run into a road block, pivot on what you’re doing, and try not to let that wall stop your momentum.

    If you take into account Newton’s Third Law of motion, each action has an equal and opposite reaction.  So if you find yourself running into road blocks, you have to change directions.  If you don’t constantly change directions with each road block, you’ll stop having velocity, and effectively stop having momentum.

    So the key to overcoming challenges with momentum is to remember your laws of physics – pivot when you are presented with road blocks.

  • “Weapon of Choice” – assumptions

    by Matt Terry

    Week #4 of the SEP Blog Battle.

    Read about it here.

    Follow us on twitter.

    My weapon of choice is an assumption. It’s so much more efficient for me to just assume I know what’s going on around me, and to move forward working with the assumptions I’ve made.

    Wait…are you still with me? Obviously that couldn’t be any farther from the truth.

    Unfortunately, a common weapon I see people using is an assumption – and that’s a weapon that has the tendency to backfire. It’s like playing roulette with a 6-shot that has 1 blank, and 5 live rounds.

    Just the other day, my wife and I were out shopping. Normally I open the door for her, but this time there was something that made it awkward for me to open the door, so I just went around to my door.  As I unlocked the car, I noticed her make a face – and quickly I assumed she was upset about me not opening her door.  There was no reason for the false assumption.  In fact, after asking about the reaction, I found out that it was about a strange old man in a vehicle next to ours.  Someone looked like a donkey, and it wasn’t the strange old man.

    Making assumptions can create turbulence, hurt feelings, and create unnecessary delays.  An unfortunate reality for us engineers is that we dive deep into our assumptions as well – which makes it even more of a problem.  Even as I’m writing this, I’m making assumptions about what the other SEP Blog Battle bloggers are going to write about.

    Let me be clear, forward thinking is not a problem.  The problem is when you make an assumption and it becomes a live round in your game of roulette.  Here are 5 approaches that I use to turn those live rounds into blanks…

    *do some homework and validate your assumptions before investing in those assumptions
    *force yourself to believe that people generally want the best for everyone
    *take a walk in their shoes, and ask yourself what you would do
    *ask questions and be curious – not doing so can put someone on the defensive
    *prepare for both extreme scenarios – best case, and worse case

    And never forget that old assumptions adage…

  • “Engineering – Over/Under” – evolution…

    by Matt Terry

    Week #3 of the SEP Blog Battle.

    Read about it here.

    Follow us on twitter.

    Many times, I’ve heard the cliche – perfect is the enemy of good enough.  I agree with this, for some definitions of the phrase “good enough”.  But that definition changes for me.

    How do _you_ define good enough?  My guess is that it depends.  It likely depends on your current problem, project, client, or more.

    While I agree that aiming for perfection isn’t ideal – it’s likely not efficient, it likely is over engineered for the current problem, and it is likely going to take more time than it needs to.  However, I don’t believe that we can define what “good enough” for the full product looks like on day 1.  The reality is, we aren’t going to build out 28 web services because we need to write 1 service to return a data set.  You can’t even plan what the perfect web services would look like.

    This doesn’t mean that you can simply hack something together and effectively under-engineer a solution.  Instead, converge on what is “good enough” for your current, self-contained, problem.  While implementing your “good enough” solution, use good practices, be heedful, and use design principles.

    As you build this product, you will (hopefully) iterate often.  Each time you iterate, your definition of “good enough” will change.  Your design will evolve as you iterate.

    Instead of taking bets on what is “good enough”, plan on evolving your design.

  • “Get Better” – make it uncomfortable…

    by Matt Terry

    The SEP Blogoff challenge this week was to write about getting better.   I had to think a little about this.   I mean, there are some good reasons that come to mind immediately – career growth, introspective challenges, helping others.  While these are great reasons for me to get better, I’m still limited by my personal comfort zone.

    As someone who was working solo for over a year, one of the biggest problems I ran into was the lack of external influence to get better.  Even with the reasons above to get better, I was comfortable with my own pace, and being comfortable means you aren’t growing.

    Today, I’m fortunate to be on a great team!  Sure, sometimes being on a team is uncomfortable for me, especially when I feel like I’m light years behind.  It’s a big change from being on my own pace, to keeping up with an entire team.

    I’ve learned that in order to get better, you have to get outside of your norm, and make it uncomfortable.  Pick up a new SCM tool and pound through it.  Go through some new Katas for a development environment or language that you don’t know very well.  Practice Pain-Driven-Development to reduce pain points in your daily routine.  And spend some extra time helping solve problems that the team is having.

    By practicing any of these and pushing my comfort zone, I continue to get better.  I make it uncomfortable.

  • SEP Blog Off…

    by Matt Terry

    So, a few of us here at SEP are having a friendly (yet competitive) blog off with the intention of getting in the habit of blogging. The prize is simple – bragging rights.  The competition is even more simple, because I’m going to win.

    You can read about it over here on @_swanson’s blog.

    During some discussions, the idea of adding in a weekly challenge came up as well.  So you’ll see all of us with the same title show up in a blog post, but the content will vary based on the blogger.

    Blogs to follow during this competition:

     

  • “The Applebee’s of software development” – we aren’t your neighborhood waiters

    by Matt Terry

    This phrase, “The Applebee’s of software development”, really rings home with me.  We are not waiters!  We are extremely bright and helpful problem solvers (who happen to be passionate about software).  With that being said though, we do know how to follow instructions.  But that’s not how you get the biggest bang for your buck with our crew.

    The biggest challenge here is to recognize when you’re being asked to be a waiter.  The second challenge is how to not be a waiter.

    If you find yourself only implementing what someone tells you to implement, you might be a waiter.  There is definitely a time where this is the right thing to do.  However, if you want to be more than a waiter, just remember that you are trying to help.  Find out what the goal is that is trying to be met, and help brainstorm ideas of how to achieve that goal.  As you diverge, keep as engaged as possible, and never judge the ideas that are being brought up.  As you converge on an idea, make compromises and remember to keep an open mind as you critique ideas as a team.

    What you’ll find out is, as you earn respect and trust, you’ll be given more creative privileges, and you’ll be less of a waiter and more of  a doctor.

    Just for the record, Jeff Patton agrees.

  • Patterns for Getting Your Ideas Heard – BrownBag

    by Matt Terry
    Here at SEP, we have some pretty awesome engineer-led sessions…book clubs, academy courses, and brown bags (just to name a few).  Recently, I gave a brown bag on a topic that I am excited about – getting your ideas heard.  I wanted to give this brown bag for a few reasons
    • I heard a common theme when talking with others around the company – “I wish they would have listened to me earlier”
    • And for some semi-selfish reasons – I felt like it was time to start contributing, I wanted to help create change, and I really wanted to help people learn
    Here is my slide-deck.  Note that it’s not nearly as useful without being at the brown bag, but I have a recap below and hopefully we can talk in more detail about it.  I’m not going to list the examples that I gave during the brown bag to support these patterns, so if you have questions post them and I will be happy to give more details or specific examples.

    http://www.slideshare.net/macterry/patterns-for-getting-your-ideas-heard

     

    What went well in the brown bag:

    The information, discussions following, and using my phone as a PowerPoint remote all went well.  I would definitely do this type of brown bag again!  I also really enjoyed being able to share something that I’m excited about.

     

    What didn’t go so well:

    I didn’t engage everyone in the beginning, and I blitzed through the presentation.  In the future, I could definitely do a better job of asking questions up front, instead of waiting until the end.  And I need to practice leaving a small gap between my transitions to allow for others to have questions.  A 30 second gap might feel like an eternity, but the 5 second gaps I was leaving weren’t conducive to discussions.

     

    Recap of presentation:

    I started off by listing 2 rules that make these patterns work – “be curious”, and something I like to sum up as “Happy Spouse = Happy House”.

    Being curious means that you will  try to do the following things at all times when working with others:

    • ask questions and/or restate the problem
    • don’t make any assumptions without confirming them
    • make sure you understand where the other person is coming from

    “Happy Spouse = Happy House” basically comes from the fact that human interactions are relationships, and in relationships you get what you give.  Consider the following when working with your “spouse” (peer, manager, client, etc.):

    • pick your battles – don’t stand up against every “bad” idea, make sure it’s worth fighting for in the grand scheme
    • don’t become a downer that only points out flaws, you should also practice supporting good ideas as well
    • practice the principle of reciprocity – you get what you give
    • being a control freak isn’t automatically bad…it’s the out-of-control freaks that are bad

    After talking about the rules, I talked about 6 patterns that make up a recipe for success…for me.  These are patterns that I’ve leaned from seeing others in action, read about, or just developed from my own experiences.  I like to refer to these patterns as Jedi Mind Tricks…because they are that powerful in my daily life.

    It’s all about me users

    • Shift the focus off of MY ideas, and onto YOU, or the USERS, or the CUSTOMERS
    • By shifting the focus, arguments against the idea I’m bringing to the table have to be much stronger
    • Because you are talking about an idea, and not about roles/responsibilities of implementing an idea, it is not weasel-speak to remove the first person speech

    Authority

    • If you are bringing ideas to the table, establish yourself as the figure of authority on that matter (even if you aren’t the “boss”)
    • Be confident, you want to be perceived as an expert of this matter
    • Remove the emotion – there is a fine line between having ownership and being emotionally attached
    • Be honest – it’s okay to say you don’t know, but let them know when you will know and follow through

    Social Validation

    • It’s easy to adopt something that is already being used, or that people like
    • Use open source projects to confirm architectures, or designs
    • Refer to other projects (current or past) where something did or didn’t work
    • Reference professional studies and/or research that are applicable (I find myself referencing Nielsen’s group a lot)

    Power of Because

    • The word “because” is the most powerful word in the English language, use it to your advantage
    • Our brains are wired to think in terms of cause and effect
    • Reduces fluff – adds concrete substance to an otherwise empty claim or opinion
    • Use this to accent goals or constraints

    Lead the Blind

    • Ask questions you already know the answer to in order to guide them to come up with the idea themselves (and therefore makes it easier for them to buy into)
    • Ask questions that allow you to dig deeper and find out the root problem, higher goal, or something else entirely…which means we ultimately solve the correct problem.

    Restate the Problem

    • If the other person knows that you understand their problem, then they are more likely to hear you and your ideas, instead of always trying to tell you their problem.