Know Your Numbers

As a US based tech company, if someone were to ask which language we would use to be able to communicate with the most people around the world, “English” would probably be the expected answer. While English is second only to Mandarin Chinese (the most spoken language in the world), communicating nonverbally through science, technology, engineering, and mathematics (STEM) would serve as a more universally effective method. Regardless of whether the person on the other end of the conversation can speak the same language, anyone can relate through numbers.

In business, numbers are considerably more important. From margins to revenue and analytics, companies live and die by their numbers. Some of my favorite businesses have closed, not due to a lack of quality in their product or service, but because they failed to understand how to properly manage and utilize numbers. Sadly enough, companies with millions of dollars in revenue can still have little to no profit. Likewise, companies can often easily fail to deliver on the value proposition of their product or service.

As I continue to help Talixa develop and grow through refining our business processes and my own social media processes (specifically twitter for the time being), I constantly am looking to see what the numbers can tell me. Experimenting is one of the best ways to learn, because it leads to a wider range of experience. Individuals, businesses, and organizations can develop and grow simply by taking action upon an understanding that numbers are a priority.

Looking for advice based on anything I’ve said? I’m happy to give it, free of charge. Reach out using any of these methods:

DM Talixa on Twitter: twitter.com/TalixaSoftware
Message Nick on LinkedIn: linkedin.com/in/nick-gordon
Email Nick: nick@talixa.com

New Year New Me?

After Christmas each year, many people begin a process of introspection in order to help determine their New Year’s resolution. While resolutions generally aim to improve oneself or a particular aspect of life, few actually survive very long. In my own experience, the promise of change on New Year’s Day was more of a novelty than something that I truly considered and took seriously. In all honesty, thinking about becoming a better person is vastly more fun than actually taking action to make it happen.

Regardless, most people admit that they do, in fact, want to improve in certain areas. My greatest criticism of New Year’s resolutions and phrases like “new year new me” comes out of the premise that in order to effectively develop and grow, people need to constantly focus and reevaluate. Quite frankly, bringing others along into the process to create a feedback loop and accountability serves an essential purpose as well. When change is important enough, it should be implemented immediately rather than wait around for the first of January. Further, if a person needs a holiday to change, then how genuine is that desire?

With that being said, if you have been thinking about how to change going into the new year, might I suggest that you start now, instead of waiting for Tuesday to roll around. Whether you want to make changes to improve your health, family, work, or something else, be mindful of why you really want to change, how you plan to get there, and what consequences will result from your success. Every morning presents a new opportunity to become someone different than you saw in the mirror yesterday. Be encouraged, and feel free to save and return to this article to refocus throughout the year.

Opportunity Awaits

Timing is everything, and managing time properly is extremely important as well. Tim Ferriss might say it best, “If you don’t have time, you don’t have priorities.” Assuming people read the big letters that make up the title of this content, they may be asking “Why all this talk about time and timing instead of opportunity?” The simple answer becomes quite clear by taking a look at the second word: Opportunity AWAITS.

Now take a moment to think of some opportunities that impact life. Whether it’s a first date, a new job, or a college acceptance letter, these opportunities, regardless of magnitude, contribute to the direction of a person’s life. Smaller opportunities can lead to greater opportunities, and over a short period of time, life can radically change. While it’s impossible to anticipate every opportunity, people can prepare to capitalize on any opportunity, good or bad.

As a company, our preparation is critical to the success of both our clients and our business. We know that success does not happen by accident, yet we also do our best to put the needs of others above our own. In reality, we understand that the value of education far outweighs a pushy sales pitch, so we spend our time and money educating ourselves and others who express interest in who we are and what we do. In doing so, we hope that the friends we meet along the way appreciate what we do for them and help spread the word.

If you have interest in learning more about why we continue to work with new businesses to develop and grow, simply click on the “Contact” tab and choose your preferred method. Opportunity awaits!

Limit[ed/less]

Over time, there is an infinitely small likelihood that I would be capable of talking about this blog individually to everyone who will ever be interested and invested in the content. As more content meets more people, time would inevitably run out. Fortunately, with the help of technology, here we are. The limitations of the internet are not the same as the limitations of my mouth, and building upon this foundation brings some game changing ideas.

While the internet provides much better potential to reach more eyes and ears, nobody wants to give up the benefits of using their mouth to speak. Nobody wants to upload their entire life to YouTube either. If humanity would become incapable of speaking, however, the way we think about even the smallest aspects of everyday life would change, similar to how the internet has impacted how we interact with the world. This leads into what we can learn  and apply to tech and business.

Regardless of individual circumstances, people have areas where they are presumably limited more or less than others. For instance, the fact that I am 6’4″ implies that my height is much less limited than most. But how would things change if we alter the conditions? You might be pleasantly surprised at the result if you consider questions like this in a variety of circumstances.

When applying this thinking to finances and business growth, the effect becomes clear. Say a business operates on $200,000 per year. What would be done differently (and why?) if the business had an annual operating budget of $100,000? How about $400,000? Putting businesses into these hypothetical situations will inevitably help foster a mindset of growth by overcoming presumed limitations in a practical way.

Circumstances will certainly change over time, for better or worse. By asking these questions now, you can gain a better understanding of why you might choose to take one course of action over another. Hopefully this entire process will help you more adequately prepare for your next big decision. After all, with preparation and execution people develop and grow.

“Best” Sales Tactic

As someone with a B.S. in Business Administration, I can say with confidence that most people with a considerable level of business education and experience would argue the importance of a top notch sales person. While sales is an incredibly important role to fill, I would suggest a more practical and important focus, particularly for small businesses. Investing available resources into ensuring the highest quality of a relevant product or service often yields far greater returns than overemphasizing hiring for a sales position and shifting the focus from what’s most important, creating value.

Rather than finding the “best” salesperson, why not concentrate on being the best at what you do by a considerable margin? Quality sells, and more importantly, paying attention to the issues that are relevant to clients and consumers will take your business to the next level. Too many times business owners fail to prioritize their endeavors properly, prohibiting optimal growth both short-term and long term.

How can your business implement this advice? Perhaps you were planning to hire too early. Nobody knows your own business better than you. Focusing more intentionally on bringing your best to the table will, in turn, yield a substantially better product or service allowing your business’ competitive advantage to sell itself.

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.

Transactional Friction

If you have ever considered where money originated or why we use it, then join the club.

Long before the day of the dollar, civilizations operated under a system of barter where goods were directly exchanged for other goods. While there are a few benefits with this system, people quickly realized the obvious flaws. For example, if a farmer had a cow to trade, they would need to find someone with goods of equal value. Further, there is often an expiration date associated with certain goods, such as a farmer’s milk or a baker’s bread. Therefore, even if a baker had enough bread to buy a cow, the farmer would have no use for that much bread.

These days, most of the world uses government issued currency that acts as a standardized means of exchange. While currencies address many of the issues of the barter systems, they are still often limited by some factors. For instance, if a person wants to spend money online or while vacationing in a foreign country, that spending creates transactional friction. In other words, customers pay fees to a middle man, whether it’s to exchange currencies or process transactions.

As a result, many have turned to cryptocurrencies as a solution to transactional friction, though  cryptocurrencies have not been able to handle scalability for the time being. As a result, using cryptocurrencies for their intended purpose is virtually impossible. For cryptocurrencies such as Bitcoin or Ethereum, consumers spend several dollars in fees to make a transaction, rather than the fraction of a penny that they initially boasted.

Consumers around the globe are losing billions of dollars each year to various fees. So what can we do to avoid transactional friction? One piece of advice is to avoid using money where possible. Try to exchange your marketable skills for something more valuable than money. Programmers are continuing to work on some of the scalability issues behind blockchain technologies. In the meantime, everyone else can have a bit of patience and remain on the lookout for the progress taking place.

Angular & MaterializeCSS

During the last year, I’ve developed numerous websites and mobile applications using the Angular framework. I’ve used numerous CSS frameworks as well such as Bootstrap, Ratchet, and Topcoat. But recently, a customer asked me to use MaterializeCSS. MaterializeCSS is a library of CSS and JavaScript code to easily create a material design experience for web applications. It’s quick, easy, and visually appealing. Unfortunately, getting some of the components to work with Angular proved difficult as the online documentation does not show how to setup Materialize for Angular. While most of the components do not require any JavaScript interaction by the developer, some components (such as select option lists or tabs) require initialization. The documentation says that tabs can be initialized by using:

var instance = M.Tabs.init(el, options);

Unfortunately, this won’t work in Angular as you’ll get numerous errors regarding undeclared variables. How can you hook this up properly?

First, declare the ‘M’ variable inside the page component below the imports. This will allow you to use the ‘M’ interface to MaterializeCSS from within your Angular code.

declare var M: any;

Next, get a reference to the object you are trying to interact with. This can be obtained by using a querySelector for the class of object you’re trying to initialize. For instance, tabs will be declared in HTML by assigning a class=”tabs” attribute to object. Once you have the object, you can initialize it by calling the appropriate method. This should all happen on the init method of your page object.

ngOnInit() {
  const elem = document.querySelector('.tabs');
  const options= {};
  M.Tabs.init(elem, options);
}

This is identical for any other object that requires MaterializeCSS initialization and can also be used to call any other functions in the MaterializeCSS framework.

With this information, you should be able to enjoy the benefits of Angular as well as the awesome UI elements of MaterializeCSS to their fullest!

How I Got Here

During the last decade, I have been asked countless times how I would recommend someone get into the programming world without going to college. Many people don’t want to spend the time or money getting a computer science degree, and since I did it people generally assume I can tell them the shortcut to achieve the same in their life. Unfortunately, few people really realize the amount of time and effort it took for me to get where I am or the difficulties I’ve encountered by not having a degree in a field where a degree is expected.

I didn’t start working with computers until around 1997. I was in the US Army at the time, and worked exclusively with Unix machines. Unlike the Windows world, the Unix world has always had tools for developers. The machines I worked on had C, C++, Perl, Tcl/TK, Fortran, Bourne Shell, and numerous other programming tools. During the course of my work, I often used scripts written by others, and soon learned to modify them to do what I wanted them to do. I purchased programming books from Amazon and decided to learn more. At home, I setup an old computer to run Linux so I could have a similar development environment to the machines at work. As time went on, I decided to take courses through the National Cryptologic School on Perl, Unix Administration, C Programming, and other tech subjects. After becoming pretty comfortable with C, I decided to further my education through a correspondence school (the now defunct National Radio Institute) where I earned a diploma in Visual Basic Programming (as I was already pretty comfortable in C, I figured it best to branch out and learn a new language). A few years later, I took a few courses from the University of Maryland in C++ programming. Throughout this time, I spent countless hours at home learning everything I could about programming. I wrote programs to do all kinds of things – from GUI development to command line scripts. This was a difficult time in my life – working a full time job while spending all my free time learning to write computer software took a heavy toll on my marriage. But it would all be worth it when I got out of the Army and found a job in the software realm.

Then, in 2001, it was finally time to step out and find a programming job. Of course, I had no real experience as a programmer. I had written some code and scripts in the Army, but hardly anything that would really be considered production code. None-the-less, I managed to find a local company that needed an entry level programmer. And, thanks to a friend who knew the owner, I was offered a position. In my hubris, I assumed I knew everything at that point in my career. It would take years to fill the gaps in my knowledge to become a good programmer. With project after project under my belt, I would finally become a respected developer around a decade later.

What has my lack of degree caused me? During my entire career, I have found countless companies that wouldn’t even talk to me because I didn’t have a degree – they were unwavering on their requirements for a BS in Comp Sci even though I had been working in the field for years. At various companies I worked at, it became obvious that I would never be promoted simply because I didn’t have a piece of paper. Even though I could code better than my peers, my lack of degree held me back.

At no point has my path been easy. It’s involved an incredible amount of work and sacrifice. And if you’re thinking of teaching yourself to program and find a job, I wish you the best of luck as you are about to find out that it takes far more than watching a few online videos and making a webpage.

If you do choose this path, how can you make it successful? Passion – you must have an unwavering passion to write code. You need to spend every waking hour writing code, reading books, watching videos, and doing everything you can to become a good programmer. Expect to put in substantial time and effort. Expect to struggle finding your first job. Expect difficulty advancing in your career. Don’t think for a minute that it’ll be easy – I can promise you, it won’t.

Picking a Server Platform

Many small businesses want websites or mobile applications that require server-side functionality. Often, this functionality includes a database to store user information. What options exist for a user? What are the pros and cons for each one? I will examine three different frameworks – Node and SQLite3, PHP and MySQL, and Tomcat. These represent just a small number of options available to a business – from small scale applications to enterprise solutions.

For small applications, I like Node and SQLite. Node is a simple platform to run server-side programming. Since it requires virtually no infrastructure, Node services can be installed and deployed in minutes.  Likewise, SQLite requires no installation. SQLite databases are a simple file that can be easily backed up or restored by copying the database file. While this framework is great for small applications, enterprise applications would benefit from more robust environments. Node and SQLite can work really well for small internal applications or to implement a small number of services using a small database.

Next up, PHP and MySQL. This combo is widely deployed on a variety of platforms. In fact, that’s one of the reasons I like it. Typically, service providers like GoDaddy have support for PHP and MySQL out of the box, so applications and services can be deployed without much effort.  PHP/MySQL is also more robust than Node/SQLite. On the negative side, PHP has a variety of versions that are substantially different and PHP code can easily become unmanageable if developers aren’t careful.  I like this solution for smaller customers needing a small number of services on an existing PHP server.

Finally, there’s Tomcat. This option is an excellent Java-based server bringing all the advantages of the Java programming language into a robust server environment. Tomcat can integrate with any database, but MySQL is a common solution. Tomcat is an excellent option for Java web applications or services, but suffers from one big problem – it’s the most complicated option to setup.  This option is best when a large number of users or a large database must be supported. This is the option I like to recommend for enterprise customers.

Numerous other databases and server platforms exist. Microsoft’s .NET platform can work great for customers who prefer Microsoft products and Ruby may be a desirable option for some customers too. As with all technology choices, server platforms must be selected based on customer requirements. Small customers appreciate rapid, low cost development while larger customers will want more robust solutions while being less price sensitive.