Ever since the incredibly awful fires/smoke that we encountered in Portland in September of 2020, I’ve been thinking a lot about the environment on a very local level. I fully admit that I was caught off-guard by my first climate related emergency, and I learned quite a bit about air quality terms like AQI. I also discovered some of the various monitoring networks with publicly available data, and sort of developed an itch to participate in some of them. One aspect in particular that surprised me was how awful the air quality inside my home became. I also realized that while the air quality networks could tell me what the outside AQI was, nobody could tell me what it was inside. So, I eventually purchased an Awair Element to put in my office to help me keep an eye on it. Of course, being a tinkerer, I couldn’t help notice that Awair provides an open API for connecting to and monitoring their devices. And so, what would eventually become AirAware was born!

So, after a couple weeks, I had what I felt was a pretty decent reusable framework for iOS to connect to and fetch data from Awair devices. But by then I had an itch. I felt like I had just scratched the surface of what could be done. So after a bit more Googling, I found a number of other devices and networks that allow connecting to their APIs, and I decided to pull them into AirAware as well. In the end, I decided to add support for an initial 5 devices/networks:

There are potentially other devices and networks that I would love to add support for in the future, but for an initial release, I felt like this was sufficient.

Now, I will stop here and say that I love making frameworks and libraries for other developers. I feel good when I make something and can put it out into the universe to potentially help other people. That being said, will anyone find this useful? Will it help anyone? I have no idea, but that’s ok! The point is that AirAware now exists and is available if anyone ever wants to add air monitoring functionality to their app, or if they just want to see a reference implementation for any of the supported devices/networks.

Technical Notes:

Tools for a Distributed Software Agency – 2021

Last year, I posted an overview of the tools that Silverpine uses, and I thought it might be interesting to revisit our toolset and compare with where we are versus where we were. Many of the tools continue to be the same, but there are a few changes. Read on for the details!

Communication Tools

Without a doubt, Slack is the single most valuable tool for us as a distributed company. One thing that has changed over the past year, however, is that almost all of our clients have now adopted Slack as well. This has been a great improvement as we can now utilize shared channels between workspaces which greatly reduces clutter and overhead. This has allowed us to stay mostly within the Silverpine Slack workspace which makes everything simpler and cleaner in terms of organization and tracking conversations both internal, and external. If you’re new to Slack, or have yet to try it out, I have a few posts here and here to help you get going.

Looking back to where we were last year, it’s clear that teleconferencing technology and tools have rapidly improved. This is one of the few silver linings of Covid. I’ve never held video conferencing software in very high regard, but I can definitely say that the tools have gone from incredibly awful to “ok”. And to that end, Zoom has definitely moved the quality/easy of use bar further and faster than the competitors. We will see if Zoom can keep the crown in the coming year as Teams and other platforms try to leapfrog it. For now, however, Zoom is the best, easiest to use tool for video conferencing for our business.

Last year, we standardized on Dropbox Pro for file sharing and quite honestly, it’s been so seamless to our workflows that I sometimes forget about it. I’m still surprised that Apple or Google haven’t acquired Dropbox yet, but I have no complaints. It just works.

We use Gmail for our email, and thereby get all of Google Workspace (formerly known as G Suite). I said before that I’m not even sure where I would look to replace the email side of the tools, and that still applies. This past year, however, we have also started using more of the other Workspace tools (Sheets, Docs, etc) but we definitely haven’t standardized. Most of the tools are convenient simply because they are ever-present, but if you need to create a document with a significant amount of formatting, you’ll want to look elsewhere.

Development Tools

We have looked at a few alternatives to Github (like BitBucket) but at this point, GitHub is pretty much the de facto standard for source control systems. I will admit that I was a little nervous when Microsoft acquired them, but quite frankly, their service has improved to the point that we now use them for both source control and for our automated build system through GitHub Actions. Their cost model is also very helpful to us now that it’s seat based rather than project based.

The choice of a git tool can be fairly controversial, and we will never mandate a particular app/tool, but we have found that, overall, Tower is a very good, stable, and constantly improving product. They have versions for both Mac and Windows, and their licensing model makes it easy for us to provide seats to any of our engineers that want to use it. I wouldn’t say that it’s a perfect piece of software, but it’s definitely better than using the command line. We’re not barbarians!

Of all the tools on this list, MantisHub is the one that I’m the least confident that we will still be using a year from now. MantisHub is a fairly inexpensive, hosted, bug tracking system that’s based on the open source Mantis platform. It has replaced Lighthouse which we previously used. We made the decision to replace Lighthouse because it has fallen into abandonware status, and lately hasn’t been able to provide the workflow that we need. I wouldn’t say that I love MantisHub, but it’s not as heavy as Jira and definitely less expensive. We are continually looking to improve our bug tracking system so if you have one that you like, I’d love to hear about it.

Design Tools

Sketch has owned the “non-Photoshop” tool space for years, and it remains the default/standard for our designers. Sketch is a familiar, comfortable, design tool that does what it needs to do. The licensing and cost model work amazingly well for an agency and while I wish that their administrative tools were easier to use when managing seats, it’s not something we have to do often. While we were still a Sketch shop this past year, it’s possible that the winds of change are blowing. We’ve been having internal conversations recently about switching to Figma which has quickly emerged as the cool, new kid on the block. I’ve used Figma a bit and its collaboration tools blow Sketch out of the water (at least at the time of this writing.)

I believe I overlooked our use of Zeplin in my previous tool list. That is a fairly significant oversight on my part! We’ve been using Zeplin for years now and I don’t see that changing any time soon. Zeplin is a very robust tool that engineers and designers can use to easily export image assets out of Sketch (or Figma) and import directly into project workspaces. Zeplin provides that “last mile” in the asset pipeline and supports exporting for web, iOS or Android, each of which have differing format requirements. We love Zeplin!

A critical part of our development process with clients is our prototyping phase. We work extensively with them to help them understand how the UI that we are designing will translate into UX. Particularly when working on mobile platforms, the interface really needs to “feel” right, and InVision is the prototyping tool that we utilize.

Operational/Finance Tools

Like nearly every other small business in the U.S. we use Quickbooks to manage our finances. I don’t have a lot of good things to say other than the fact that our CPA prefers us to use Quickbooks.

Silverpine’s web content is fairly static, and in general our web traffic is very low. I think it’s mostly visited by people who are curious about who we are in the hopes of potentially partnering with us on a project. To that end, we don’t really need much in terms of web hosting, so we use Squarespace. One of the best things I can say about Squarespace is that it is easy to get a decent looking web page up, quickly. They have a plethora of templates and basic customization is very easy. If you start wanting to get fancy, though, it gets incredibly clunky, quickly. It’s also slightly expensive in comparison to some of its competitors. That being said, we’ve been using it for years now without too many complaints.

One new addition/change to our set of tools is that this past year we dropped Blinksale and replaced it with Harvest for invoicing clients. A lot of people use Harvest for time tracking, but it also has a good set of invoicing tools and reports. Both Blinksale and Harvest are good tools and are fairly similar in terms of cost, but Blinksale seems to cater its tools more towards freelancers and less towards agencies. Harvest seems to do a better job of catering to both groups, and it’s made our invoicing processes much easier this past year.

People like to get paid. That seems to be a nearly universal truth, and for us, Gusto is how that happens. We’ve been using Gusto for quite a while now and they have done a fantastic job at continuing to roll out new features and products that really complement their core offering, which is payroll. We use Gusto for both employees and contractors, and I haven’t heard a single issue about it. Gusto does a really good job at tracking taxes and tax reporting for federal, state and most local requirements and many times they will pro-actively alert us about upcoming changes. On top of that, their customer service is very responsive so when we do have questions about things, they get back to us quickly with real answers. Gusto is fantastic.

Do You Need A Website?

TLDR; Yes you need a website, and we just redid ours! Check it out!

Many years ago when Ryan and I were bootstrapping Silverpine, we ran very lean. I’m talking bare-bones lean. Some would say that we ran on a shoestring budget, but quite honestly, I doubt we would have justified the purchase of a shoestring at that point.

During that period, we were starting to develop our client base and define who we were as a company, and we didn’t give much thought to our website. At that point, if I remember correctly, we hadn’t acquired the domain, and we only had The site was comprised of a single web page that said “SILVERPINE SOFTWARE” and it had a mailto link at the bottom (for anyone that was so impressed by our invisibility that they might want to contact us.) Our focus was on mobile development at that point, so we figured that it didn’t really matter if we had a web presence.

However, our clients noticed. I clearly remember receiving a phone call from our primary contact at Very-Large-Corp. We had just signed a contract with them to do some work and had jumped through the hoops to get Silverpine into Very-Large-Corp‘s invoicing system. He called me because he was very concerned that if our invoices showed up on reports it might prompt people to investigate us a bit. If they wanted to know more about us, they surely would go look at our website. If they looked at our website, they would question whether we were an actual company. This could potentially raise some red flags with people within Very-Large-Corp and cause him (and us) trouble. I remember his words very clearly: “I need you to put up a real website as soon as possible.

So, I spent that weekend creating a very bland website that was mostly populated with stock images. It wasn’t pretty. It wasn’t amazing. But it was a real website. We were somehow legitimate at that point.

However, time marches on and as it does, websites age and look crustier and more stale with every passing day. To that end, we decided that in 2020, we would give a facelift and in the process better showcase who we are and what we do. Conceptually, Silverpine embodies something that is clean, sleek and entirely complementary. The design of the website is intended to demonstrate this visually and show how a variety of strikingly different designs all work with Silverpine. The intention is that we enhance and improve existing brands and products and hopefully it’s now clear, visually, how we do that.

What we have today is amazing and I love it, but it’s also just the start. While we very often cannot talk publicly about many of the products we work on, we can add more content that continues to explain and expand on what we are and how we do it. The new website design provides a framework and a roadmap for adding and enhancing this. I’m extremely excited to grow the content so keep checking back from time to time, and if you haven’t already, go take a look!

Oh and if you wanted the answer to my question? Yes, you need a website.

Apple’s Native Apps Trojan Horse

Apple announced SwiftUI at WWDC 2019 and like a lot of people, I mostly ignored it because I knew that it would need some time to mature before it would be ready to use in production software. I also wasn’t sure if it would “stick” in terms of long term, viability. However, after another year of development, it’s clear that Apple has made a commitment to it. The newly announced Widgets and App Clips as well as enhancements to WatchOS definitely push developers hard towards SwiftUI.

SwiftUI appears to be Apple’s answer to the React programming movement, and given the similarity of SwiftUI to React, I expect a lot of the response will be positive. However, I believe this to be a bit of a Trojan Horse in relation to cross-platform development. As I mentioned earlier, apps that want to use some of the newer technologies, like Widgets, have no choice but to use SwiftUI. For an app that’s written natively in Swift, this will be easy. Apps written in cross-platform environments will have to work a lot harder.

Eventually, Widgets and App Clips will become expected functionality for many apps, and while most cross-platform solutions already support mixing native code with non-native code, the level of complexity of supporting these will essentially require developers to be fluent in multiple languages and multiple development environments. I’m very curious to see how these cross-platform development communities respond and adapt to this change because over time this will erode one of their key advantages.

Zoom Insecurity

I recently wrote a roundup on the current state of video conferencing software and one of my comments about Zoom was that it has a history of abusing privacy and not taking security seriously. It looks like my concerns were well founded this week.

  1. According to The Washington Post, your Zoom videos are visible by anyone on the Internet
  2. Security expert Bruce Schneier explains how Zoom not only captures and stores personal data about you, it “secretly displayed data from people’s LinkedIn profiles, which allowed some meeting participants to snoop on each other“. He also explains how Zoom’s encryption is paper thin which becomes even more important because of the next item
  3. Researchers at the University of Toronto documented how Zoom calls often get routed through servers in China.

Every single one of these items is cause for concern on its own, but taken together should really give pause to anyone using Zoom, especially when there are so many other good choices out there.


The Silverpine 2020 Bracket Challenge

The NCAA basketball tournaments (men’s and women’s) are something that I look forward to every year, and we always have a Silverpine bracket competition which is a lot of fun. Obviously, those didn’t happen this year which was very disappointing, but understandable given the situation.

Not to be deterred though, we went ahead and held our own competition this year during our weekly video call with the whole company! The way it worked was that I would say two items over the call and then everyone would write their pick on a piece of paper and hold it up to the camera. For example, I would call out “elephant and giraffe” and everyone would have to write down either elephant or giraffe. The pick with the most votes would move on to the next round until we were able to crown a 2020 champion.

The first round competitors were largely paired together like “Cake vs Pie.” However once we proceeded to the second round, people had to choose from several non-sequitur items like “Seattle vs Taylor Swift.” Some of the pairings had clear winners while others were decided by a single vote, and it was a nail biter down to the end. The Final Four consisted of Dog, Blue, Pie and the ultimate Cinderella pick – Aquarium. In the championship, though, Dog easily coasted past Pie for the win and became the Silverpine 2020 Bracket Champion.

The whole “competition” was a lot of fun and a nice little stress relief, but it also was a great way for the team to get to know each other better. (We found out that one of our employees is a huge pie fan, and that another prefers C++ over dogs!) I actually think we might make this an annual event as the feedback on it has been overwhelmingly positive. Below is the completed bracket. No comments on my terrible handwriting!



Video Conferencing Platforms

How many calls have you been on where the video glitches or freezes? Have you ever seen an attendee list that shows the same attendee multiple times? How many calls have you been on where people are “dropped” halfway through the meeting? How many meetings have you been a part of where at least one person spends the first 5 minutes asking “Can you hear me?” It seems like anyone who has used video conferencing has at least one horror story to share.

I’ve been working remotely for 10+ years and I’ve used more conference calling applications than I can count. After a decade of doing this, I would have thought that many of these problems would have been solved, but the sad truth is that there is still no perfect solution.

Over the past few years, three platforms have emerged as the primary platforms for video conference calls: Zoom, WebEx and Google Hangouts. Each platform has its own set of pros and cons, so it’s important to understand what each of them brings to the table. If none of these work for you, I’ve also included a list of alternatives to consider.

Caveat: One of my biggest complaints about all video conferencing software is that it is inconsistent from user to user. My analysis of these tools is based on numerous calls and years working with disparate groups of people across various geographies, but even with all of that, your experiences may differ from mine.


Pros: Zoom is currently enjoying a bit of front-runner status in the video conferencing wars. While Zoom does require you to install software on your computer/device, the installation is fairly painless, and it’s simple to get up and running. The experience also seems to be consistently solid across Macs, PCs, iOS and Android devices. I’ve never had any issues moving between platforms on Zoom. When larger groups are trying to connect, it is rare to have stutters and freezes and this is what really makes it shine in terms of a video conferencing product.

Cons: One of the biggest downsides to Zoom is their history of abusing customer privacy and security: example 1, example 2, example 3. While the company does seem to respond to each of these in pro-active, responsible ways, it does make you wonder why it keeps happening. Zoom also requires you to install software on your computer or device, so that is one thing to keep in mind.

Pricing: The free tier for Zoom is fairly standard as you can host an unlimited number of meetings with up to 100 people. The biggest limitation is that calls are limited to 40 minutes. If you need more than that, Zoom is actually the most expensive option with their Pro plan starting at $14.99/user/month.

Google Hangouts

Pros: Google Hangouts is the video conferencing portion of Google’s G Suite product line. (Technically, the name is Google Hangouts Meet but that’s a terrible name.)  In terms of ease of use, Hangouts can’t be beat: if you use Chrome as your browser, there’s literally nothing to install. Essentially, anyone with a Gmail account and an open browser can start a conference call which makes this incredibly accessible. It’s largely because of this lack of barrier that it has become so popular.

Cons: One major downside of Hangouts is that it often gets confused if you have more than one G-Mail/G Suite account. Many times I will try to launch a call that my work email address was invited to only to be told I can’t access the call because it decided to use my personal account. This can be incredibly infuriating because it usually requires logging out of all your Google accounts before it will work.

Hangouts technically works on browsers other than Chrome, but most people (including me) report having significant technical issues trying to use it with Safari. If I have a Hangouts call, I will copy the call URL and paste it into Chrome where it works flawlessly.

Finally, the biggest downside of Hangouts is that it does not seem very performant with larger groups. The video will frequently glitch and freeze if there are more than 3 attendees. Of all the platforms I have used in the past few years, Hangouts is definitely the worst performing when it comes to actual streaming.

Pricing: Google Hangouts is hands down the cheapest option. As mentioned previously, anyone with a Gmail account can use their free plan, and the paid plans start at just $6/user/month.


Pros: For many years, WebEx was the gold standard of conference calling and it made deep inroads into corporate America. Today, WebEx is approved by IT infrastructures everywhere which means it can generally be used regardless of network firewall rules. It also means that corporate customers often have the software pre-installed and configured by their IT administrators. If you need to have conference calls with corporate entities, WebEx will definitely be a familiar entity.

In general, WebEx performance is solid. It requires installation of a native application so its streaming quality is generally on par with Zoom’s quality and I’ve never had issues connecting large groups.

Cons: My biggest complaint about WebEx is that it frequently loses audio connections for wireless computer headsets. While this isn’t the end of the world, it seems like such an obvious, fixable problem that I can’t believe WebEx continues to let it be an issue. I don’t ever seem to have these issues with any of the other platforms so I don’t understand why WebEx can’t address it.

The other complaint I have about WebEx isn’t necessarily with the WebEx platform itself, but with how certain corporate IT groups have configured their installations. For example, we have one particular client that is a large Fortune 50 company and every single time I have a WebEx call using their account, I have to reinstall the software on my Mac. WebEx is the software that we use at Silverpine, and we never have any of these issues, so I know this is somehow related to their installation.

Pricing: In the past, WebEx was the most expensive of all the platforms which would have put it into the “cons” category, however competition from Zoom and others have forced WebEx to introduce better priced, low-end plans. They recently updated their Free tier to include up to 100 participants with no time restriction, and their Starter Plan is a fairly modest $13.50/user/month.


If Zoom, Hangouts or WebEx just don’t work for you, there are quite a few alternatives, and a few of them are even familiar names (Skype, GoToMeeting and FaceTime.) Definitely give them a try, but as mentioned earlier, each of them is going to come with its own set of pros and cons.


Given the state of video conferencing software, I am unfortunately unable to make a single recommendation. Hopefully, as more people start working remotely the increased competition will force video conferencing companies to continue to improve their platforms and someday I have just a single recommendation. That being said, of the 3 most popular platforms, I would recommend Google Hangouts based on price, I would recommend Zoom based on streaming quality, and I would recommend WebEx if you need to connect with larger corporate entities.



Remote Work Preparation

A friend of mine was talking with me earlier this week about his struggles and frustrations now that he is suddenly (and unexpectedly) in a remote work situation. He isn’t sure what tools to use. He isn’t sure how to structure his time. He isn’t sure how and when to communicate with his co-workers, and he has found that his home-office isn’t set up in a way that’s conducive to the kinds of work he needs to do. In short, he is unprepared for remote work.

I’ve been working remotely for over 10 years now and I often forget some of my own struggles with it. There have definitely been lessons learned along the way, and the one thing that I know for certain is that working remotely requires preparation. I think that some people think that you can just plop down at your kitchen table and declare yourself an expert at working from home, but that couldn’t be further from the truth. The reality is that the transition from a traditional office setting to a home office can be tricky.

Prepare Your Work Area

It might seem obvious that one of the major contributors to your success at working from home is having a good place to work, but it’s amazing how often people neglect setting up a proper work area. Not only should you create a dedicated space that is your “work zone” but you should make sure that it is conducive and constructive to you staying there for periods of time. For example, do you have ample supplies like pens, pencils, notebooks, stickies, etc close at hand? Do you have a comfortable chair? If you like listening to music while you work, do you have good headphones? Is the temperature set to a level that won’t put you to sleep but won’t freeze you out? Do you have proper equipment for video chats or conference calls?  In short, is your work area prepared for the kind of work that you do?

The Wirecutter has a great list of products that they have compiled for creating a full time space to work at home. I agree with most of their suggestions, and I highly recommend making sure that a nice, comfortable chair and/or standing desk are at the top of your list. (If you’re wanting a second opinion, Business Insider also has a reasonable list).

Prepare Your Tools

Similar to preparing your work area, it’s also important to make sure you have the right tools to work remotely. I’ve written in detail about what tools we use elsewhere, but there are some fundamental things that everyone needs like video conferencing and chat applications. However, once you’ve settled on your tools, particularly your teleconferencing tool, I cannot stress enough how important it is to do dry runs with them before using them in real meetings. Make sure that your audio and your video are set up properly. Do a test meeting with a co-worker or friend. You definitely don’t want to be the person who makes the group wait for 10 minutes while you try to get your connection working.

Prepare Your Routine

One of the major challenges of working from home is that when you work from home, you’re always at work. As anyone who has worked from home knows, it’s far too easy to let your working hours drift into your non-working hours. It’s incredibly tempting to let yourself take one more peek at your email or work on one last task for your project.

To prevent your work life taking over your home life, it’s helpful to develop a routine for yourself. This isn’t to say that your routine needs to be rigid because one of the most amazing aspects of remote work is the flexibility it provides. However, it is very important to establish a general flow and process to your day. This will help you set limits for how long you work during the day, and it can encourage you to stay healthy both physically and mentally. Having a routine can help ensure you’re getting exercise and that you’re taking breaks and that you’re making sure to eat lunch. (Skipping lunch is actually a common problem when working from home!) All of these things will make you more productive, but without a routine, it can be very easy to neglect them.

Preparation and Kaizen

Finally, my biggest piece of advice for working remotely is that even when you think you are prepared, you should always be on the lookout for how you can improve. In an office setting, there are many people from HR managers to facilities managers to direct line managers who observe employees and try to come up with ways that they can be more efficient. When you work remotely, none of these people will be around to offer suggestions to you. No one will tell you that your keyboard is too close to your monitor. No one will tell you that a nice plant next to your monitor will improve your mood. No one will tell you that you should take a break for lunch. It’s up to you to identify areas for improvement and to become more efficient. The Japanese term “kaizen” refers to continuous improvement, and it is a concept that remote workers really should embrace in relation to their work environment. As a remote worker you should always be looking for ways you can improve, whether it be in your schedule or in your tools or even something as simple as the kind of chair you are using.

If you are one of the many people who suddenly find themselves facing the prospect of working from home, please understand that while this offers many amazing advantages, it is absolutely not as simple as it sounds. To get the most out of the opportunity, make sure to take some time to think about your workplace, your tools, and your time.


We received notification today that our trademark on “Silverpine” was registered with the USPTO. We first filed for application back in August, so it’s been a long time coming. While it’s certainly not critical to our business operations, it’s nice to have protection around our brand. I’ll have to get used to writing Silverpine® from now on though.

Screen Shot 2020-03-20 at 1.29.56 PM.png


Finishing Software Is Hard

For the last couple years, my 15 year old son has been slowly building a gaming computer for himself, piece by piece. For his final computer component, I agreed to purchase it for him if he could accomplish one very specific task. Namely, I wanted him to recreate an iOS app that I had written years ago as I was learning iOS development. He has a natural inclination to programming and has dabbled with many different coding challenges so he figured that it wouldn’t be too difficult to do.

For the most part he was correct. He started working on it last summer and was able to quickly get a large chunk of the functionality working. He was fairly excited about it, but then I started explaining some of the other things he needed to do before submitting it:  an about screen, a splash screen, cleaning up the layout for the various phone screen sizes, etc. What happened next was predictable. His enthusiasm waned and he pretty much stopped working on it. He filled his time with other things and his almost-finished computer sat staring at him in his room.

On more than a few occasions he tried to negotiate a smaller task, but I kept explaining to him that the point of the exercise wasn’t to see if he could program (I knew he could.) But rather, could he finish something hard and complex. As any seasoned developer knows, finishing software is difficult and always takes longer than you expect. It’s also not a skill that people learn in school. It’s something that can only come with time and experience.

During this period of extreme social distancing, our kids haven’t had school and the transition was so sudden that teachers didn’t have time to create assignments or lesson plans for students while they are out. As a result, our kids find themselves on some bizarro extended spring break where they can’t see anyone. The boredom is real and families are trying to figure out what to do with themselves. The silver-lining for me is that I have a little more time to spend with my family and I finally convinced my son to sit down and finish his app.

The amazing thing is that as soon as he finished and submitted to the App Store, he found a sort of “second wind” where he wants to keep working on the app and add more features and functionality. To me, this is the magical reward of finishing software. When you finish something you feel such a sense of accomplishment and get a boost of energy and enthusiasm. It’s a feeling that I love and is difficult to explain to someone that hasn’t gone through a tough finishing exercise. I’m very happy that I was able to share this with my son.

Oh, and if you’re curious about the app he built, you can find it here: