Rusty Divine

Live, Love, Learn, Teach

Nebraska Code Camp–Year 4

It’s time for Nebraska Code Camp again! I’m looking forward to Friday’s lab sessions, and Saturday’s break out sessions, which I’ll be speaking for my first time at a code camp for my talk titled “An Agile Requirements Gathering Process to get to MVP”.

We are lucky to get Iris Classon to fly all the way here to be our keynote speaker this year. We had no women speakers submit for a talk, but Iris stepped up and is leading two lab sessions and presenting the keynote, too!

Code Camp is a great chance for developers to network, re-energize by learning about new techniques, and it’s a great place for aspiring developers to get a better feel for what to expect.

Hope to see you there!

How to Enforce Explicit TypeScript Types in Visual Studio 2013

TypeScript has a compiler flag –noImplicitAny to make sure you have explicitly typed all of your variables, even if you type is as “any”.

//With --noImplicitAny flag set, this is OK
class Student {
    fullname: string;
    constructor(public firstname : any, public middleinitial : string, 
        public lastname : string) {
        this.fullname = firstname + " " + middleinitial + " " + lastname;
    }
}

//With --noImplicitAny flag set, this will throw a compile error:

class Student {
    fullname: string;
    constructor(public firstname, public middleinitial, public lastname) {
        this.fullname = firstname + " " + middleinitial + " " + lastname;
    }
}

In order to set this flag in Visual Studio 2013, edit your project’s properties and then in the TypeScript Build menu, uncheck the Allow implicit ‘any’ types.

TS_implicit_any

With the check box unchecked, your compiler will catch any instance where you did not declare the variable type in your TypeScript.

Defining the Slides for my Agile Requirements Gathering Talk

Previously, I outlined my talk into seven six-minute sections, with a three-minute intro and outro. That’s 48 minutes, which is good, but I found out that the talk is supposed to be 45 minutes and I’d rather leave time to have a question or two at the end than run over. If I did seven five-minute sections, it would work out a bit better.

This revelation hasn’t affected my outline - I haven’t cut out any of the points yet. I feel like there is still too much there, and some of it may not support my main idea of showing the audience how we did this type of assessment, but I’m more comfortable risking developing slides and notes that I’ll later cut out than pre-optimizing the talk.

I have a theme chosen for the slides (one of the default themes for PowerPoint 2013), and my working list of slides is:

title_slide_mvp

  1. p0  Title Slide
  2. p1,2 The old way (how it used to be)
  3. p1,2  Idea vs. Problem (what it works well for, and doesn’t)
  4. p3  How to sell it to stakeholders (both $ and rationale)
  5. p3  Preparation for the meeting
  6. p4  Where’s the Fruit (idea of the app we’ll walk through)
  7. p4  Assessment Agenda (describe different parts)
  8. p5  User Stories (how to collect and record)
  9. p5  WTF’s example stories
  10. p5  Constraints & Assumptions
  11. p6  Getting priority & CFS/MVP agreement
  12. p6  Whew. Retro time
  13. p7  Checklist of what’s left to do
  14. p7  Running a project (burn down/agile)
  15. p8  Thanks, contact info, questions

Fifteen slides at an average of three minutes per slide seems about right to me. Adam had an interesting suggestion – he wondered if assigning planning poker points to each section would help estimate how big that section was. I think this could work for the slides, too.

Next: design the slides. I’d like to include some animation (content coming in/out of a slide) and stock photography balanced with my main points in text. I’d like to stay pretty light on text and try to focus on things that will grab the audience’s attention and keep it. I’d like to try throwing something into the middle that breaks the norm to keep them engaged. Around slide 8, the half-way-point, I’ll ask for a little audience participation to suggest a user story for WTF – I’ll need to be careful to time box that experiment so that I don’t run over.

Outline for Upcoming Talk on Getting to Minimum Viable Product (MVP)

On the last Saturday of March, I’ll be giving a talk at Nebraska Code Camp titled, “An Agile Requirements Gathering Process to get to MVP.” My progress will be shared here on this blog, and ultimately, the slides and maybe even a video of my presentation will be available.

The talk covers the experience Keil, Adam, and I had using a requirements gathering process we adapted. The big idea is:

An agile assessment process can help stakeholders define and agree on the vision for a project, the most important features and their priorities, and help prevent developing something that strays off target.

I want each slide in the presentation to support that idea if it can so that the message sticks. Having the one big point to make helps me determine how to prune and focus the talk.

7 sheets of paper * 6 mins per sheet is a great way to plan a talk. Hat-tip @shanselman, @john_papa, @pluralsightI started out with a stack of sticky notes, each with its own thought. Next, I decided that if I divided the presentation into seven six-minute talks, plus an introduction and conclusion, then I could more easily determine how to pace the talk and define its structure. I took seven sheets of paper, and organized the sticky notes onto them.

Today I took each page and thought about the main reason for each, then created an outline with notes about the ideas I had. I started combining and separating the notes on different pages, moving them around, and identifying some I hadn’t thought of.

The outline is posted below so that Keil and Adam, or anyone really, can comment on it and help me to clarify it. I feel like I have too much content here, so using the big idea above for reference, I should be able to pull some out – for instance, talking about how to sell an assessment while handy doesn’t really support the big idea. I’ve left that in for now to help show the process.

I want to include as much showing of the process as opposed to telling about it as possible, so I am going to be walking through the assessment of an app called “Where’s the Fruit” (WTF). Adam and I have already done an assessment on this app, which we did to help show off the process to potential customers.

I’ve been using the Pomodoro technique (just the timer) while working on this presentation, and that’s really helped me focus. My next step will be to start creating the slide deck using some tips from Pluralsight (John & Scott), Scott Adams, and Rexi Media.

Part 0 - Intro

- Introduction, welcome

- Talk about what’s in it for the audience (story/reward), provoke curiosity

- brief overview

Part 1&2 - Answer Why

- Story of how we were doing things before this method. Good and bad. Ask audience if they've can relate.

     - Tell me how much this project will cost after this 30min meeting; book review analogy

     - There is no such thing as a simple app

- Story of how we learned about this process from someone in our peer group.

- Why it works for consulting projects

     - Balance between full agile and waterfall; a middle-ground for establishing trust

     - Weed out customers who won't even pay for the requirements gathering. Story of D.S..

      - Client/Stakeholder empowerment through driving the requirements  

     - Budgeting needs

          - Fixed price vs. T&M

- What does it not work well for

     - "I have a problem"

     - Migrating one system to another

     - Integrating one system to another

- What does it work well for

     - "I have an idea"

     - greenfield

     - Getting multiple stakeholders to agree on the vision and priority. Need as many stakeholders in the room as possible, and devs, too, so they can get in on the vision from the ground floor.

     - Getting the core feature set determined (aka mvp)

Part 3 - Selling & Preparation

- Simple to sell a fixed-price product vs a T&M project

- This process, or something like it, is something we have to do anyway. We're just pulling it out and putting it in front.

- Gives customer a chance to work with us with a small risk

     - At the end of the assessment, they can take it and shop it around or continue with us

- We don't validate the business idea, but could give them some feed back as a SWOT

- Consider having a plan for handling conflict between stakeholders and practicing.

- To prepare

     - Send customer information about the process and what to bring and what to expect. The more work they put in up front, the better.

     - Setup the room, preferably one that is very large and has a large white board or two or wall board paint

     - Put the agenda and rules up

     - refreshments and name cards ready

     - sticky notes for story titles

     - One note taker, one facilitator

     - Try to do between meals

Part 4 - Getting Started

- We are going to walk through a mock product - where's the fruit

- We don’t know the budget or schedule, customers don’t like to tell us that up front (trust)

- Talk through the agenda

     - Never feels like enough time, but we make due

- Define the objective

     - what makes a good objective

          - SMART, derived from narrative, like an epoch; could have a so that

     - edit it as needed throughout the day

     - WTF's objective revealed and dissected

- Users and Roles

     - Admin users

     - end users of different types (don't get too stuck on these)

     - system integrations

     - report users

     - these become the actors in the user stories and can provide a check point during the meeting to see if we've captured the main stories for each user

Part 5 - User Stories

- User stories format

     - format of a user story

     - why the so that is so important

     - look out for circular reasoning

     - conditions of acceptance

     - consider admin tasks; back-end user & data management

     - consider the long haul; archiving, cleaning, moderating, reporting

     - have customer describe the workflow they envision as if they were sitting down to use the app

     - easy to overlook stories about security, exports, logging, reporting - some of these can be added in after the assessment during the research

- User story examples

     - WTF's examples

     - Get the audience to throw one out

- Write down constraints and assumptions as they come out

     - show WTF's examples

- Diagram and mockup as necessary, but beware of spending a lot of time there

Part 6 - Defining the core feature set

- Good time for a break to get people's mind a rest

- Put all the sticky notes of feature titles onto the wall

- Have stakeholders take turns organizing them into what is most important first

     - guidance is needed to give them context

     - Importance does not equal darling

     - Which feature is more important than another in context of having a functioning application

     - Can't put stories at the same level; can nest them if they really are related, but otherwise have to decide if one of these stories wouldn't get done, which one would I rather get done

- After everyone is satisfied, it's time to draw the core feature set line

     - Sometimes this is hard for customers who want it all

     - We need to determine what has to be there for the system to stand up on its own

     - We can and should add more later; priorities will shift, new ideas gained, old ones discarded.

     - What we find is the target has moved by the time we get that small set finished, so aiming to do more than that will often waste time, effort, money.

- That's a wrap. Now, we're all exhausted and don't plan on doing anything else productive.

- One more thing to do - a meeting retro. We did this without the customers sometimes and with them sometimes.

Part 7 - Post Assessment

- Off-the-shelf research - is anyone else already doing this; can we integrate?

- How we point stories

     - filling in any missing stories

- Assembling deliverable

     - creating some mockups, workflow sketches

     - tools: PowerPoint w/mockups,

     - lean canvas and/or SWOT

     - Proposal with fixed price, first available start date, stories and their sizes down to CFS

          - project scope & price is more about sum of user points; customer can swap in/out stories as long as total points are same

     - how to convert points to dollars

- Running a project

     - two-week iterations, burn down, daily stand up with customer, demo/retro, customer prioritizes and manages scope, change requests

Outro

- You can use this process for your own ideas, or for customers

- It is a great way to brainstorm features, get agreement among stake holders, and get everyone in the room on the same vision

- Get the slides and more information from my blog, and feel free to contact me

- Questions?

Spooky Coincidence?

My 3-year-old son is interested in the difference between being alive and dead, and what it means to be dead. It started with a visit to Morrill Hall – a museum with plenty of bones – where his curiosity was piqued by the Plesiosaur in the floor. It’s a great exhibit of the long neck of that marine reptile under protective glass running the length of the exhibit room so that kids like Rowan can run atop the entire length of the neck.

My wife and I have a science background, so explaining how the dinosaurs lived and died and leading into how all living things eventually die was a natural progression for us; we’re not ones to sugar coat or out right fib, but we try to be careful to present death in a way that is natural and not scary.

On the drive to pre-school today, Rowan was talking about what would happen if his eyes fell out. I think he is tangentially thinking about how skeletons do not have eyes, because he has talked about that before. I had some fun with it and told him it would be rather painful, but I put my hands up to my face and pretended to move my dangling eyes to different places – crossed, or on the side of my head – and we laughed about how funny it would be to see things with eyes that we could reposition.

Although sometimes a little comedy helps, we usually talk about death in a practical way; it happens, but not often and usually not until someone is very old. I like to remind him that his grandmas are around to take care of him, so when he is a “Daddio” we should still be around to take care of his kids.

Rowan does know that my father passed away shortly after Rowan was born. We don’t talk about it much, but we have told him that he died in my mom’s house, which is where Rowan spends a lot of time after she picks him up from pre-school each day and before my wife picks him up after work.

So, I got a voice mail from my mom tonight that something a little strange went on today and she wanted me to give her a call. It was 10pm before I got back to her, but she wanted to know how much we had told Rowan about my father’s death. I told her that we have told him he died in the house, but that was about it; and I think I told him that just once.

Evidently, today Rowan crawled under the kitchen table. He then told my mom that someone had died under there and then some men took him to the cemetery to bury him. He said that he saw some writing under the table, so that’s how he knew someone had been under there.

My mom was spooked out for good reason since that is the room my father died in. So, she crawled under the table to see if there was some paranormal message, but there wasn’t – only a few letters. Rowan wasn’t bothered at all, he just went into another room to play.

After getting some chills down my spine from this story, I put Rowan on speaker phone to hear it from his point of view again. I asked him what he saw under the table and he said he saw the number D and so he thought it was my Daddio who was under the table writing a message when he died. I asked if he saw any one or heard anyone and he said he didn’t, that the man must have already been taken to the cemetery.

My mom then crawled under the table again and saw the letters E and B, or maybe the number 3. They were marks from the construction of the table, nothing more. Still, having Rowan pin-point the location of my father’s death was spooky. The added details about the men who took him to the cemetery only made it weirder, since he doesn’t usually have stories that are that intricate.

I told my mom that I would start paying attention to spooky things he said around here or at his other grandmother’s house to see if he just talks like that – maybe he is just starting to make up elaborate stories. I said that if he keeps bringing up more details or dwelling on the dining room table, then I’d start to get concerned – for now, I choose to believe it was just a spooky coincidence.

I wished her good luck sleeping tonight, though; she’ll need it.

Effective Scrum and High Quality Code – LNK .Net Talk by Rod Clarr

Tonight Scrum Master Trainer Rod Clarr presented at the Lincoln .Net User Group on Scrum and High Quality Code. The main point he made was that agility and high-quality code need to go hand-in-hand; developers need to produce the highest quality code they can.

Rod walked us through how to measure quality from different angles. From a functional standpoint – does the product perform as expected – quality is easy to test if you have done a good job defining what the product should do. From a structural stand point, it may not be obvious how to determine what quality code is, but poor quality code does rot faster, especially when it does not have unit tests.

Rod described two concepts to help qualitatively evaluate the quality of code from a structural standpoint:

  1. Viscosity – how hard is it to move the project in a different direction by adding or changing a feature. The more viscous, the more rigid, the worse the structural quality is.
  2. Testability – how difficult is it to write automated tests for the product – the more difficult, or the less coverage you can achieve, the worse the structural quality is. A project needs to have good quality before it gets to QA-style testing; by that point it is likely too late to improve structural quality.

Rod also talked about the sweet spot of the intersection between Scrum, Acceptance Test-Driven Design, and Component-based Architecture. Scrum is the process to manage risk in the process, ATTD is the top-down approach to defining what done is, and Architecture is the bottom-up test-driven development that results in good OO-based design.

Most of what Rod talked about resonated with my experiences. We’re currently focused on moving a number of iterations worth of work to production so that users can validate the progress we’ve made – the longer we wait to get to production, the more risk we incur in assumptions that we may have made that won’t be revealed to be wrong until users really pound on the code.

We also need to include more technical debt stories as we go; which Rod talked about as being important, or at least, not adding more technical debt knowingly. Our team has discussed adding two technical debt iterations per year, but I wonder if a better approach might be to allocate a number of story points per iteration to beat back technical debt.

Rod talked about getting the whole organization on board with the importance of quality and the Scrum process. Keil commented about this after the meeting, and I totally agree, that it is a very different thing for management to be OK with a project being run in an agile process versus management running their own process in an agile way (the latter being the much less risky option of the two).

Finally, Rod talked about the importance of feed back loops in requirements gathering. The first thing you need to do is confirm you understand what the customer is asking for, and then ask questions. We have started doing a better job of this on our team by creating good meeting notes to record decisions made (which have proven very valuable to refer back to), and by adding conditions of acceptance to all of our user stories to help us define and agree on what done is.

Three Weekend Projects for a Toddler

We’ve been getting creative this winter to keep our three-year-old busy! A closet dedicated to art supplies, including boxes and canisters that can be re-used, can be a source of inspiration when looking for something to break up the day.

Make a Geometric Puzzle

fish_puzzle

This puzzle was inspired by the 7-piece tangram puzzles, which would also be a fun project on their own. We weren’t sure our son would be interested in a nice wooden tangram puzzle, so I created this cardboard puzzle of a fish to test his interest level.

  1. Do a Google image search for something, like fish.
  2. Click on Search Tools and change Color to Black and White and Type to Line Drawing.ImageSearch 
  3. Download the image and print it on a sheet of construction paper.
  4. Cut out an 8.5x11” section of cardboard box, and use some Elmer’s glue to glue the picture on. Putting a book on the page for 30 minutes will be enough to let the glue set.
  5. Take a blank sheet of paper and draw some line across the page. Make each line intersect an edge of the page, and make about 7 internal shapes for the best configuration. Make sure there is a little bit of the image on each piece.
  6. Lay the page on top of the picture and use a ruler and razor to cut out the pieces.

Make a Monster Truck Hauler

monster_hauler monster_hauler_inside

We had some mailing tube end caps laying around that looked a lot like monster truck tires; and there’s nothing my three-year-old likes more than monster trucks.

  1. Take some mailing tube ends and use a razor to trim off the rim so that they look more like wheels.
  2. Find 4 washers and screws where the washers are large enough to cover the holes in the mailing tubes.
  3. Trace around a 3/4” dowel where the axels will go through a box; approximately 2” from each edge and 1/4” from the bottom of a box.
  4. Use a razor blade to cut out the holes in the box where the dowel will slide through.
  5. Find the right length for the dowel by pushing it through the box and putting the wheels on; leave about 3/8” spare so that the wheels have some room to turn.
  6. Cut the dowels and then assemble them onto the monster truck with the washers and screws.

We found it rolls well on carpet, but slides on smooth surfaces.

Make a Snake Car

snakecar_1 snakecar_2

Our son fell in love with a wooden snake toy we found at a nature center here in Lincoln. It was made by someone here in town who has an Etsy shop, but this toy doesn’t appear to be listed at the time of this writing (he may make one for you if you ask, though).

I made this toy one afternoon with a hand drill, which made it difficult to get the holes drilled straight. After that lesson learned, I asked my mother nicely if I could buy or borrow her drill press, and she kindly obliged. So, although you can do this project with a hand drill, it will turn out better with a drill press.

  1. Cut 12 wheels in 3/4” segments off of a 3/4” poplar dowel.
  2. Cut 10 body parts in 2 1/2” segments from a 5/8” square poplar stick. Sand these to round the edges. Drill a 5/8” hole in the end of each segment – in two of the segments drill only one hole; these will be for the head and tail segments.
  3. Cut 6 axels from 1/4” oak dowel at about 3 1/2” length (enough to go all the way through the wheels and leave some wiggle room for the body segments).
  4. Use a drop of wood glue on each axel and push it flush into a wheel, then thread on the body segments as shown in the pictures above.

Our son loves to play with this car and have it wrap up onto itself. It reminds me of a Jacob’s Ladder in that fluid sort of way.

Some Tips on How to Get Started Programming for Adults

My brother-in-law recently decided he would like to learn how to become a software developer so that he could pivot in his career, or at least use the skills he learned to make it easier to do his job. He knows I didn’t get a traditional CS education – I have a BS degree in Geology – so he wanted to know how I did it and get some advice for what he should do. I sent him an email with some tips, but wanted to also post it here for anyone else who may benefit, and because Scott’s advice on saving keystrokes is something I’d like to strive for.

My brother-in-law is going to take some courses at the community college here, which  is great. I have had a good experience hiring a software developer who completed that program. I also encouraged him to explore some resources on his own because I know if he can be exposed to topics from different perspectives it will be easier to understand and retain the ideas he encounters in class.

Below are some resources I recommended for him to look at. If you are considering whether programming is right for you, then these resources could help you explore different topic areas and decide if you like it.

If you are ready to take the next step and invest some money in your education, you would do very well by purchasing a subscription to Pluralsight.

When you are ready to start experimenting with code, you should definitely look into the 10 free websites you can get through Azure, or even setup your development environment on one of their virtual machines that might cost of few cents an hour, but that can be turned off when you aren’t using them and cost you nothing. And sign up with GitHub or Visual Studio Online.

My path out of college started with databases and spreadsheets, moved on to putting that on the web, and then to more complex line of business web applications. I always loved solving problems and especially automating processes, but one of my motivations to learn programming was the salary range I could expect after 5 years.

He had the choice between classes in Java or C#, and I told him that there were a lot more jobs in this area with C# than Java.

Time Lapse of Crane at NDOR Bldg 1500

Today a crane lifted some heavy HVAC equipment onto the roof of our building at work! The window on the third floor by my desk provided a good view, and what better way to capture it than a nice time lapse video.

Hope you enjoy!

Time Lapse at NDOR

SQL Server Profiler Templates and How To Isolate My Database Calls from Others on my Team

Sometimes a time-saving feature is right under your nose for years. One example for me was the ability to save my SQL Server Profiler configuration and set it as the default template. I hope you find it useful!

Selecting a Base Template

After opening Profiler and connecting to a database a “Trace Properties” window will present itself for entering the trace details. To make a custom template, select any of the templates form the “Use the template” drop down and give it a Trace name like “{My Database} Standard Trace”.

When I run profiler, I am almost always just checking for excessive database calls (especially n+1 selects) or troubleshooting TSQL or stored procedure calls. Sometimes I’m running the trace on a development server that has multiple databases or users and I want to isolate it to just my calls. For me, “TSQL_Duration” a good starting point for a standard template.

image

Configuring Events and Filters on the Template

Next, click on the Events Selection tab to configure events to listen for:

image

Be sure to check the “Show all columns” checkbox. This is important because if the column isn’t visible in this events grid, then you can’t filter by it in the Column Filters tool.

Next, click on the Column Filters button and filter out any events from other databases on this database server (use the percent sign % as a wildcard here):

image

Occasionally I will also change the login name in my app’s connection string so that I can isolate just my connections by adding a filter on the “LoginName” column.

Click the Run button to try it out. To make changes to the columns and filters, be sure to stop the trace first, then click on the properties icon in the tool bar.

Saving and Exporting a Template

Once satisfied with the trace template, select File > Save As > Trace Template and enter the template name like “{My Database} Standard Trace”. The next time you start a trace, it will be in the drop down list of templates. You can also select File > Templates > Export Template to save it to a file and share it with your team.

Setting a Template to the Default Template

Setting the default template will save a few clicks each time you use Profiler. Select File > Templates > Edit Template. Choose the template from the drop down list, and then check “Use as default template..”

image

Final Thoughts and Other Options

A good code review should also check out the traffic hitting the database for the code under review. It is so easy to stop coding once something “works” and not consider how it will scale. Checking in with profiler is especially important if your project is using an ORM with lazy loading turned on.

I would not recommend running SQL profiler on a production database because it takes a significant amount of resources. If you do need to do something like this, consider whether there is another tool that would be safer.

I would also encourage you to consider the following tools in your web project: