Tuesday, April 17, 2018


So about 3 years ago I moved to Atlanta and have had a daily one-way commute between 45 and 80 minutes long.  In order to more effectively use that time, I have joined the podcast community.  With almost 3 years of experience, I wanted to share some of the podcasts that I regularly listen to.  I'm sure that I'll add and subtract from the list as time and tastes change.  Understanding that everyone is a unique individual, your mileage may vary but I hope that you find something that you haven't previously discovered and expands your learning!

Tuesday, March 18, 2014

“Thinking in F#” and “Software Craftsmanship and Agile Code Games” Slides

I’ve posted the slides from my recent presentations at Utah Code Camp 2014.  If you missed it, I’ll be presenting “Thinking in F#” at Boise Code Camp 2014 on April 5th and “Software Craftsmanship and Agile Code Games” at Mile High Agile 2014 on April 18th.

Check out these and previous sessions on my Sessions page.

Friday, March 7, 2014

StrengthsFinder Team Activities

While I was at Ancestry.com, we used the StrengthsFinder assessment to give us insights into ourselves.  If you haven’t taken it, I highly recommend it.  You can purchase a code, or you can get one with a copy of StrengthsFinder 2.0 or Strengths Based Leadership.

While it’s interesting to know about yourself, when in a team setting it’s equally important to know about your teammates in order to work effectively with them.  To help my team with that, I designed some activities for us to do as a team.  Here are my notes to facilitate the activities.

StrengthsFinder Team Activities

Team Top 5 Grid

Team Top 5 Grid - Google Sheets version

A few months later, we did an activity with multiple teams in order for those other teams to get to know each other better and the teams to know and understand each other better.  This includes many of the same individual team activities while adding some activities that have the teams interacting.

StrengthsFinder Multi-team Activities

Again, many of these are to help team members understand and appreciate each other.  Also as you do these activities, keep in mind that the debrief (the questions and conversation after the activities) are where the real action is.  The point of the activities isn’t to teach but to facilitate learning.  You’ll want to give clear explanations (possibly have slides to show instructions) and then walk around, listen to what’s going on, answer questions and offer gentle suggestions.

Hope these are helpful to someone!  Feel free to use all of these, cherry pick and/or remix with your own ideas.

Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.

Thursday, April 4, 2013

After the Offer Come the Questions

There are some questions that are appropriate to ask in an interview and some that should be reserved until there is an offer.  Somehow I became “famous” for the questions that I ask after I’ve been extended an offer.  For me, these are important to give me a more complete view of the working environment and attitude of the company and team that I might join.  It also gives insight into specific policies and practices.  I like to have as much information as possible when considering an offer. I also want to reduce the number of surprises after an offer has been accepted.
I’ve been asked several times for the “list of questions” that I ask and I’ve promised a blog post for a while, so here it is!  Here are the categories that I am interested in with questions that I’ve used in the past for each.  These, of course, need to be suited to the particular situation and some you may not care about.  And some I will ask in an interview depending on how well I know the interviewer.  Enjoy!
  1. Hardware
    1. What is the hardware setup for developers?  Desktop/laptop, monitors?
    2. Would I be able to choose anything about my systems or is there standard hardware across the company?
    3. How often is hardware replaced?
    4. With hardware, would I be able to choose my own mouse and keyboard? 
    5. Is it okay to bring in personal hardware?
  2. Software tools
    1. What software tools does the company provide?  (Resharper, NCrunch, profiler, etc) 
    2. Does IT have heartache over what's installed on a developer's box (other than file sharing software or other things that would eat bandwidth)?
    3. What source control repository do you use?
    4. What sort of testing environments are there?
    5. What test testing frameworks do you use? nUnit, xUnit, mbUnit, mSpec?  Acceptance tests?  Fitnesse or something similar?
    6. What sort of tools do you have/build/maintain around the health of your systems (to monitor, alert, etc)?  Is this something the dev team works on or is there an Ops team?
  3. Physical environment (usually you get to see this as part of a tour at your interview, but if not for some reason)
    1. What type of desk and chair are provided?
    2. Would travel ever be a part of this position?
  4. Learning
    1. What sort of policy does the company have around budget for learning?  For example book purchases, conference fees/travel, online courses.
  5. Company Policies
    1. What does the performance review process look like?  What criteria are used?  Are employees evaluated on an absolute scale or on a curve (with respect to their peers)?
    2. What does a "typical" annual raise look like?  What does an extraordinary annual raise look like?  What criteria determine this?
    3. What does the title/level system look like?
    4. Is there a Moonlighting Policy?  For example if I write a project at home (on my own time, on my own hardware with my own tools) am I able to retain rights to that software?
    5. Is there a policy on contributions to open source projects, either out of something at work or on my own time?  What about use of Open Source Projects?
    6. Dress code - is there one and if so, what is it?  (and is it strictly enforced if there is one)
    7. Is there a policy on bereavement leave?
  6. Team Culture/Process
    1. Iteration/release cadence - What does an iteration look like (planning, retrospectives, review)?  Do you have a daily standup? Who attends?
    2. Requirements - how are requirements expressed in the team?  User Stories?  Use Cases?
    3. How are they tracked?  Is there a big visible board somewhere or is it tracked electronically (and if so, what software is used).
    4. Where do these requirements come from?  How is the backlog generated?  Are stories decomposed into tasks or is a story the unit of work?
    5. Estimation - Do you generate estimates and, if so, what method/process is used?
    6. Are you currently doing continuous integration? If so, what platform are you using to do that?
    7. What about continuous delivery?
    8. How much code is the team responsible for?
    9. What is the test coverage like?  Is TDD used on the team?
    10. What percentage of the time is the team pairing? What activities does the team pair on and which do they not?
    11. How does this team interact with other teams in the company (if there are other teams)?
    12. What is the team culture around lunch?  Do most people work through lunch, eat at their desk, go out alone, go out as a team, go out with other people in the company or outside the company? (I'm guessing that all of these happen occasionally, looking more for what the norm is)
    13. Are there any snacks/food provided by the company?  Any pot luck events?
  7. Career Path
    1. Are there continued growth opportunities available without moving into management?
    2. Are there opportunities to move into management?
    3. I'm interested in knowing what you feel I would bring to the team (how I could contribute immediately and longer term), how you see me fitting on the team, what the main attributes that you see that led you to extending an offer and what things you see that I would need to work on.
There are also questions about benefits and such, but those are very specific based on the information provided.
There is another list that I’m starting for the team that I’d be working with.  Here is what I’ve started with:
  1. What do you enjoy about your job?  What are some of your favorite things?
  2. What are some of your least favorite things?
  3. What changes would cause you to leave?  (as a fill in the blank: If ______ changed, I would leave.)
  4. What would another job offer that would cause you to go somewhere else (excluding money)? (as a fill in the blank: If another company had _______, I would go there.)
  5. What, if anything, do you miss from a previous job?
So there it is.  I hope these are useful but you’re probably thinking “duh, of course I ask those things.”  In that case, the curtain has been pulled back.
Is there anything that I should add to these lists?

Friday, March 22, 2013

Published on Ancestry.com Roots Tech blog

Posted a blog entry on the new Ancestry.com Roots Tech blog called “Games at Work?”

Here’s the opener…

Agile Games are a way for teams to learn and apply agile concepts in a fun, playful, safe environment. Play is important as it brings aliveness to our work environment that allows for creativity and our best work to flow.  Games provide a safe environment where people are more open and willing to take risks and embrace change.  The safety of games also allows us to talk about work… without necessarily talking about work.

Go check it out!

Thursday, February 7, 2013

Employer Investment in Employees

Uncle Bob has a pretty clear opinion on who has the responsibility for a programmer’s practice/learning:

Professional programmers practice on their own time. It is not your employer’s job to help you keep your skills sharp for you.

Uncle Bob in The Clean Coder Chapter 6

Here Uncle Bob is talking to programmers, to employees.  What I hear is “don’t expect your employer to help you out.  If they’re not, that’s not an excuse.”

So, my question is, does that mean that employers should not provide any learning opportunities for it’s employees?

Sure, programmers are responsible for their own learning opportunities but could part of that be making sure to find an employer that provides those opportunities?  I personally take some time outside of work to sharpen my saw, but I also look for an employer that cares enough about me to invest in me.

Here is my reasoning why an employer would want to provide learning:

  • Hiring is hard and expensive. If you have people that are a good fit, it’s usually easier to improve their skills than to hire someone new.
  • Learning opportunities at work can inspire people to pursue outside work opportunities.  I have has several people that I work with start attending Utah Software Craftsmanship, Utah Code Camp and Coderetreats because of things that we’ve done during working hours.

What do you think?  Should employers provide opportunities for practice and learning?

Wednesday, November 28, 2012

If you happen to be a psychic: Quote of the Week

Just started reading Refactoring to Patterns.  Starts off with a good reminder that YAGNI.

When you make your code more flexible or sophisticated than it needs to be, you over-engineer it.  Some programmers do this because they believe they know their system’s future requirements.  They reason that it’s best to make a design more flexible or sophisticated today, so it can accommodate the needs of tomorrow.  That sounds reasonable – if you happen to be psychic.

Joshua Kerievsky, Refactoring to Patterns p.1

Look at the code you’ve written recently.  Were you pretending you’re a psychic?

Original design by andrastudio
Blogger port by Blogger Templates