Creating Quality with Mob Programming talk at PNSQC 2019

A few months back I was accepted to give a technical presentation at PNSQC 2019 (Pacific Northwest Software Quality Conference) titled Creating Quality with Mob Programming.

My final draft of the technical write up has been turned in and will be published in the 2019 proceedings. The paper and finding will be shared at my presentation. I am excited and nervous about the presentation as it will be my first ever talk at a conference. I am definitely more excited than nervous though!

Get more information on the talk here https://www.pnsqc.org/creating-quality-with-mob-programming/. If you can make it to PNSQC 2019 check out my talk.

ASP.Net Core API Course in the works

Recently, my time has been spent working towards creating my first ever online video course. I am currently generating content for a course focusing on C# ASP.Net RESTful API’s. The course teaches students about API’s and how to implement their own in C#. I will be publishing the course on Thinkster.io later this year.

I found out about Thinkster.io at a recent conference that I attended. They were looking for content authors. I had recently put in my resignation as an instructor at my local university and wanted a new challenge. Authoring online courses had always intrigued me and the opportunity to work with the Thinkster team piqued my interests. Their focus on exercise-based learning was a big plus.

I have a brand new recording configuration in my office and hope to generate a lot of video content. Take a look at my setup. I am excited to be working on my first ever online course and hope to create many more in the future.

Weather Ride Hits the iOS App Store

Weather Ride is officially released to the iOS app store. It’s free and available to download now. Give it a go now!

The app has been iOS ready for a while but I finally pulled the trigger and paid the $99 subscription fee to get my Apple Developer account. I’m glad I did because now I’ve got my app in both major store iOS and Android.

Now that it is getting more into Motorcycle Riding season I hope to promote the app more. I want it in the hands of more riders.

Expect plenty updates in the future, a major focus is UI overhaul to allow the app to function better on smaller screens is in the works. Right now, you can check out the latest versions of Weather Ride on the Android Play Store and the iOS App Store.

Weather Ride A Motorcycle Riding Weather App UI Overhaul

I have recently found motivation to work on my Android app Weather Ride. It is a weather app that makes suggestions on whether or not today or the current week is a good day to hop on your motorcycle and go for a ride.

I did some refactoring over the past few weeks but the bulk of my work has been put into revamping the terrible UI. First I got a designer to create some mockups and icons. Then I began implementing the much more professional look and feel. Below you’ll see the UI progress made so far.

Current UI of Weather Ride mobile app.

There is still more to do. I have not had a chance to touch the settings screen yet. I have mockups for that and I hope to tackle it soon. It gets the job done but not in the prettiest way.

Please install and provide feedback on Weather Ride available in the Android play store now.

Space Explorer Alexa Skill

Recently I published Space Explorer my first ever Alexa Skill! I have been messing around with Alexa skill for a long time now but had never actually published anything.

Space Explorer can tell you how many people are in space right now and the names of those people. A simple easy first skill. Space Explorer is nothing new to the skills market but it is my first skill and I wanted to keep it simple.

The skill calls upon a simple api service that provides all the information needed. Possibly in the future I will add some features such as where the people are in space, what space crafts are in space, or where the International Space Station currently is.

Overall making a skill for Alexa is not too difficult and I hope to make more of them in the future.

Enable Space Explorer on your Alexa enabled devices here Space Explorer.

Space Explorer Alexa

The Shape of Teams when Mob Programming

In Agile and outside of software development there is an idea that people have shapes. These shapes refer to the specialties of users in technologies or other practices. There are plenty of studies and other articles about the general shapes of people and how to build teams with these people. 

At a high level here are some of the most common shapes

  • Dash – General knowledge of many things to no expertise
  • T – A Good spread of general knowledge and one specialty
  • E – Someone that has experience and can execute plans
  • I – No general knowledge but has specialty 

shapesOfPeople

But for this post, I am not interested in the basic shapes. I want to delve into what shapes come about in a mob programming environment. What shapes come out when working in a highly collaborative team where all knowledge and tasks are shared.

From my experience, the basic letter and symbol shapes do not match up when mob programming. People are no longer specializing solely in one area. In my organization, every member of the mob touches every piece of the code from the front to the back end. This includes testing, security, deployment, and in some cases even UI design. 

We are no longer looking at a team where one architect creates the overall design that the team follows. There is no longer a QA member doing all the end to end testing. There is no concept of throwing pieces over the wall letting the next person take over. 

Let’s assume everyone joins a mob and starts as a T shaped member. Everyone has a general knowledge but one person is an expert in testing, one person is an expert in the technicalities, and another is an expert in design. As these members work together their knowledge is shared and transferred among them.

What I believe happens on a mob is the original T shapes expand. The single point of knowledge expands into the other areas that each other team member is an expert of. The T’s expand to become Trapezoids, specifically upside down trapezoids. 

Upside down trapezoid

The team members keep their original breath of general knowledge but their specialties expand. In time they are all experts in testing, the technology, design, and all other aspects of the project. Everyone on the team has become more versatile because of the collaborative environment. They no longer need to rely on a single person because of their specialty. 

Everyone is able to succeed and excel in the work they do no matter the task at hand. This is all created because of mob programming. 

My First Mobile App: Motorcycle Riding Weather

Motorcycle Riding Weather

Just recently I put my first app into the Android Play Store, Motorcycle Riding Weather. A 2018 goal of mine was to release a mobile app, and I have achieved that! It is a simple app where users manipulate settings to determine if the upcoming days will be good for riding their motorcycle.

I released the app as an MVP (Minimum Viable Product). It is barebones for right now. I plan is to continuously improve the app with more features and more riding settings to configure.

It was a fun experience putting together the MVP. I have taken some shortcuts in the code in places, and have a little bit of messy hard to extend the code. This gives me plenty of work to do in the coming months. But I released, I have something that provides value to users even in its most basic state.

Technology used

The app is 100% developed using Xamarin.Forms. I have only released the app on the Android Play Store for right now because that is the only app market I have paid to be on. Android’s $25 lifetime developer access is much more affordable to me compared to iOS’s $100 a year. Technically, my app works on iOS but I cannot see myself paying $100 a year right now.

Along with Xamarin.Forms I am using Prism 7 framework and .Net Standard 2.0. I had not had much experience with these latest versions. The features they provide make development more streamlined.

The Dark Sky API is what I use to all weather data. It has a free tier with plenty of API calls for my current needs. I found it to provide the right balance between up to date information and free API calls available.

Plans for improvement

Plenty of things need improving but a list that will change over time is below:

  • Add more configurable settings: Wind, Rain type, Snowfall, etc..
  • Ability to not consider certain timeframes in the riding conditions such as nighttime
  • Allow for more than just zip code to determine the location
  • Write Unit Test and UI Tests
  • Abstract out services instead of doing lots of work in view models.
  • Incorporate more analytics events

 

Check out Motorcycle Riding Weather in the Play Store now! I look forward to posting my progress on the app as I release updates.

Make it work, Make it right, Make it fast

I support the software development strategy of make it work, make it right, make it fast. This is a quote from Kent Beck, common in the software industry. I interpret this quote as, let us make sure our most basic solution solves the problem at hand before investing any more time than necessary.

Make it work

Not all solutions to a problem are pretty. This may mean little to no tests, poor performance, janky code, etc. Sometimes we just need a solution to a problem that shows that the problem can be solved. We want to make sure the problem is solvable albeit with a less than desirable solution.

An example where I implement a ‘make it work’ solution in code, is often in the area of user input or user navigation in my applications. Instead of relying on the user, I will hard-code the exact data I want. I want to encourage the happy path solution and test my application under only the best case scenario. This will tell me if under the most ideal conditions whether or not my solution even works. If my code does not work for this, the solution will have no hope in the edge cases and no reason to continue on with the work. I would then focus my ‘make it work’ code on implementing a different solution until I get it right.

Pushing code to production in the ‘make it work’ phase is a scary thought and something we should all strive to avoid. If you have a continuous integration (CI machine running all your tests pushing this ‘Make it work’ code is an option (preferably in a separate branch). However, it is important to see how it holds up to a full suite of tests.

Make it right

If we can show the problem can be solved with a ‘make it work’ solution we can move onto steps to make it right. This includes tests, proper syntax, good naming conventions, extensibility, and the like.

We want to remove any hard-coded data, we want to start thinking about the edge cases, and we definitely need to have tests around the code. For testing make sure to comment out code or remove code to see a failing test. Never trust a test during this stage unless you see it failing first for the right reason.

Our code should be bulletproof at the end of the ‘make it right’ stage. We should not feel any hesitations about presenting this code to a user from the standpoint of introducing a bug. A ‘make it right’ solution should be production ready.

Make it fast

Now for the hard part, ‘make it fast’. This is an area of software development that we often do not get the time and resources to experiment with. We just released a solution to production that works from the ‘make it right’ stage. It adds value to the users but we have ideas of making it even better. Often, the next bug or feature takes priority.

But let us assume we have the time. Let us assume we have the resources. We should always be thinking of ways to refactor our code and continuously improve the solutions we have.

Make it fast sounds like a performance or timing centric idea. People think “how can I get this code to run faster”. But it is more than that. We should be thinking how can I make it more testable, how can I make it more extensible, how can I make this code more valuable to the user. Performance is important but these other areas are just as important as well.

Having time for the ‘make it fast’ stage is a privilege and we should always try to take advantage of it. Improving existing code is just as important as writing new code.

In the end, we want to provide software solutions to our users that provide the most value. The make it work, make it right, make it fast idea of software development can help us get there. It allows us to choose the happy path of problem-solving before even considering the often much more difficult edge cases. Make it work, make it right, make it fast provides a solid foundation for building great code.

Make it work, make it fast, make it right -Kent Beck

For more on happy path coding, check out my previous post Programming Better and Easier With The Happy Path.

What I am excited about after attending Visual Studio Live 2018

Visual Studio Live 2018 in Las Vegas just passed. With my organization’s support, I was able to attend and have a great time learning about all things .Net, Microsoft, and More!

I wanted to share my personal highlights from my trip and what has me most excited.

What has me excited:

Azure Bot ServiceAzure Bot Service

The first session I attended at Visual Studio Live was an all-day workshop called “Add Intelligence to Your Solutions with AI, Bots, and More”. This workshop led by Brian Randall had topic points around Azure’s bot services, various cognitive services, as well as their DevOps techniques.

I was already familiar with the Azure cognitive services but never heard of the bot service. This talk was eye-opening. It has gotten me even more enthusiastic about using bots and cognitive services together.

My favorite part of the talk was using bots. It showed how setting up a simple bot could be done in minutes. I have a bot I’m working on now and plan to add in text analysis for even more Azure power.

With the following tutorial Create a bot with bot service, you can have your very own chatbot set up in minutes. This simple tutorial opens many possibilities for automation of customer interactions, providing better support, and overall better online experiences.

I encourage you to make your own bot, a lot is possible even with the free payment tiers on Azure. And I will share my further exploration of bots and cognitive services.

Azure Machine Learning StudioAzure Machine Learning Studio

Machine learning has become a popular topic. It has been something that I have always wanted to learn more about. I was excited to attend this session and learned a lot from James McCaffrey.

This session was an introduction to using Azure Machine Learning Studio but nothing on the technicalities of machine learning. We used the platform to analyze Iris flower data. By using various measurements of the Iris flowers, we could predict the species variety.

Unfortunately, all the technical aspects were glossed over but the power of the engine was shown. With existing data, and knowledge of machine learning settings, one can start doing analysis in less than an hour.

I hope to, in the coming months get a better understanding of the machine learning details. Get to understand and use the true power of Azure Machine Learning Studio.

There was plenty of other great content provided at Visual Studio Live 2018 in Las Vegas. I am bringing back knowledge to my team and my students. Visual Studio Live is a conference I want to attend again.

If you liked this check out my post about exciting notes after attending Microsoft Build 2017 

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

I have been so busy with the teaching job that I have not had time to dedicate to this blog. Hopefully the teaching gets easier and cools down soon. It should now that the semester is just about done and there is not too much left in lesson plan prep.

But enough about me, here is What is going right: Mob Programming Benefits (Part 4). I will give a short explanation on the two benefits below highlighting the great parts of Mob Programming. Check out the other parts of the series for even more benefits of mob programming and expect more posts in the future.

  • Divide and Conquer
  • Accountability

Divide and Conquer

I am on a small three person mob working with a technology that none of us have had prior experience in outside of our current project. This means we run into situations that no one knows the answer to. How do we solve these complex problems? Well rather than squander around the code all together often we take a Divide and Conquer approach.

By divide and conquer, I mean that we will all split up and begin researching/attempting solutions/poking around the code all on our own. This may sound a lot more like traditional programming where everyone is by themselves working through problems and it kind of is.

The mob programming aspect comes into play whenever anyone finds a good example/article/forum post related to our issue. We share the findings and discuss them together immediately. Maybe the new knowledge helps connect the dots with what someone else was already reading or thinking about. Maybe the team decides that it does not relate, so we do not waste anymore time looking at it.

We take a divide and conquer approach but share all the knowledge along the way and get more research done while still keeping everyone informed.

Accountability

In software, it can be easy to take the easy path instead of the harder but infinitely better path. When writing software you may think “Oh this will not be my problem in the future” or “I don’t need to test this feature it will never break”.

In my mob we hold each other accountable and ensure that we are not skimping just to make things easier for ourselves. I will relate this to testing because its an easy target. We test EVERYTHING. No matter how small we make sure to right a test first. Sometimes one of use will get an inkling that maybe we can skip the test on this one. Or we just straight up forget to write the test.

Having the mob, we always have someone to reign us all back in and remind us of the software practices we need in order to maintain quality. As a mob we are all accountable for one another and we use this to ensure we are always writing the best software.

That concludes What is Going Right: Mob Programming Benefits (Part 3), check out the other posts in the series.

What is going right: Mob Programming (Part 3)

What is going right: Mob Programming (Part 2)

What is going right: Mob Programming (Part 1)