Steven Abadie

Product Designer | Software Developer

I'm developing sustainable products at Ninebark.io and provide consulting services for growing businesses. I write here about my experiences building physical and software products.

Make Make Make

My plans for 2020 have drastically changed from where I was in February. Alongside consulting work and networking to build client work, I had been cruising along on a few projects. However, as we're all aware of the situation with COVID-19, my schedule of the first half of the year, and likely beyond, is now decimated.

Attending conferences and local networking events are out to grow client work and build a stronger network. So, I've spent the last week considering next steps on how to continue progress from home. A lot of people are in the same place, including some who may now be unemployed. I thought best to share how, as a new freelancer and small scale entrepreneur, I'm hoping to make it through this time.

Networking From Home

Through the year I already planned to build a stronger network online. Now, that needs to speed up quickly as I was relying heavily on local events and conferences to build new relationships and contacts. Luckily if there was a good time to switch over to heavily networking on the internet, now is the time.

In relation to events, a number of in-person events have quickly switched to online virtual events. The Open Hardware Summit switched an in-person event to a successful virtual event in the matter of days. You can read more on how the awesome team pulled it off in the article on OSHWA.org. It would be worth seeing if any events you planned to attend, or previously couldn't attend, are now being held virtually.

Comparative to higher frequency Meetup like groups, there is an existing network of public and private online groups already established. Often these groups have already been around for a while in existing communities and many are starting new online video group sessions. I’m focused on tech and business but you can likely find a few forums or chat channels relevant to your interests with a quick web search. A few I’ve joined in the last few months that have been great are:

  • Indiehackers, large community of bootstrappers starting businesses.
  • MegaMaker, bootstrapper focused forum and chat. Small but strong group as there is a one time cost to join that means strong buy-in from individuals.
  • OSHWA Discord chat, the server was set up for the Open Hardware summit but is being left in place and continues to have ongoing discussions.

Make More

One advantage of being home more often is more time to make/hack/create. There are a few projects in my list that I’m looking forward to spending more time on. Getting hardware materials may be tougher than usual but many things are still available for shipment to your house. If anything, focusing more on software and digital projects allows less blockers and is going to be free or very low financial cost.

As an added networking and marketing vector I’m also considering streaming or capturing video of projects I’m working on. This can be an added benefit to your making that will lead to new connections and relationships that will help in your personal and professional life during and after the crises. There are a few places to quickly get setup streaming, with Twitch and Youtube being the most popular. You can go crazy on video and audio equipment but the reality is you can start with your mobile phone and see how it goes.

Unproductive distraction has been heavy with constant daily changes and continuous onslaught of news. There were a few days of zero productivity so this past week I’ve put limits on mainstream social media use. However, times are tough, don’t stress not being able to be the most productive you. What has been useful is scheduling on my calendar at least a few hours a day to work on making. This isn’t going to be the same for everyone, but it has kept me from completely turning into a puddle on the sofa the last two weeks.

Learn and Pivot

Much of the making I’m planning also aligns with learning new skills. If you’re not sure what to do, there is a seemingly endless amount of learning opportunities freely available on the internet. Maybe now is a good time for a career change or to upgrade your skills during down time. A few tech centric exercises and guides I’ve been working on are:

  • 100days of Gatsby, an email guide on learning the ReactJS framework. It covers early web development skills to building a CMS.
  • Make an action RPG video game in Godot Engine, a new ongoing video guide that teaches you game development in the open source Godot Engine.
  • Learn CircuitPython, Python has been gaining significant adoption lately in the DIY electronics world with CircuitPython. You can find a list of CircuitPython compatible hardware on the CircuitPython website.
  • Learn Data Science at DataQuest, there are a number of free data science courses available online but DataQuest appears to have a great offering of courses for data science with Python including a strong offering of statistics courses. The annual subscription is currently half-off as of the publication of this post so jump now if you’re interested in data science

Health

I'm not a medical professional so it would be best to look elsewhere for in depth info. However, I’ve been most focussing on maintaining good sleeping habits. Getting 8+ hours of sleep can have a significant impact on your immune system and mental health during these times. If you want more detailed points on why adequate sleep is always important, and even more so right now, check out Why We Sleep by Matthew Walker.

Make It

In the coming weeks I hope to share more, here and on twitter @Stabadie, of what I’m making. If you have something you’re working on it would be great to hear about what you’re making.

Keep In Touch
Subscribe for a monthly email digest of new articles and other topics

By signing up you consent to periodic emails from me (Ninenbark LLC). I'm not going to spam you. You can unsubscribe at any time.

Project Management for your Small Business

For small businesses it can sometimes seem out of reach to implement project planning practices in your organization. It’s true some project management methodologies are monolithic and will not work well in small organizations. However, there are simple tools you can use to set defined expectations for your team and project outcomes.

The basis of project management is a system that provides clear expectations for everyone involved in a project. It should also provide a reliable method of communicating changes to those expectations. Any methodology beyond those base requirements of the system are used to reinforce those needs.

Project management methods can be scaled from a single page document to a complex software app that allows tracking of individual tasks, scheduling meetings, and tracking project timelines and project costs. As a small business you often need a simple process to organize projects.

A great tool you can use to get started is the MOCHA project framework. This framework is a single page document that defines who performs which role in the project. By defining roles it provides clear expectations of what will be required of everyone involved.

A great feature of the framework is that it's fairly easy to remember how it works. MOCHA is an acronym for the roles: Manager, Owner, Consultant, Helper, and Approver. Those roles are defined as:

Manager

This role assigns project responsibility to the Owner. Their role in the ongoing project is to provide feedback and insight on the project to the Owner. In other methodologies this role may be called the Sponsor.

Owner

The project Owner takes responsibility for the project outcome. They coordinate communications and expectations with other project stakeholders and track the project status. In other methodologies this role would be more commonly called the Product Manager.

In almost all cases, there should only be one project Owner who controls the outcome of the project. If you don’t already know the phrase, “Too Many Cooks”, check it out, it exists for a reason.

Consultant

This role provides additional feedback or help with the project but normally has no direct responsibility for the project. The Consultant could be another manager not directly involved with the project or an external consultant or advisor. There may be more than one consultant depending on the project.

Helper

The Helper role is often multiple people who work to complete the project tasks. They complete tasks or activities coordinated and communicated to them by the Owner.

Approver

The Approver is the final sign-off for the definition of the project requirements and completion or success of the project. The Approver could be the Manager, a higher level executive, or an external customer.

Summary

The MOCHA framework is a great starting point to introduce project management methodologies to your growing small business. It helps start a practice of defining clear expectations for your team (stakeholders) that you can build on.

If you would like to try using MOCHA for your next project, I’ve made a simple one page template you can copy: Google Doc | .odt | .docx

Where to next?

After you’ve established stakeholder practices you should look at implementing a process of defining and tracking project tasks. How you track tasks is complex and largely dependent on the project and your organization.

I’ll cover in more detail in a later article. For now, to start simple, work from a physical board or wall and define each currently understood task with a post-it note. When a task is done, remove it from the board. If a previously undiscovered task requirement comes up, add it to the board. If you want to get fancy, split up the tasks on the board in stages that make sense for the project.

Comments, questions, suggestions, or would like to talk about a project you need help with? Feel free to dm me on Twitter or fill out the contact form on my consulting website.

Attributions:

It’s not completely clear to me who developed the MOCHA framework as I’ve learned it from a number of sources. If anyone knows for certain, I’m happy to add a link here.

Using Fathom Analytics with Gatsbyjs and Next.js

During the recent redesign of this web site I wanted to control more of who I was giving user data to. The most obvious was analytics. Every user action on my previous website design was being sent to the big G.

About this same time I was reading Company of One. It's a book, by Paul Jarvis, about starting small businesses and staying small. Part of the way through the book I wanted to know a bit more and realized he was running Fathom. Planets align... it turns out Fathom is a simple analytics platform focused on privacy. It doesn't track your personal data and has a nice single-page interface.

A few days later I had paid for a year of Fathom service and needed to integrate it into two websites I was working on. The first was this website, which uses Gatsbyjs. The setup is ridiculously simple.

Create Your Site In Fathom

Before we start with Gatbsy, if you haven't already created the site in Fathom you'll need to log in to your account and go to Sites settings.

Fill in the site name with your site domain and click the Get site code button. You'll then see a hovering menu that includes your new site id. If you previously created your site in Fathom, the site and the site id will be in the Sites list just above the Add a new site form. You can also click the site id to see more details. The details include and embed script and a button to verify the site code is working, once you have it in place.

Gatsbyjs Setup

As with many things Gatsbyjs there is already a plugin, gatsby-plugin-fathom. In your Gatsby project folder run, for npm or yarn:

# For npm users
npm install --save gatsby-plugin-fathom
# For yarn users
yarn add gatsby-plugin-fathom

Now in your gatsby-config.js file you just need to add the plugin config in the plugins array:

module.exports = {
  plugins: [
    {
      resolve: 'gatsby-plugin-fathom',
      options: {
        siteId: 'YOUR-SITE-ID'
      }
    }
  ]
}

Note the siteId variable you need to fill in. Replace YOUR-SITE-ID with your fancy new Fathom site id, save and commit your changes, and push it to production. That's it. In a few minutes you should be able to verify the site code on Fathom and start seeing analytics.

Next.js Setup

With my Gatsby website tracking in Fathom I now needed to get my consulting website set up. I decided to use Next.js for Ninebark.dev to compare it to Gatsby and expand my Reactjs knowledge.

Immediately it was clear there was not a quick plugin for Next.js. This allowed for some quality learning time.

After trying a few paths I landed on just using dangerouslySetInnerHTML to render the script in the footer. I'm using Next.js to generate a static site so this isn't an issue. However, if you're using Next.js server you may need to take additional steps to protect against XSS. Dev.to has a nice guide on using dangerouslySetInnerHTML safely.

In Next.js we need to place the Fathom tracking script ourselves. The script should go wherever you are defining the footer of your site. In my case it is inside the last div in my Footer component. Make sure to replace YOUR-SITE-ID with the site id from your Fathom site as explained above.

<script dangerouslySetInnerHTML={{
  __html: `
  (function(f, a, t, h, o, m){
  a[h]=a[h]||function(){
  (a[h].q=a[h].q||[]).push(arguments)
  };
  o=f.createElement('script'),
  m=f.getElementsByTagName('script')[0];
  o.async=1; o.src=t; o.id='fathom-script';
  m.parentNode.insertBefore(o,m)
  })(document, window, '//cdn.usefathom.com/tracker.js', 'fathom');
  fathom('set', 'siteId', 'YOUR-SITE-ID');
  fathom('trackPageview');
`}} />

If you look in your Fathom site settings and click on the site ID you will see this same script with your site ID already in place, minus the dangerouslySetInnerHTML portion. You can now save your changes and push them to production. Once your production build is live go back to your Fathom account and verify the site code it working.

If you're interested in privacy focused web analytics, give Fathom a shot and use my Fathom sign up affiliate link to get $10 off your first invoice. By using my affiliate link it supports this website and future content by giving a lifetime 25% referral commission.

Comments, questions, suggestions, or would like to talk about a web development project you need help with? Feel free to dm me on Twitter or fill out the contact form on my consulting website.

Stuck on a decision? Use a decision matrix!

It's 2020 and the last year brought multiple changes for me including the end of a large chapter in my life working on LulzBot 3D. I've been figuring out what I'm doing next and have already started a consulting business, Ninebark. The next step for me is to start a product business, which is where this article comes in.

When you have numerous competing priorities or directions it is often difficult to focus on where to start. This can occur when you have multiple viable options that are not immediately clear which would provide the best outcome. An exercise I've often used to push through to a decision and create progress is a decision matrix.

The basis of a decision matrix is a list of choices or competing priorities that are scored by factors relevant to the decision or topic. As you'll see further below, a decision matrix can be as simple or complex as you would like. The basic outcome you need is a final score ranking of your choices to provide guidance on your decision.

As with most decision making tools, they are not necessarily used to give you a sure guaranteed answer. Often the process of completing the exercise provides clarity of your options, making it easier for you to make a decision. This is how a decision matrix is best used.

To start on your decision matrix you need to first have a list of choices. Be sure to include all relevant choices, including a possibility of doing nothing. It is very likely doing nothing will have a low score but it would be better to confirm that.

As an example, I'll use the very serious/not serious decision of which should I eat for breakfast. I have a number of possibilities to choose from:

  • Eggs and bacon
  • Cereal with a cartoon character on the box
  • Granola bar
  • Smoothie
  • Skip breakfast

All of these choices are realistic possible options that I could consider. Because I'm trying to figure out what I'm eating for breakfast I'm likely still half asleep. So, I need factors to score my options by. A few factors I can think of while I stumble into the kitchen:

  • Prep time
  • Nutrition
  • Cost
  • Craving

Now that I have my list of choices and factors it is time to score them. This decision matrix is fairly simple so it could be done by hand on paper. However, I like working from a spreadsheet to make the calculations quicker. In the spreadsheet I put in all of the choices and factors and create a Total column to sum the scores of each option.

At the end of the article I'll link to a spreadsheet template you can download and work from.

With the matrix created I can now start scoring my options. There are a number of different ways you can score but you need a minimum number and maximum number and the direction of your scoring. For example, I'm going to use a 1 to 5 scale with 5 being the most positive view of that choice and 1 being the worst. In my total scores the choice with the highest score will be the item that is likely the choice I want to take.

Be aware this can be confusing with some factors that are an inverse factor. For example, my Prep time factor is inverse in that I want shorter prep time. Because the shorter prep time is a positive point for me I would give a higher score the shorter the prep time is. For my four factors I will be scoring as:

  • Prep time - less time is a higher score
  • Nutrition - more nutritious is a higher score
  • Cost - less cost is a higher score
  • Craving - more craving is a higher score

With clarity in my scoring I can now put a 1-5 score for each choice/factor. Once all my scores are completed we can see my total summed for each choice option. In this outcome, making a smoothie is the highest scoring option largely due to the high scores in nutrition and craving.

This simple decision matrix can be left as is and I can get started making my smoothie. However, often one factor has a stronger effect or weight on your decision than others. For example, if I'm running late that morning the prep time factor would have a greater effect on my decision than the craving or nutrition factors.

An easy way to add weight to your factors is to also score your factors in a 1 to 5 scale. You then multiply your choice score by the factor weight score and sum the scores as before. Here is a an example of the weight calculations.

In a spreadsheet I wouldn't normally put the calculation in the score field. Instead I would calculate the weight inside the sum function. For example, in the spreadsheet graphic below I calculate the total score of Eggs and bacon (F5) with:

=SUM(B5*$B$2,C5*$C$2,D5*$D$2,E5*$E$2)

With the new weighted calculations it is more clear that I should just grab a quick granola bar to get my day started faster.

The example of deciding breakfast is a good way to convey the structure of a decision matrix as most people can relate to getting stuck on deciding a meal. However, a decision matrix is probably not worth your time in deciding breakfast every morning. A decision matrix is often best used in cases where your choices are many, complex, or seem very similar in your current understanding.

A few examples of decisions that may be good for a decision matrix:

  • Hosting provider for your new web app
  • Car model to replace an aging car
  • Bid proposal winner for a project you are managing
  • New office location for your business
  • Product market to enter with a new product

The last one is where I am. My current matrix has about a dozen factors and almost as many choices. Shortly I should have a decision on a few products for this year and will talk about them soon.

If you would like to work from a pre-made spreadsheet template similar to what I've shown above, I've made a template you can start from. Download for either LibreOffice (.ods) or Excel (.xlsx).

Have any questions or would like to talk about a business or product decision you're working on? Feel free to dm me on Twitter or fill out the contact form on my consulting website.

Gray High-Rise Building Photo by Henry & Co. on Unsplash

Deploy Your Gatsbyjs Static Site to Netlify

GatbsyJS is a React framework for generating high performance static websites and apps. It has a wide set of available methods to access content and data that make for quick production of Progressive Web App compliant apps. Gatsby also has a super easy production and continuous integration setup with Serverless hosting.

There are a few places to host GatsbyJS apps including AWS, Github Pages, and now Gatsby Cloud. The host I've found the easiest and that offers a number of other useful tools is Netlify. With Netlify you can get a GatsbyJS app up and running in just a few minutes. Seriously, it will take longer to get your DNS transfered over.

Additionaly, for small sites like this one with just one admin and infrequent changes, you can host on Netlify for free. Hopefully whatever you're working on gains traction and you can happily pay Netlify once your usage goes over the free tier caps. Otherwise, it's a great free option for trying out new things.

This guide assumes you know a few things including using a command line terminal, Git, and some understanding of a Git hosting platform. If not, there are an endless amount of free courses on all of the topics. A few good starting places are FreeCodeCamp and The Odin Project. At minimum, go through all of the items on try.github.io

If you haven't already gone through any of the GatsbyJS tutorials I would suggest going through the main tutorial first. For the purpose of this guide we're going to speed up and use the gatsby-starter-blog-theme. This starter sets you up with a working GatsbyJS blog with blog posts generated from Markdown files.

To get started you need to have a few things already installed including Git, Node.js, and the Gatsby CLI. If you've gone through the GatsbyJS tutorial you've already done this. If you didn't go through the tutorial, follow the instructions on the development environment setup and stop before the Create a Gatsby Site section. You can confirm you have the Gatsby CLI installed by running gatsby --version and getting a version response.

gatsby --version
Gatsby CLI version: 2.7.8

If you get an error, go through the development setup again to make sure a step wasn't missed. Once you've confirmed Gatsby CLI is installed you can create the starter app with:

gatsby new my-blog https://github.com/gatsbyjs/gatsby-starter-blog-theme

This may take a minute or five to install all of the node dependencies. Once it is done you will have a new project in the my-blog directory. You can quickly get the local app running by changing into the my-blog directory and starting the development server.

cd my-blog
gatsby develop

Once you see, You can now view gatsby-starter-blog-theme in the browser, go to http://localhost:8000 to see the running local development site. You should see the default starter content. The theme has a nice toggle for switching from light to dark mode!

Now that you have a working local development environment you can get the same blog state hosted on Netlify fairly quick. First you need to host your project Git repo on a Git host. Netlify integrates with Github, Gitlab, and Bitbucket; for this guide we'll use Github.

The gatsby-starter-blog-theme initializes a Git repository when it creates the app. You can confirm this by running git log in the my-blog folder. Since you already have your local repo you only need to create a Github repo, add the Github remote to your local repo, and push your local repo to the new Github remote (see try.github.io if don't remember how to do this).

If you do not already have a Netlify account, now is the time to create one. Once you're logged in, on the Sites page, click the New site from Git button.

You will then be given a choice of the GIt hosting platform you are using. Again, we're using Github for this guide but the other two choices will be similar. Once we choose Github you will see a popup to log into your Github account and authorize Netlify access to your Github account. This is required to allow Netlify to track your repo(s) for new changes.

The next screen will allow you to select if you want to give Netlify access to all of your Github account repos or specify which repos to give it access to. I would suggest only allowing the repo created for this project. You can always add others later.

Last setup screen, almost there! After confirming the last Github access page you will be returned back to Netlify. All of the fields will be auto-populated with everything you need to deploy the site. One quick thing to note is that you can select the branch to automatically deploy any new commits from. This allows easily setting up one site configured as production from your master branch; you could then create an additional testing site that builds from a testing branch.

Once you've clicked Deploy Site you will be brought to the Site dashboard overview page. This is where you will manage this specific site going forward. Just below the generated site name you can see the Netlify hosted URL where the deployed site will be live. You can also setup your custom domain on the domain management page in the site settings.

You will see in the bottom left in Production Deploys that the site deploy is currently in process. If you click the top queued deploy you can see more details of the status and a deploy log. Remember how to get to the log as it will come in handy if a deploy ever fails.

Once the deploy is completed you can now refresh the Netlify hosted URL or your custom domain. You should see the same thing that you seen earlier in your local dev environment. And done, your site is live!

So what next? If you want to deploy any changes to the production site you simply make a change in your local repo, test it in the local environment, make a commit, and push to your remote repo. Netlify will immediately detect the new changes and start a new deploy. By the time you've opened the Netlify page the deploy will already have started.

Netlify has a number of other features including Forms, Split Testing, and Analytics that are worth checking out. I'll be covering how to set up Forms in another article.

If you have any comments or questions feel free to @stabadie or dm on Twitter

Community Engagement with Code for Fort Collins

During the Summer of 2018 I went in search of community. Having lived in Colorado for almost seven years, focused on family and work, I had spent almost no time in the community.

The Northern Colorado community has a lot to offer so I narrowed my search to tech groups, hoping to find a group where I could learn, network, and provide help where needed. After an exhausting 6 weeks attending 2 to 3 different meetups a week I met a ton of great people and had a much better understanding of the NOCO tech community.

One of the stand-out meetings I attended was with the volunteer organization, Code for Fort Collins. The group is a brigade of the larger national organization Code for America that focuses on improving government services through technology. A few high profile projects generated by Code for America programs include Clear My Record, a system to automate clearing eligible convictions, and GetCalFresh, a program that simplifies the application for government assistance for California residents.

Among a number of programs managed by Code for America, the Brigade Network consists of 73 Brigades working with their local governments to better local services. Code for Fort Collins is an active brigade under the Code for America 501c non-profit organization.

Code for Fort Collins has completed a number of projects including: Solar Scorecard, an app to highlight the status of the city of Fort Collins goal for renewable resources, the Homeward 2020 Data Dashboard, a data visualization tool for the Homeward 2020 organization, and a new website for the Fort Collins Bike Co-op.

9 months in, I've greatly enjoyed being a part of Code for Fort Collins. The premise of working directly with local government and community organizations aligns with my desire for local engagement in a way I hadn't realized when I began searching.

We have ongoing projects with the Poudre Fire Authority, the local Volunteers of America chapter, and ongoing discussions with local organizations to determine other community programs we can assist with.

This week marks the Code for Fort Collins inaugural fundraising drive. We are raising funds to provide food at new member meetings, cover meeting venue expenses, and to provide cloud hosting services for projects. These funds will help grow Code for Fort Collins and allow further engagement with the Northern Colorado community.

You can support Code for Fort Collins by making a tax deductible donation to Code for America, directed to Code for Fort Collins. Any amount will help and is greatly appreciated! You can read more about our fundraising drive and Code for Fort Collins on the codeforfoco.org blog.