Remote Work? It’s Not All Good.

During the last few months, we’ve seen a huge shift by companies to encourage remote work. Indeed, for many organizations, this is they only option they have if they wish to stay in business. Many workers are very pleased with this, and some have even blasted companies who say they’ll end their remote plans when the coronavirus passes. However, as a business owner, I have a variety of issues with remote work.

Lack of Accountability

One of the biggest difficulties with remote work is the lack of accountability. Online, you’ll see all the people who support remote work argue that if you don’t trust someone, why are they working for you? But how can I possibly ever grow to trust someone I don’t have any interaction with? If the person works a remote-only job, and was hired remotely, I have no way to ever know the individual’s work ethic, whether he consistently shows up on time, or whether he plays games at the office all day. I’ve seen many people play Facebook games in their cubicles, I can only imagine what they would do if they were at home!

Difficulty in Mentoring

I currently have several interns (or, as I hear they’re called now, externs) working for me remotely. They need to complete an internship to finish the degree, and I offered to let them work for me. Unfortunately, I can’t watch what they do or easily mentor them. I don’t know when they’re stuck, and I have no way to really tell if they’re having difficulties or if they’re simply unproductive. I feel sorry for anyone working as an extern now, as I do not believe it’s possible to provide the same level of mentorship that’s possible when a team member is onsite.

Inability to Develop Social Connections

While many people may prefer to ignore it, social connections in the workplace are important. Developing relationships with a diverse pool of team members provides an employee the ability to learn from other team members, to share in the success and hardships of a project, and to engage in team-building that grows ever important as someone desires to climb the corporate ladder. Individuals who never work at the office will have a very difficult time developing the skills necessary to become the leaders of tomorrow.

Decreased Visibility

When it comes time to promote someone, do you chose the worker you’ve never met, or the individual who you see showing up early and staying late every day? The remote worker may put in just as many hours, but it will never been seen by management. Likewise, when it comes time to downsize, are you going to fire your friend or the worker three states away?

Minimized Importance of Client Interaction

Developing custom software for clients, I place a great deal of importance on relationships with my customers. I like to visit them whenever possible, see how things are going, and even socialize a bit. I view my customers as more than a source of revenue, but as the people who enable me to have a business. As such, I place a great deal of value on relationship building. With remote workers, the option for real meaningful client interaction is gone.

Why Not Outsource Everything?

If you disagree with all of the above, and you really think that remote-only is the future, then why not outsource everything to India, the Ukraine, or Latin America? If there truly is no value to being onsite, then there’s no value to me paying an American developer when I can outsource the work at a substantially reduced rate. By arguing that all jobs should be remote, you’re actually arguing that you’re way too expensive for the benefit you provide.

Conclusion

While I think remote work can be a great thing, I reject the notion that it is superior to working onsite. I look forward to returning to a normal business world where I can interact with my customers, meet for a burger with a new lead, and mentor my team in person. The remote-only world of today isn’t all it’s cracked up to be!

The NVIDIA Jetson Nano

During the last few weeks, I’ve had the opportunity to play around with the NVIDIA Jetson Nano. As an artificial intelligence enthusiast, I was very eager to see what the Jetson Nano could do, and I was not disappointed.

The Jetson Nano is a small AI computer, about the size of a Raspberry Pi. Just like the Pi, the Nano runs Linux and contains a 40-pin header for interfacing with other components. With 4 USB ports, ethernet, and HDMI, it’s a self-contained computer. What separates the Nano from the Pi, however, is the NVIDIA GPU. With 128 cores, the GPU is capable of performing floating point operations substantially faster than a typical machine. It’s those very floating point calculations that are the bulk of AI processing applications.

Taking the Nano for a spin, I downloaded their OS image and installed on an SD card. Visiting NVIDIA’s website, I found that they offered a free online course to learn the basics. Through their course, I was able to create simple AI to perform real-time image classification. Unlike a typical Haar filter generation, the Nano was able to create a classifier in minutes. And, even more exciting, the PyTorch framework they demonstrate contains pre-trained networks that allow for far fewer images than a typical Haar filter requires. Additional NVIDIA courses include video processing using C++, medical image processing, and countless other AI tasks.

What makes the Nano so exciting is just how fast it works. Having developed AI models in the past, I’m accustomed to lots of waiting. However, the Jetson Nano functions like a mini AI supercomputer. For beginners, this means you can easily generate your neural network model quickly and perform validation tests with substantially less effort than traditional computer architectures.

I highly recommend the Jetson Nano for anyone wanting to learn more about artificial intelligence or wishing to experiment with potential consumer or industrial applications with computer vision.

Business Continuity

The Road Ahead

During the last several months, we have seen unprecedented damage to businesses. Every single day, we see more reports of closures and bankruptcies. Yet, among all the carnage, we see some businesses that managed to thrive. What was it that allowed these businesses to perform so well during this time? Business Continuity Planning.

Of course, some businesses – like grocers and stores with other necessities – were less impacted by the virus. And others, such as hair stylists and nail salons, are utterly unable to perform their job without close contact. But in between those two lie a large number of businesses. In those businesses, the winners were those with business continuity plans that included technology.

As businesses closed down in Pennsylvania, one of the first stores inundated with business was BestBuy. Within short order, all of their computers and laptops were gone. Why? Because businesses were equipping their employees to work from home. Businesses with the ability to setup an online store quickly found they had to. But the biggest winners were those who already had the technology in place. Those businesses were already able to function remotely and their staff had done so before with work from home policies or as a necessary part of their business travel.

Recommendations

How can you be better prepared next time? Here are some technology recommendations for businesses to ensure they’re in a better position next time.

First, find a technology for remote communications. Zoom has been heavily mentioned during the past few months, but dozens of other options exist. As a software company, I like Slack. Others like Google Hangouts. Whatever your choice, make sure your staff is familiar with it.

Second, setup your office for remote access. This can be as simple as a service such as GoToMyPC.com or as detailed as a VPN setup. Whatever it is, make sure all your staff is able to access all necessary systems from outside the office.

Third, invest in cloud technologies. Whether they are off-the-shelf or custom solutions, get as much as you can outside your network so that those systems are easily accessible by your remote workforce.

Fourth, examine relative mobile technologies. Many cloud solutions have mobile apps, and many other work functions can be performed on tablets or phones. This will allow greater availability of your team regardless of where they are – at home or on the road.

Conclusion

Hopefully, this is a black swan event that does not occur again within our lifetime. But even if it doesn’t, you may be impacted by natural disaster, fire, or other extraordinary events that have the same impact – difficulty performing business function. Put the tools into place today so you are better able to handle the next disaster.

If your business needs help with custom cloud or mobile solutions, please reach out to us. We can create solutions for small business or large enterprise. Then, you can sleep easy knowing your business will continue regardless of what goes on around you!

Local Hack Day 2019

Learning

In December, I once again spoke at the South Hills School of Business and Technology for their Local Hack Day. I shared some of the lessons I learned throughout the year, and would like to share them here on my blog as well.

Team Members

Throughout the year, I encounter people who would like some development work on the side. They may be experienced developers looking for additional work, recently graduated noobs, or people just trying to find a place to start on their software engineering journey. As a small business, I don’t have the bandwidth to take them all on. But when I see potential, I try to see if I can plug them in. This year, I learned three valuable lessons about staff. First, inspect what you expect. Just because someone says they possess a particular skill does not mean they actually do. Finding this out late in the game can be very costly. Second, I would encourage noobs to check their attitude at the door. If you’re just starting out, don’t assume you know more than me. You don’t. Third, friends don’t always make great team members. They may be great to hang out with, but mixing personal and professional relationships can be dangerous.

Customer Relations

As a software engineer, learning to deal with customers is a new challenge for me. This year, I learned the value of contracts. While I have always preferred to do business with a handshake, I’ve learned that customers may not always think the same. Without a contract, you have no recourse when your customer relationship goes south. On the flip side, when you do have a signed contract, treat your customer like the girlfriend (or boyfriend) that you’ve always wanted. Show them how much they matter as a customer. Otherwise, they’ll find a service provider who will!

Productivity

I started this year doing a lot of work that yielded no value. As a business, I must focus on those things that generate revenue for my organization. Some of that work is obvious – such as billable customer hours. Others tasks are essential, but don’t generate revenue directly – such as advertising efforts. Still other tasks are utterly useless – stop doing them. For things that are essential but don’t generate revenue, find ways to automate them or to lesson the workload. I use Hootsuite for my social media, for example, because it optimizes my social media workflow.

Valuable Tools

As a developer, it’s important to have the right tools available to not only be in a position to exploit future opportunities but also to be able to meet current business demands. I have been telling people for the last year to learn OpenCV and Artificial Intelligence. The future will undoubtedly involve computer systems doing work previously only done by humans. In the meantime, learning how to create PDFs is a far more practical business need for everyone. I’ve also found LaTeX to be a very useful tool for creating business documents. Not only can I easily check the documents into source control, but I have 100% control over the layout without my software injecting the style it thinks I want.

Education

In the tech world, you can never be left behind. You need to always be learning new tools, frameworks, and languages. Go to sites like Udemy or Coursera and further your tech skills. Seek out valuable certifications and read books. Louis Pasteur famously said “luck favors the prepared”. In the tech world, that’s typically the programmer with the broader skillset.

Conclusion

Each year of our lives, we should strive to be more than we were last year. The starting point for that is to reflect on the last year and learn from your successes and your mistakes and then to apply those lessons to the coming year. Look back on your last year and take note. This year can be the best year ever if you put in the effort to ensure you’re on the right path.

Apple vs Android

Cell Phones

I’ve been an Android user for the last decade. This was driven by two main factors. First, Android devices come in a variety of sizes, colors, and configurations. Second, I find the Android developer environment to be far superior to iOS development. I’ve previously shared posts about iOS development horrors as well as the difficulty of automating iOS builds. So, when it comes time to buy a new phone, I don’t hesitate to purchase an Android device. Whether it’s Google or Samsung, or if I’m looking for a cheaper ZTE device, I love Android phones.

Recently, I was asked by a client to download any iPhone-only application needed for our project. Since I already have an account with Google Fi, I decided to purchase an iPhone and use my Google Fi sim card . I decided I would carry both phones around for a few weeks and see how the iPhone compared.

The most striking thing I found about the iPhone was how well it integrates into Apple’s product line. As a MacBook Pro user, I make frequent use of the Notes application. These notes automatically appeared on my phone. I have countless WiFi access points on my laptop, and they too were immediately available. Calendar, reminders, Safari passwords, iCloud data, everything I checked was immediately there for my use. My Android phone can access Google Drive as well as contacts, but the integration is nothing like Apple. Of course, Google isn’t working with either Microsoft or Apple to integrate their tools into the OS, so this isn’t surprising.

Now, as I’ve found the iPhone integration so valuable for my business, I see myself continuing to use both. While I have never been a huge iOS fan, their integration with their OS is truly amazing. Who knows – maybe I’ll eventually use an iPhone as my primary phone!

Microsoft Account Mayhem

Mayhem

Recently, I purchased a laptop for a non-profit organization. The user was not a super tech-savvy individual, so I decided to get everything setup as much as possible for her. Since the laptop was running Windows 10 in S mode, I would need to first upgrade to the standard Windows 10 version. During the initial laptop startup, I avoided using a Microsoft account. However when started the upgrade process, the first thing Windows did was ask me to sign into my Microsoft account. No problem, I enter my credentials and wait for the upgrade to complete. As I continue, however, I notice that Microsoft added my OneDrive account and had started downloading my data. Then, I see that Microsoft Office is registered to me. Obviously, I didn’t want any of this. So, now I go through everything piece by piece and remove my account information.

A few days later, I’m at a client site setting up Office. I enter the credentials for the user, and am provided with an error that another Microsoft user is already signed into the machine. Search as I may, I could not find out what Microsoft was complaining about. Fortunately, after a reboot I managed to get it working again.

I really like how Microsoft has integrated their services into Windows. OneDrive is an amazing tool to easily share between machines, and using a single sign-on to enable all the Microsoft services can be convenient. Or, it can be a nightmare. Microsoft, how about you stop forcing someone to login to get a Windows update. Or, better yet, ask if we want to use that same sign for other services. While you’re at it, change Office registration to be more friendly for business users. I think we’d all rather have a product key than to worry about registering Microsoft accounts for every member of our team.

The Simplest Solution

Simple

When we encounter complex problems, do we seek the simples solution, or the most complicated and costly solution?

Recently, I had to upgrade a client machine. The old machine was running Windows 7, and I suggested that the client upgrade to a newer machine running Windows 10. Fortunately, the client’s requirements were rather simple – they needed Microsoft Office and the program they use for creating a lot of their printable resources – Print Shop. Their data was all stored on OneDrive, so this would be a simple upgrade. Or would it?

Unfortunately, the version of Print Shop the client was running was from 2006. We looked at newer versions, but it appeared that there was a substantial risk that their existing documents would not transfer to the new version without substantial rework. While the client was willing to accept this risk if necessary, their preferred route was to get it working on the new machine.

I started the installation, and patiently waited for it to complete. At the end, a screen asked me to wait while the installation concluded. I waited and waited, but the screen did not go away. I was able to run the installed application, but the installation would not terminate. I hit the cancel button, hoping the dialog would disappear and we could go on using the application. Unfortunately, hitting cancel caused the application to uninstall.

I thought that maybe there was a glitch or that I needed to wait longer. I installed the application again, and the same dialog appeared. It hung just as before. So, the first step was to wait… for three days. Unfortunately, the dialog still didn’t go away. I thought of just rebooting, but was worried that would, ultimately, cause the application to uninstall again. I could copy the files and the registry, but that could have caused more problems than it solved.

What would I do? I took the simple answer – I unplugged the machine. Since I didn’t cancel, and didn’t shut down, Windows didn’t try to uninstall the application. And, upon reboot, the software was still there!

While I don’t like unplugging machines, in this instance – it was the simple solution that worked. Sometimes, we need to put aside the technically correct answer and just go with what works. In the end, the client doesn’t care – they just want their problem to go away!

Coding Style

Writing

One of the most important skills for any team of engineers is to develop a consistent coding style. Without it, development and debugging times increase and productivity decreases. Coding style is much like the rules of writing a story. Sentences start with a capital letter and end in a period. New ideas are started in new paragraphs. Spaces exist between letters of words. If someone were to write a book without following those conventions, it would be substantially more difficult to read. Coding style works the same way.

One of the projects I worked for years was a complicated telephony system. It included low-level code for interfacing with the phone boards as well as high-level code for displaying data to the user. This was a lengthy project that took substantial time to develop. During development, John and I worked to develop a consistent coding style. A mentor on the team, Mark, would review our code, provide feedback, and fanatically insist on standard coding conventions and style.

At first, this seemed silly to me. I’m a developer, let me do what I do! But, as time went on, it became increasingly apparent how valuable it was. After a while, I was unable to tell the code I wrote from what John wrote. While this may seem silly, this meant that when bugs were found, either of us could feel equally comfortable understanding and changing the code.

Today, when I learn a new language, one of the first things I try to do is learn standard coding conventions for that language. Some languages, like Java, have well established and followed conventions. Unfortunately, many other languages do not. When that happens, the team needs to determine what conventions they will follow for their team. If not, expect bugs to take longer and development to be slower.

Mac – Not For Business Anymore

Catalina

A few years ago, I fell in love with the MacBook Pro. From the amazing display to the incredible battery life and everything in between, the MacBook Pro is an amazing machine. Unfortunately, Apple started killing that when they removed support for standard USB and I decided not to upgrade. Now, Apple has placed the final nail in the coffin for professional users with Catalina.

Apple has grown accustomed to telling their customers what they want and providing few options. Whether it’s the iPhone, the iPad, or their computer products, you typically don’t have many choices. This has always been a complaint lodged against Apple by PC users. But during the last year, this has killed the effectiveness of the MacBook Pro for business users. With Catalina, Apple has removed support for 32-bit software applications. Unfortunately, as a business user, I don’t have the luxury of upgrading my system if it’s going to kill applications I need for my business. In the business world, legacy code and applications may exist for a decade or more. So, I need to support those systems until they are end-of-life. This means insuring that I having support for 32-bit applications well into the future.

So, as of Catalina, I am no longer an Apple fan. I will keep my current MacBook Pro until it is no longer usable, but my next machine will be a Windows laptop. I can pick what ports I want, and find the corresponding laptop. I can decide what OS I want and what software. I don’t need Apple to tell me what I want – I’m a business user and I know my tech needs far better than they do.

WiFi Calling

Vintage Telephon

During the last few years, WiFi calling has become an option for cellular users. This is particularly exciting for those who use smaller cellular providers, those in rural areas, or those in building with poor cell coverage. But how good is it?

I have two cell phones – one that I use strictly for development and one for general use. A few months ago, I purchased a cell plan for the development phone to use Google Fi. My personal phone uses Verizon. My office is in a concrete building that does a pretty good job blocking cell signals. I do, however, have pretty solid WiFi. So, it only made sense to setup both phones for WiFi calling in my office. Now, no matter what, I can make calls from anywhere in the building.

My Experience

Unfortunately, the only option for WiFi calling on my Google Pixel is on or off. I can’t specify which should receive priority – WiFi or 4G – and I can’t specify what access points to enable WiFi calling on. So, when I’m in my car (with cellular WiFi), my phone uses the car’s WiFi for calling. Hardly optimal given that I pay per megabyte for data. When I’m at home, I have an excellent cell signal – so there’s no reason for WiFi calling. But that won’t stop my phone from defaulting to WiFi anyway.

This wouldn’t be a big deal if WiFi calling was as good as the cell network. But, unfortunately, it’s not. Even on an access point without any other users, my WiFi calling tends to break up or be delayed. Sometimes, it’s so bad that the other party complains and I’m forced to call back later. Of particular annoyance is that there’s typically a several second delay after the other party answers.

While I think WiFi calling is a great idea, it’s not reliable enough – at this time – for me to rely on. If I’m in an area without cell service, I may switch it back on, but until then I’m keeping it shut off.