What is going right: Mob Programming Benefits (Part 1)

I want to call this blog post What is going right: Mob Programming Benefits (Part 1) because I know there are and will be more things going right because of Mob Programming. As of right now, I have been mob programming for just under a year. So for part one, I wanted to explain two of the major factors that are going right in mob programming.

  1. Idea sharing leading to learning
  2. Building strong teams

There is so much more that comes with mob programming, but I want to stick to just two for now. I plan to expand this list greatly but just want short and sweet post for now.

Idea sharing leading to learning

If you are not learning, you are falling behind. Learning should never be undervalued.

With mob programming, you are learning daily. You have the brains of 3, 4, 5 or more developers all being shared. Woody Zuill’s one sentence explanation of mob programming describes the learning perfectly, “All the brilliant people working on the same thing, at the same time, in the same space, and on the same computer.”

All the brilliant minds are developing ideas, they are sharing those ideas with everyone. Even if an idea is not entirely thought out it is shared. With all the other skilled developers around you, something great can be built out of your idea. Sharing ideas to boost learning is one of the biggest things going right with mob programming.

A great feeling I have gotten many times while mob programming has been stating an idea to a solution I had that did not solve the whole solution but only part. As soon as I described the idea to the team other members jumped in being able to solve the pieces I had struggled to solve. I learned how to solve the full solution by presenting my partial idea.

Sharing ideas to boost learning is one of the biggest things going right with mob programming.

Building  Strong Teams

I have had some of the strongest and most cohesive work teams due to mob programming. The idea of working with the same people 8 hours a day every day may scare some people. But the safe environment we create at work where ideas, even bad ones, are accepted and thoroughly thought through makes a good team.

By spending so much time with the same people, I learned a lot about them. I was able to learn what specialties they have so I knew where I could get specific knowledge if needed. I have even able to pick up on the idiosyncrasies of individuals, so I knew when the right time to coerce ideas out of them in a safe way was or when to be quiet and let them process ideas in their own head.

Spending so much time with everyone on a team built strong work and even personal relationships. We easily learned about each other and with each other. I know I was nervous in the beginning about spending day after day working with together in a team, but it really has been an amazing experience so far that I look forward to every day.

 

Stay tuned for more short “What is going right” posts.

falloutvaultboythumbsup

The Basics of the Alexa Skill IntentSchema

In this post, I will describe the basics of designing and working with the IntentSchema for an Amazon Alexa skill. To provide some context, an Alexa skill can have multiple intents. Each intent is a specific action within the skill.

Imagine we have a calculator skill. The user can ask Alexa to add or subtract two numbers. The skill would be the calculator and the two intents would be adding and subtracting. The intent schema comes into play because we are allowing the user to add or subtract any two numbers. We use the IntentSchema.json to prepare Alexa to accept those two arguments. Note: The programming idea of an argument is referred to as a slot in the Alexa world, I will refer to them as slots for rest of post.

For our addition and subtraction intents, we would need to define two slots for both of them the first number and second number in the calculation. See below the intentSchema.json currently with only the AddIntent slots defined in it.

{
   "intents":[
      {
         "intent":"AddIntent",
         "slots":[
            {
               "name":"firstNumber",
               "type":"AMAZON.Number"
            },
            {
               "name":"secondNumber",
               "type":"AMAZON.Number"
            }
         ]
      }
   ]
}

You can see in the json that we have two individual slots (firstNumber & secondNumber). Each has a name and a type attribute these are required for every slot that you define.

{
	"intents": [{
		"intent": "AddIntent",
		"slots": [{
			"name": "firstnum",
			"type": "AMAZON.NUMBER"
		}, {
			"name": "secondnum",
			"type": "AMAZON.NUMBER"
		}]
	}, {
		"intent": "SubtractIntent",
		"slots": [{
			"name": "firstnum",
			"type": "AMAZON.NUMBER"
		}, {
			"name": "secondnum",
			"type": "AMAZON.NUMBER"
		}]
	}]
}

Above is an example with both of our intents defined inside of the intentSchema.json Notice slots within the same intent must have unique names but slots inside of a different intent are within a new scope.

All slots must have a defined types. Amazon has some default types that you can use for your apps. These types are the most common:

 Slot Type  Description
 AMAZON.NUMBER  Able to recognize numbers and convert then to integers. Example: Two converts to 2
 AMAZON.TIME  Converts times into programmable values. Example: “Set alarm for seven pm”. Converts to 7:00 or 18:00 depending on settings
 AMAZON.DURATION  Able to change durations into usable values Example: “Set alarm for 45 minutes”. Converts to PT45M
 AMAZON.FOUR_DIGIT_NUMBER  Recognizes 4 digit number sequences like years and converts them. Example: “Wikipedia war of eighteen twelve” converts to 1812.
 AMAZON.DATE  Converts dates into usable formats. Example: “What is the weather today” converts to what is the weather for 2017-3-2

If you find yourself struggling with understanding what the above types do and how they handle user input. Make sample apps and look at what Alexa returns as the data. It is useful to see the real world conversions that Alexa does.

The intentSchema makes Alexa powerful because it can make your skills more dynamic, in that you can accept all types of input from the user. It is possible to build custom slots as well as lists to really build out your skill. I will make a post in the future about these advanced topics.