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.

Electronic Check Payment

Money

Like many small businesses across America, I use QuickBooks to manage my accounting. While it’s sometimes buggy, overall it’s a great application. So, when I got a message to setup online payments for my customers, I thought it sounded like a win. Customer’s wouldn’t have to deal with writing a check, and I’d get my money quicker. Or would I?

I typically bill customers at the end of the month. So, when October 31’s rolled around, I sent bills to all my customers. It was the first time I enabled electronic payment services, and one of my customer decided to take advantage of that service. In fact, he had paid me within 2 hours of receiving the invoice! I was excited, and eagerly waiting for the money to appear in my bank account. And I would be waiting for an entire week. That’s right. In a world where I can email someone in China within minutes, or call someone in Australia right now, it takes a week for money to electronically transfer to a bank across the city.

This isn’t the fault of QuickBooks. When I went back to their terms, I found out that 5 business days was the expected turnaround time. But for the $10 fee they charged me, I actually waited longer for the check to clear than I would have if the customer mailed me the check to manually deposit in the bank.

How is this even possible today? How is it that banks – where I can withdraw money at an ATM anywhere in the world, won’t let me move money electronically in the same time period?

Well, as it turns out, I actually received an email from QuickBooks today – their new service will offer next-day payments. Thank you, QuickBooks, for bringing payment services into the 21st century!

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.

Sleazy LinkedIn Users

Bar

As a small business owner, I am always trying to improve my social network. It’s an essential part of business development and the main point of LinkedIn. During the last decade, I’ve communicated with clients, prospective customers, old colleagues, and people I went to school with via LinkedIn. Unfortunately, now that I’m a business owner, I increasingly find that too many LinkedIn users behave like they’re at a sleazy bar. They connect with me to ‘grow their network’, and within a month I’ve received a half-dozen unsolicited messages to give them my business. I find this utterly annoying. Just because I connected to you doesn’t mean I am looking to outsource to your company, purchase your health care, use your accounting services, or anything else. And your behavior ensures that won’t change.

Previously, I wrote a blog about Social Media Etiquette. In that blog, I mentioned the Like/Know/Trust model. The idea is that you move connections from the outer circle to the inner. I start by getting you to like me, then get you to know me better, and finally get you to trust me with your business. Unfortunately, when you start by spamming me, I don’t like you. If I don’t like you, I will never get to a point where I trust you.

Why are people engaging in this sleazy behavior? I assume, sadly, that it gets results. If you spam enough people, you only need a small percentage of conversions to consider your method a success. But what happens to your reputation among those who didn’t purchase your product? It’s possible that I may have purchased your product at some point, had I ever gotten to know you, but now I never will. You have lost a potential customer who, because of your sleazy business practice, will never be converted to a client.

My advice for social media: slow and steady wins the race. Develop meaningful relationships with people, share meaningful content, engage your network. Through this process you will earn friends. And we all know that given the choice of working with a friend or a stranger, nearly everyone will chose to give their business to someone they know and trust.

To those who spam me on LinkedIn: my new policy is to immediately remove you from my network. You bring nothing of value to me. I get enough spam in my email, I don’t need it on social media too.

Drive & Success

Drive

Most people would say that I’m a successful person. I’ve started my own business, enjoyed 20+ years of a happy marriage, raised a wonderful daughter, earned a third degree black belt, and done so much more. Of course, each of us may view success differently. To some, success may be earning their first million before 30 or to earn their MBA. Success may be marrying the woman of your dreams or buying the car you’ve always wanted. Regardless of how you define success, the formula is pretty much the same.

Drive

The relationship between drive and success is well defined. Tommy Hilfiger said: “The road to success is not easy to navigate, but with hard work, drive and passion, it’s possible to achieve the American dream.” Chuck Norris also recognized the connection: “I’ve always found that anything worth achieving will always have obstacles in the way and you’ve got to have that drive and determination to overcome those obstacles on route to whatever it is that you want to accomplish.”

But what too many people seem to ignore, is that the opposite is also true – without drive, you will have a very difficult time being successful. When I look around, the people I most often see struggling to get by are the same people who have little – if any – drive. They buy their next lottery ticket and hope this is the one. They put their money into fad diets because it’s easier than working on the body they want. They rely on whatever easy method or get rich quick scheme they can find. And where does it leave them? Exactly where they started.

My wife has often says I’m driven by a rubber band. She says that I never stop, and that she believes I could achieve anything if I set my mind to it. I’m thankful to have that drive. It has served me well. But to those of you who have not achieved the success in your life you have wanted, why do you think that is? Are you driven to success, or just driven to the couch to binge watch the next season of your favorite show? Are you as interested in learning Italian as you are sitting on the deck all summer? If you’re not getting where you want in life, what do you intend to do about it?

It’s never too late to change your life to be what you want it to be. However, you need to start by taking charge of your life and focusing on the things that will drive you toward the success you wish to achieve!

Development Environments

Workbench

As a developer, it’s a great time to be alive. We have countless options for development languages and frameworks. But, sadly, many of them leave much to be desired in terms of tools and environments.

The Model Environment

As a veteran Java developer, I’ve been spoiled with excellent tools. We have numerous IDEs including Eclipse, NetBeans, and IntelliJ. Everyone has their preference, but all three are excellent. Likewise, we have numerous build and dependency management packages such as Maven and Gradle. We have test frameworks, automation frameworks, debuggers, profilers, and anything else you could want to engineer even the most complex of application. In short, Java provides the best development environment there is. Seriously. Few languages have IDEs as good as what Java has. Even fewer have tools that can complete with Maven or Gradle.

When Will Other Languages Catch Up?

I continue to see how Python is displacing other languages. But when will it catch up to Java in terms of development environment? Are there any IDEs that complete with Eclipse for Python? (NOTE: Eclipse can actually be used for Python, but it always seemed to me more of a hack than a real Python IDE) How about debuggers? Go ahead and try debugging Python or JavaScript code and you’ll quickly see how far behind Java they are. Not to mention dealing with libraries and environments!

A Call to Action

As we continue to shift to newer languages, I’m concerned that the next generation of developers will actually have a more difficult time than we do today. Why, as a development community, are we only focused on creating new languages but not on creating solid environments? How are Go, Python, Rust, and the myriad of other languages ever supposed to achieve the same widespread adoption of Java if we never had the rest of the tools we need to get the job done? I want to enjoy the benefits of some of the newer languages to come along. But, until they can complete with Java, I’m unable to stake the success of my customers on them.

Fit for Sale

Sales

As an app developer, I am often approached by friends and acquaintances with “great” app ideas. They believe their idea is worth millions and that I should drop everything and develop their app. Businesses too fall prey to the idea that “I need an app“. Either way, it’s imperative that adequate market research be performed prior to developing any piece of software. 

A Great Idea

A few years ago, I was approached by an individual who had a “great idea” for a software application that was going to revolutionize the industry. He had some startup money to develop the application, and was in a hurry to get started. He contacted me to write him a mobile application, cloud-based management system, and REST services for integration points. It was an ambitious project for the client, and I was excited to start developing. He provided the requirements to me, and I wrote the software. I provided feedback to improve the application, but it was ultimately the customer’s decision what he wanted to include or not include.

Poor Market Research

Unfortunately, as the project moved forward, I learned that the client had very little money for development. None-the-less, we worked to create a working product which we achieved on his budget. But, as he would learn during the next month, he was creating an application that nobody actually wanted. Not only did his application lack features that would be necessary for adoption, it served only a very small niche market. The customer assumed he knew what people wanted, and had never bothered to reach out to any prospective clients for feedback.

Consequences

Due to the customer’s poor market research, he was unable to find clients interested in his software application. Months went by with very few interested parties, and nobody ultimately purchased the software service. Consequently, the customer blamed me for writing an application that nobody wanted. He even fought me on payment because he was unable to make his money back through sales.

Lessons Learned

There are several important lessons to be learned from this experience. First, if you’re paying someone to write you software or create any other work for you, make sure it’s worth the cost. It’s your job as the customer to know what you are purchasing and to ensure that it will meet your business objectives. As a software consulting firm, I can provide you with information and develop software. However, I can’t tell you wether or not your application will be a success. Second, market research is of paramount importance for any project. If you don’t know the target market, the demographics, the estimated number of consumers, and other key data; you can’t determine financial viability of the project. Before you go into any project, do your part first and ensure that the work you are paying for will take you where you’re trying to go!

Debugging & Maintenance

Debugging

Long after the initial fun of developing an application comes years of debugging and maintenance. Yet, many languages and developers fail to make choices that will ensure that future maintenance will be possible. Then, when problems occur, substantial time and effort is spent trying to resolve the issue.

Current Trends

It seems that right now, a growing number of developers and development teams are transitioning to languages like Python and Javascript. Both of these languages can do great things. Unfortunately, they both suffer from the same problem – they are incredibly hard to debug and maintain. Why is that? Python and Javascript are both weakly typed scripting languages. What does that mean? In short, it means that the programmer can be lazy about how they define things and let the computer do all the work. Unfortunately, it also means an increased risk of runtime errors and greater difficulty in finding problems.

Magic Frameworks

This is exacerbated by magic frameworks. Everyone loves Ruby on Rails and Django. But both become a nightmare to debug very quickly. Need to change something from the framework? Great – your hack will be the source of nightmares when you leave. While these frameworks may simplify our lives in the short term by providing a quicker time-to-market, in the long-term they are more difficult to maintain.

How Can We Fix This?

Unfortunately, I have rarely seen well documented Python or JavaScript code. Typically, users write code and forget about it. Online videos and tutorials rarely stress the importance of comments and documentation. Thus, we end up with fragile code nobody understands. As a developer community, we need to do a better job of passing on our knowledge of code to the next developer. This means comments, readme files, and other documentation. If you write software using weakly-typed scripting languages, you owe it to those who will debug your code later to put in the extra effort!