Organizational Aspirations

Throughout my life, I have observed that there are two types of people out there – those who aspire to excellence and those who are content to get by. This extends to businesses as well. For example, consider Chick-fil-a. Just like McDonald’s or Burger King, Chick-fil-a is a fast food joint.  But unlike their competitors, it’s apparent that Chick-fil-a aspires to be something more. You see it in the quality of their staff and the quality of their food. As far as fast food goes, Chick-fil-a is the gold standard of excellence in all that they do.

Unfortunately, there are too few businesses out there striving for excellence. Companies try to cut corners, find the cheapest bidder, outsource their call centers to people who struggle to speak English, or engage in other practices that show anything but excellence. These companies try to gain our confidence but they never will. We may use their products and services, but only when we’re looking for a cheap solution. Indeed, these companies have turned their products and services into commodities differentiated by nothing but cost.

When people look at the goods and services your company offers, what do they see? Are you an organization demonstrating excellence in all you do, or a another in a long list of organizations content to push the mediocre?

Making Money

We all want to make money. While we know that “money can’t buy happiness”, it’s a whole lot harder to be happy when you are struggling to get by. So, how do we make money? As a business owner, I have been forced to think about how money is earned – not only by me but by those in my organization. I concluded these are current three ways that money is generated within my small business.

Perform Billable Work. The first and simplest way to make money is simply to perform work that will be paid for by someone else. In the software industry, this means writing code. In other businesses, it means performing the work that defines the function of the organization. This is the most visible way to generate revenue. These are also the easiest to consider hiring as their efforts directly generate revenue.

Bring In New Customers. Organizations can only grow and thrive if new customers are coming onboard. The best software staff in the world can’t work if there’s no work to be done. While bringing in new customers doesn’t necessarily generate revenue, it fills the pipeline of billable work that is needed to keep a business moving forward. As these staff members don’t directly generate revenue, they are more appropriate to hire based on commission.

Free Up Time of Others. The third way to generate revenue within an organization is to enable others to accomplish their mission unimpeded. Secretaries, assistants, human resources, accounting, are examples of this. They perform work that frees others do to billable work. This is even more apparent in a small business. My personal assistant does all the little things that need done so I can focus on billable work. These staff members are the hardest to hire as they must be paid from the money generated by other staff. However, the time they free for billable staff can make them easily worth well beyond the salary they receive.

As an employee, where do you fit in within your organization? How much revenue do you generate for your organization? Is it directly or indirectly generated? If you know the answers to those questions, you can better understand your value within an organization.

Goals Not Resolutions!

As the new year begins, many of us will be making resolutions. “I’m quitting smoking” or “I’m going to the gym every day”. Typically, these resolutions don’t last into February. Why is that? Maybe it’s because we believe that, magically, just because the year changed our behaviors will change too. This year, instead of focusing on a resolution, why not set measurable goals for the year. For example, instead of a resolution that says “I’ll quit smoking”, you instead set a measurable goal such as “I am going to smoke two less cigarettes each month until I have quit this fall”.

Resolutions frustrate us because we see ourselves as failures when we mess up. When we want to quit smoking, after we’ve messed up once or twice, we abandon the resolution and continue with the old behavior. When we set goals instead, we innately recognize that we have a road to travel to reach our destination. We also acknowledge that there will be bumps along the way on the road to success. A setback today does not end our journey – it merely means we need to keep trying and working harder to reach our goals.

Where you find yourself next January will be determined by what you do this year. If you focus on resolutions, you’ll be in the same place next year with similar resolutions. If, instead, you focus on goals; you’ll start to see your life progress in the direction you want.

Microsoft AppCenter

Several years ago, I needed to find a way to distribute mobile applications to test users. Ideally, the solution should allow for anyone to access the test application. This would include internal users as well as key stakeholders within the client organization. The distribution channel should support Android apps as well as iOS and, optimally, any other application type I would like to deploy. After searching, I found HockeyApp. What an amazing tool HockeyApp was. Not only did it meet those requirements, but it also allowed for integration of their API to include advanced features. For years, I used HockeyApp without issue. Apps are built by my automated build platform, pushed to HockeyApp, and users are notified of new test versions.

Fast forward to today, and HockeyApp is now owned by Microsoft and being moved to AppCenter. To be honest, I’ve never been much of a Microsoft fan. I could point to countless reasons such as lack of good native development tools, poor support for scripting or automation, their hatred of Linux (even calling a cancer), Internet Explorer which worked differently from every other browser for developers, and now I can add their horrible transition to AppCenter to the list.

Today, I received a notification from Google that one of my apps was removed from the store. It appears to be a mistake on their end, but I need to verify and respond to Google. So, I uninstall the copy of the app from my phone and go to AppCenter to download the app onto my phone. The first thing I notice is that I have multiple copies of the app but none of them are tagged with the appropriate build type. I can’t tell free version from paid version or beta version or anything else – just a bunch of apps with the same name. After clicking on the individual versions, I find out that none of them are available for me to download. After digging around, it appears I need to release the app to a distribution group. It had been setup properly for years, but now it’s broken. So, I go to the website to check the distribution groups. Guess what? There is no way to change them in AppCenter. I can see that I have a few groups, but I can’t even tell who is in them. So, to fix the problem, I will need to go to every single app I have (a total of 28), add them to a new distribution group (with unknown members), and rerelease them (generating 28 emails to each member of an unknown distribution group). What a horrible experience for both me and my team members. As a small business owner, I don’t have the time to waste to make all the necessary changes, updates, reconfiguration of continuous development pipelines, etc. What an absolute nightmare.

Maybe my experience will be better once I get everything transitioned to AppCenter. Perhaps these are just short-term growing pains. Regardless, this is just another example of why developers have always been skeptical of Microsoft – and another reason I’m glad I use Bitbucket instead of GitHub.

Definition of Done

A few years ago, when the company I worked for at the time switched to agile development, I remember my boss saying how important it was to define ‘done’. I thought that sounded silly. Don’t we all know what done means? Do we really have to define it for the team? But as we discussed the idea, I realized it wasn’t as strange a question as it sounds. For instance, if I ask my wife if she’s done with the laundry, she might say she is. So, I assume that I can go to the closet and grab my favorite shirt. However, when I get there and don’t see it, I’m frustrated. Why did my wife tell me the laundry was done when it clearly wasn’t? Obviously, she and I had defined ‘done’ differently. To me, it means washed, folded, and put away. To my wife, it simply meant washed. We had both defined ‘done’ using a different criteria.

This same thing happens in software development. When we talk about software being done, we may mean that the development has been completed or that it’s been tested. Or, maybe we mean that it’s been deployed to a staging server or that it’s been through User Acceptance Testing. Maybe we mean that the source has been checked in to a branch or that it’s been merged to master. All of these things represent a drastically different definition of done.

As a customer of software services, you need to be able to define what you mean by done. If you don’t, you run the risk that your development team does not perform to your expectations since you were both defining the endgame differently.

What’s My Why?

A few weeks ago, I read Simon Sinek’s Start With Why. As I was reading, I was forced to ponder what my company’s purpose is. The simple answer is that my company exists to make money so that I can pay my bills. But that’s hardly very motivational – for me or for customers. No, I want my company to have a bigger purpose – I want my company to be transformational! What is my why? My company’s why is pretty simple – to make the world a better place. That’s a pretty lofty goal for a small software company. How can I possibly accomplish that? I can make the world a better place by accomplishing three things. First, Talixa will empower and enable customers to solve their business problems. This will enable them to better capitalize on their market which will, in turn, generate revenue and jobs. This improves the lives of people not only directly (through jobs) but also indirectly (through taxes generated for local government). Second, Talixa will work to improve the local community through creating jobs and developing tech leaders. Talixa is committed to hiring local resources and striving to develop the pool of local technology experts. We will work to support, grow, and train the next generation of technology leaders in the area. Third, Talixa is committed to improving the world through philanthropy. Talixa will work to support charitable organizations not only through financial donations, but also through serving and volunteering both locally and throughout the globe. We will encourage all those working with us to do the same.

So there you have it – the why for Talixa. Empower businesses, hire locally, serve globally. If we can achieve these three things, we can have a small part in making the world a better place!

Multilingual Programmers

One of the biggest difficulties in the computer programming world today is the sheer number of languages out there to use for application development. Which language should you learn? The reality is, that’s the wrong question. I recently spoke with a developer who indicated that he only knew C# – he was not comfortable with Python or any other language. For the professional developer, this it not an acceptable answer. In today’s world of programming, you can no longer get by knowing only a single language. For example, while the bulk of the code in a Java web application will be in Java, the front-end will require JavaScript and HTML. Build scripts may be written in Groovy or XML, and Shell scripts may be required for build automation. This is not unique to Java applications – just about any application will require some knowledge of other languages.

How do you pick which languages to learn? At a minimum, every professional engineer should know at least one compiled language such as Java, C, C++, or C# in addition to JavaScript, Python, and SQL. Additionally, he or she should be comfortable with another language such as Ruby, PHP, Go or Rust.

If you’re an application developer, do you only know one language? If so, I would strongly urge you to learn additional languages. Mastery of every language isn’t necessary, but any decent developer should feel capable of writing code in several languages.

Life’s Not Fair

When my daughter was young, she once complained to me about how one of my decisions wasn’t fair. I don’t remember what she asked for anymore, but I do remember my response. I told my daughter she should be thankful that life isn’t fair. Look around the world today and you see children starving in underdeveloped parts of the world, people being oppressed by cruel leaders, people suffering from lifelong disabilities, and all kinds of other suffering. Yet here, in America, we enjoy an incredibly high standard of living. Few of us die of starvation, we have a democratically elected system of government, and we have some of the best healthcare services in the world. I am thankful every single day that I have been blessed so greatly.

How does this apply to technology and business? As I run my business, I see how fortunate I am. I see that I am well paid, that I have freedom to enjoy life, and that I am the master of my own destiny. As I look around, I see that few others have that freedom. Even among the greatest nation on earth, I am among the most fortunate of people. As such, I have a moral obligation to make the world around me a better place. I am compelled to improve the community I live in, to better the lives of those around me, and to work to empower those I work with. I’m thankful life isn’t fair because it gives me an opportunity to make the world a better place. It gives my life purpose and meaning.

Making the world a better place should be part of the mission of every company out there. Is your business empowering employees? Are you making your community a better place to live? Are you serving more than your own pecuniary interest? Can you sleep at night with the decisions that you and your business make on a daily basis?

When we all work together, we can make the world a fairer place for all. We can work to ameliorate suffering and starvation. We can improve healthcare around the globe. Maybe, someday, the world will be a fairer place. Until then, each one of us – business and individual alike – has work to do.

Great Minds

It’s often said that “great minds think alike.” It sounds great, in theory. But is it really true? Just because I’m thinking the same thing someone else is, does that really mean we’re both great minds? I hardly think so. It’s not the employee who thinks the same as everyone else that brings value to the team, it’s the free thinker who has a different perspective. In the boardroom, when everyone thinks the same, we call it groupthink. Psychology Today says “In a groupthink situation, group members refrain from expressing doubts, judgments or disagreement with the consensus and ignore any ethical or moral consequences of any group decision that furthers their cause.” This hardly seems beneficial to the team. When I think of great minds, I think of the men and women who engaged in thought well outside the mainstream – brilliant men like Isaac Newton, Albert Einstein, Stephen Hawking, and Benjamin Franklin. If you want to be a great mind, think for yourself! Don’t let the people around you define your thought. Be willing to take risks and think outside the box. It’s those people who history remembers – not the people who think like everyone else.

Language Popularity

A subject that repeatedly comes up on websites, blogs, and conversations is which language is the most popular and which ones are the best to learn for future job opportunities. I keep an eye on this list myself as it’s important to understand trends within the software industry. However, people seem to ignore the most important aspect of language popularity – the context.

What do I mean by context? I mean we have to look deeper to understand why a language is as popular as it is. We also need to understand the market for a language and how that impacts popularity. For example, JavaScript is always near the top on any language popularity chart. Is it any coincidence that JavaScript is also the only front-end scripting language in use today? Whether or not you like JavaScript is utterly inconsequential. If you want a website with any manner of front-end scripting, you will use JavaScript. Likewise, if you want to interact with a database you use SQL and if you want a web page, it will be HTML. As such, these technologies will always rank more highly than those with a smaller market.

So what about Python? Everywhere you look, you see that Python is at the top of the list. Should we all switch to Python? Not really. What all those rankings fail to point out is the user base for Python. Certainly there are all kinds of production projects out there running Python. But if you look around, you see that Python’s popularity is largely caused by people outside the traditional developer community. AI researchers, academics, data scientists, system administrators, makers, etc. For non-programmers, Python is easy and incredibly powerful. But that hardly makes Python superior to other languages nor does it suggest that professional programmers should start porting their eCommerce sites.

Remember, while rankings of popularity may help you see trends, look to the underlying reasons. Why is it popular? Who is it popular with? Does this language look poised to overtake in other realms? When picking a language for a problem, the most important question is which language solves the problem best – not which language is the most popular.