Title Inflation

My first job as a computer programmer was for a small software company. Our tech department consisted of only a handful of people. I functioned as developer, QA, tech support, and network administrator. When I left, we had three programmers. As the person with the most time in the organization, I had the title ‘Senior Developer’. At the time, it sounded great. However, it would be more than a decade before I would have another title suggesting my status as a more senior level engineer.

During the last few months, it has become apparent to me that title inflation has really gotten out of hand. I read an article last week that Javascript Developers want to be called UX Engineers instead. The bulk of programmers are not great at interface design – developers use logic, interface designers use feeling. It’s a left brain/right brain thing, and few people are actually great at both.

Likewise, everyone wants to be a Full Stack Engineer today. Sure, plenty of people can do all parts of a project – from the HTML frontend to the backend and the database. However, very few are actually experts at all of the above. Most Full Stack Engineers are really just jack-of-all-trade sorts who have not mastered any particular part of the process.

I see even more title inflation when I look at small business owners. Everyone is a Founder or CEO – yet few, if any, of them have employees or revenue to command such a lofty title.  Or better yet, people claiming the title Director of some department or another yet having nobody underneath them. You’re only fooling yourself.

What have I learned from all this? Titles are meaningless. What really matters is what a person has accomplished. If you had to prove to someone that your title was appropriate, could you do so? On your resume, can you provide several bullet points to validate your title? If you cannot, you will be disappointed when the next organization you work for gives you a title inline with your actual skills.

Invest in Yourself!

Most people with any type of investment account are concerned with the kind of growth their investment will achieve. News sources provide up-to-the-minute stock updates. Talking heads on cable news talk about the likelihood of a recession. All around us, people are concerned with investments. But what most people ignore is investments in themselves. Beyond college, few people pursue any further education or training to advance themself. People want to achieve more, but few will put in the effort to make it happen.

Businesses are often the same. Recently, I spoke with a potential customer about an app for their business. The customer indicated that they were very concerned about losing business to a big-name competitor. They wanted to be able to more effectively compete with the giant in the industry. When I asked what their budget was, they indicated that they had $250. I could tell similar stories about other businesses too.

Are you making investments in your future? Today we have more options than ever to better ourselves. Innumerable websites offer online training, books on any topic can be found to hone your skills, and online groups and forums abound for connecting with others. Are you exploiting those opportunities?

In the end, whether it is our personal life or our business, we must be willing to invest time and money if we wish to see growth. Otherwise, we will constantly be at the bottom of the totem pole wondering why we can never get ahead.

Hack Day

In December, I participated in the MLH Local Hack Day. Hack Day is an opportunity for tech nerds of various disciplines to get together and collaborate on projects or to simply attend lectures presented by various people and organizations.

During Hack Day, I was invited to speak to the students of our local tech school – South Hills School of Business and Technology – about my experiences as a programmer and an entrepreneur. One of the topics of my presentation was advice for aspiring developers.  Below is some of the advice I gave.

Never stop learning.  The people who get ahead in life are those who are educated. They read daily. They are always learning the skills needed for tomorrow’s workplace. Those who are left behind – particularly in tech – are those who have antiquated skills.

Shut the TV off. At the end of your life, you will never look back and say “I wish I had watched more television”. TV can provide entertainment, but it will never help us achieve our goals. In fact, TV will derail our goals and dreams by preventing us from acting to achieve them.

Learn Linux. It’s sad the number of techies out there that don’t know their way around a Linux server. Given the number of things that run Linux such as Android, Docker, AWS, and Google Cloud; knowledge of Linux is crucial to your tech career. If you’re stuck in a Windows-only world, it’s time to diversify!

Master JavaScript. Like it or not, JavaScript is becoming the dominant language of development. Not only is JavaScript the defacto language of the web, it is increasingly being used for server side development (Node), build automation (Grunt), robotics (Johnny5), and has become the standard language for passing data between systems (JSON).

Master Web Development. Along with the growth of JavaScript, web technologies are exploding too. Cordova and Ionic allow web technologies to be used to create mobile applications and Electron allows JavaScript to be used for cross-platform desktop applications.

Write Code Daily. A weight lifter gets stronger by lifting weights. A runner gets faster by running. A coder gets better by coding. Reading books is great, watching videos is cool too. But if you want to write better code, get in the habit of writing code every day.

This is just a short list of the advice I provided. Nonetheless, it’s a pretty solid checklist to start down the path to becoming an expert software engineer.

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.