Enthusiastic Indies

Several times each month, someone gives me an idea for an app. Usually, it’s an app they would love to have, and so they assume there must be a market for it. These apps typically fall in niche markets. For example, I have been asked to write apps to help firefighters identify symbols on chemical trucks, to aid frequent travelers in finding radio stations matching their musical taste, or apps to help off-roaders find their way and map new trails. Each of these ideas are great, but none of them would ever generate enough money to pay for development. The problem is that developing good mobile applications typically requires a fair amount of time for any non-trivial problem. And, since most users will look for free apps instead of paying for them, there’s little income generated from an app. Of course, there are some apps that make a substantial sum of money. Well known games, for instance, can generate massive amounts of revenue for their developers – but this is an incredibly small percentage of the apps out there.

So how do all the niche market apps get out there? Often, they are done by a devoted indie developer who is passionate about solving some problem. So, they develop an app. They may spend months learning how to write an app, or they may be a programmer writing an app for one of their own hobbies. Either way, they spend countless hours writing software that will likely never generate enough money to even pay for the electricity they used to write the app.  These developers are really an unsung hero of the tech age. Developers writing code for hobby projects create not only apps we use on our phones, but also countless free applications we use online, or on our desktop machines.

It’s amazing to me the amount of free software and applications that we have available to us because of passionate indie developers out there writing code for free. Few other professions give so much back to the community!

The Cryptocurrency Elephant

For the last 6+ months, cryptocurrencies have been the news over and over again. Ranging from the highs of Bitcoin at the end of last year through hacking of cryptocurrencies during the last week; cryptocurrency news has been everywhere. But with all the buzz about cryptocurrencies, the elephant in the room seems to be completely ignored: the huge waste of energy.

During the last several decades, there have been growing concerns about climate change, global warming, green technologies, etc. Al Gore insisted that we lower our green house gasses (ironically while traveling around the world in a private jet creating more green house gasses in a year than many of us will in our lifetime). Car companies want us to use electric cars to lesson our usage of fossil fuels. Wind and solar farms are showing up all over the place to decrease the nation’s carbon footprint. We’re asked to heat our houses to 66 at night and cool them to 75 or 80 in the summer. Turn lights off when not in use, ride a bike to work, shut off your computer when not in use, don’t idle your car in the winter to warm it up, on and on the list goes. But that’s not enough – the environmentalists say – we need to stop using all the earth’s natural resources on cell phone components, batteries, etc. Use rechargeable batteries, recycle your cell phones, don’t throw computers in the trash because they contain hazardous parts.

Then, cryptocurrency hits the market. No longer do we care about energy consumption. Cryptocurrency is intentionally designed to use as much power as possible – increase the difficulty of a block and the power consumption goes up. Mining generates huge amounts of heat, and then air handling systems need to be installed to keep machines cool. Cryptocurrency is both directly and indirectly causing global warming! To make matters worse, miners spend huge sums of money buying special chips (whether video chips or specialized ASIC chips) which require more mining to retrieve the necessary minerals. From an environmental perspective, cryptocurrency may be one of the biggest disasters of the 21st century. Yet, nobody wants to talk about it. A few years ago, it was suggested that I get rid of my Dodge Ram truck because it used too much gas. Now, the world is on fire for crypto mining.

Let me be clear, I think blockchain is an amazing technology. The potential is mind boggling. However, if it continues to grow like it currently is, how will we handle the energy requirements? How will we reduce green house gasses? How will we achieve any goals that involve using less energy when cryptocurrency is based on wasting energy? I think this is a problem the cryptocurrency community needs to resolve. The technology is great, but I doubt the global community is willing to sell out the entire planet for a few bitcoin.

I’d really love to hear thoughts from the blockchain community on how this can be resolved!

Angular is Awesome

Over the last six months, I have started doing a lot of Angular development. Initially, I was less than enthusiastic about the experience, but today it is probably my favorite technology. So, what makes Angular so great?

Angular provides a clean breakup of code, HTML, and CSS. Like MVC models for desktop or web applications, the Angular model ensures a clean separation of concerns allowing web designers to write HTML code while programmers handle the underlying logic.

Angular components are modular. I love this aspect of Angular development. I can create a cool widget in one application and easily use it in another application. This kind of modular approach reduces development times and allows for plug-and-play development of applications.

Angular applications run on the client side. As servers get more and more traffic, dealing with all the page requests can become burdensome for a web server. Running as much as possible on the client side not only improves user experience by improving speed, but also reduces load on your servers.

Angular applications use AJAX. This prevents full page reloads and just changes portions of the webpage based on user interaction. It looks slicker, feels better, and allows for all kinds of cool web experiences such as filtering and sorting data in a way that feels like a desktop application.

Angular applications easily consume REST services. This makes it easy to interact with countless services – whether homegrown or provided by a third party. Typically, REST services provide data in the form of JSON objects which need no manipulation to use in an Angular app. No parsing – just consume the data. It’s easy and convenient. Likewise, when sending data to JSON-based REST services, no translation is needed – just send the native JavaScript object to the server.

Angular can be used to create mobile applications. Ionic is a commonly used framework for creating hybrid mobile applications for both iOS and Android. Ionic provides an Angular framework as well as components to create awesome mobile applications.

Angular can use countless CSS frameworks. While not specific to Angular, I feel I would be negligent to not mention the amazing variety of CSS frameworks out there that can be used by Angular to create visually appealing web apps. Materialize CSS and Bootstrap are two of my favorites, but countless other libraries can be used allowing developers to create a beautiful experience for users.

If you’re not using Angular, you’re definitely missing out!

Successful Software Projects

Throughout my career as a software engineer, I have seen projects succeed while other projects failed. Some projects are delivered on time and under-budget, others are delivered late with costs substantially more than anticipated. What determines the success or failure of a project? Two simple things make all the difference in the world: requirements gathering and feedback.

During the early phase of a project, the requirements gathered will be used to determine a project’s timeline and the corresponding budget. However, rarely are initial requirements adequate to determine much more than a high-level understanding of the application. Often, things like user management requirements, reporting requirements, security requirements, and similar tasks are glossed over even though they are essential elements. Likewise, core pieces of functionality may not be well thought out by project management. A lack of consideration for all the permutations of options that may be present and how they impact each other or the application in general serve as an example of this. In an eagerness to get the project moving forward, holes are left that must be filled in later. Unfortunately, with such incomplete data it’s impossible to determine a budget or a timeline. Nonetheless, timelines are provided based on guesses that turn out later to be way off. As the deadline approaches, developers are forced to take shortcuts that create long-term problems. This can be resolved by spending a little extra time gathering requirements early so that the true scope of an application can be determined and more accurate timeframes can be provided.

The second key to a successful project is frequent feedback.  As a project progresses, it is imperative for managers, users, and other stakeholders to have visibility into the application so that they can verify functionality, critique the user experience, and provide other necessary feedback to ensure that development teams aren’t headed in the wrong direction. While requirements gathering goes a long way to ensuring that developers go down the right path, feedback throughout the process enable problems to be addressed quickly before substantial development effort is wasted. This kind of visibility has the added benefit of allowing management to see where a project is and to begin developing advertising material or documentation.

If you want your projects to be successful, put in a little extra effort upfront to provide adequate documentation and ensure that you provide feedback to development teams throughout the process. Not only will you appreciate the effort, but your developers will too!

 

Solidity

Recently, I was contacted by a company that does cryptocurrency to write smart contracts. I’ve never done this before, but I have no problem learning a new language – particularly for a blockchain technology. So what is a smart contract? Smart contracts are an amazing technology that allows you to run code on the blockchain.  Code is written in a language called Solidity, which is similar to Java or JavaScript. Once the code is written, it’s deployed to the blockchain where it can be called by others later. It’s similar to a cloud application, except the cloud is the blockchain instead. It’s always available because there are always machines mining cryptocurrency. Many sources are exclaiming how this kind of technology will change the world, and it’s easy to see why. The ability to write contracts in code that will later be triggered will be hugely impactful to banking, insurance, and countless other fields.

So what does Solidity code look line anyway? Here’s a simple Hello World app in solidity:

pragma solidity ^0.4.24;

contract HelloWorld {
    event log_string(bytes32 log);
    
    function() public {
        emit log_string("Hello World!");
    }
}

If you’re interested in learning more about Solidity, check out the MetaMask plugin for Chrome as well as the Remix IDE and find yourself a good online video for Solidity development. I feel confident that the future holds countless opportunities for developers who master this technology!

Technologies for Kids

I am often asked by parents what tools they can put in their children’s hands to get them learning technology. Here are some of my favorites:

Scratch: Scratch is a programming tool from MIT. It’s intended to teach young people the basics of programming. Everything is done by dragging and dropping code blocks into place to create games. Scratch is so easy that I’ve even used it to teach 4-6th graders how to make simple games. One of my favorite features of Scratch is that you can see the code behind others’ games and even ‘remix’ the game to make your own variant. You can find Scratch online at scratch.mit.edu.

Raspberry Pi: The Raspberry Pi is an amazing tool. A small computer roughly the size of a credit card, it’s cheap and fun to play with. More advanced tech students can learn Linux, Python, or interact with their own custom electronics hardware. A Raspberry Pi can be purchased from Amazon or countless other vendors. Excellent kits exist for less than $100 that include the Pi, a case, a beginners guide, power supply, and electronic parts to tinker with. This is an excellent kit for a tech nerd or electronics enthusiast.

Micro:Bit: The Micro:Bit is an amazing sub-$20 hardware board that is easy to program and fun to tinker with. This platform is one of my favorites because it’s easy to work with – including a simple graphical interface to program the chip.  Not only that, it’s the only platform I’ve worked with that didn’t require any special software or drivers to get up and running. The Micro:Bit includes lights, buttons, various sensors, and even a bluetooth radio. This is a must-have for young makers.

Arduino: The Arduino board has been around for some time now. Widely used in robotics and maker projects, it is quickly becoming ubiquitous. While it’s not as easy to work with as the Micro:Bit, it’s a more appropriate for bigger projects. Arduino boards are programmed with C++, which is heavily used in lower-level hardware projects. Not only are there a variety of different Arduino boards available, but there are also Arduino clones that add additional features. One such example is the Make:Block which aims to make things simpler by creating various components that integrate with a Make:Block board through a typical phone cable.

Learning any of the above will enable your child (or you) to both have fun and learn technology!

Minimum Viable Product

An important, but often ignored, concept in the realm of software development is the notion of Minimum Viable Product. Defining a Minimum Viable Product (or MVP) provides several benefits for software development teams and companies. First, let’s define Minimum Viable Product. The MVP is simply the absolute minimum requirements for a working product. For instance, if you’re writing a calculator application for a mobile device, the MVP would simply add, subtract, multiply, and divide numbers. It would not, however, need to perform more complicated functions such as square root, exponents, trig functions, averaging, etc. These features would be added to future versions if necessary.

What makes this idea so important?  When we define the Minimum Viable Product, we can easily accomplish several things. First, when we eliminate all the fluff, we can focus on core functionality and release a product quickly. This reduces time to market and increases revenue generation from the application. Second, creating a functional application more quickly allows decision makers within the organization to rapidly determine if the software meets the necessary requirements that the product was intended to solve. This ability for management to be involved earlier in the process ensures that development resources don’t end up heading down the wrong path. Third, deploying the MVP early ensures that customers and end users can interact and provide feedback early in the process when it’s far easier (and cheaper) to change direction instead of waiting for a months or years long process.

Unfortunately, many organizations insist that every feature is essential to the application which ensures long development cycles and dramatically longer time-to-market. Meanwhile, more agile teams are capturing marketshare before you.

When thinking of a new product, software application, tool, or mobile application, the first objective is to define the MVP so that you can quickly create a prototype, verify functionality, ensure essential functionality is present, and then get your software in the hands of users. Only then do you circle back for round two where you begin to add new features by starting with the most important tasks. This process will not only improve your marketshare, but it will also help ensure that the products and services being created actually bring value instead of spending years on software projects that bring no measurable value.

Technology and Community

Over the last two decades, technological advances have brought along with them unimaginable change to the way people interact with each other around the world. The advent of the internet and smart devices has created countless opportunities for creativity and innovation to flourish. From a global perspective, companies like Google, Alibaba, and Amazon have pushed the limits of how technology can simplify tasks and serve businesses and consumers alike, enabling people to accomplish more with less and saving people time and money. We can learn a great deal from analyzing why they have succeeded where others have failed.

In the same vein, immense opportunity exists when considering the potential of technological integration and innovation within our local businesses, organizations, and community. Nothing prevents me from coming up with ideas to help others and improve the world around me. Likewise, nothing prevents small businesses from grabbing on to these same ideas to grow and make a difference. After all, why should anyone work if not to positively impact those within their reach? We ought not go through the trouble of learning without the drive to put what we learn to use, because knowledge without application holds little value. The time has come for our community to capitalize on these advances and enable each other to succeed.

As you go about your work week, think about some of the areas that you are spending considerable time and/or money, sometimes with little or no return.  These are often the areas with the most potential to increase productivity and profitability.  How might technology be able to benefit your endeavors?  Asking the right questions is the first step towards a better tomorrow for our local businesses, organizations, and community.

Technology from the Arab World

As Americans, we tend to learn history from a very Eurocentric perspective. We study the ancient world, the middle ages, and then move through the history of Europe. We may briefly learn about Asia or Russia, but rarely do we dig deeper into non-European history, which is truly a shame. While our European ancestors were trudging through the Middle Ages, the Arab world was a flourishing haven of technology and science. In fact, some of their technology is still alive and well today. Three technologies in particular from the Arab world have greatly impacted modern society. While some may argue that these technologies were initiated earlier by the Greeks, they were certainly mastered by Arab scholars.

One of the most well-known technologies of the Arab world is algebra. While it may be hated by many students, algebra is without question the basis for all complex math. Without algebra, none of the technologies that exist today would have ever been created – it is truly among the most influential branches of mathematics in history.

A second technology, the astrolabe, also holds great significance. While most modern Americans are likely unfamiliar with the astrolabe, it is one of the most amazing computers of the ancient world. An astrolabe is a tool allowing the user to see a chart of the night sky. But it’s utility goes beyond that – you can use it to determine the angle to any star, the sunrise and sunset times, the current time based on star position, or for navigational purposes – among other uses. In fact, some scholars have indicated that you can use an astrolabe to solve over a thousand different problems. Today, astrolabes are usually only found in museums. But for hundreds of years, they were used for navigation, to better understand the night sky, and so much more. Without tools like the astrolabe, the age of exploration would have been far more difficult.

Cryptography serves as a third influential Arab technology. Indeed, basic cryptography has been known far back into the ancient world. The Muslims, however, took it to the next level. While Muslim scholars were copying the Koran, they were also paying attention to how many times each letter was used. This counting of letters ultimately led to cryptanalysis and even changed the course of European history.  Ever hear of Mary, Queen of the Scots? She was executed because of Arab codebreakers who were centuries ahead of European cryptographers.

While I could undoubtedly find countless other technologies from the Arab Golden Age, these technologies stand out above the rest. During a time of immense trial and despair for Europeans, Arabs were pulling world history into the next chapter through the efforts of their brightest minds! Though many will look in awe at the technology of today, I would urge others to take the time to look into the rich history of technology around the world. The technological innovations of the past often hold just as much excitement!

App Developer Woes

I started my company about 5 years ago by writing Android applications. It started out pretty simple by converting a simple website I wrote long ago into an application for ham radio calculations. That app went on to become one of the most popular ham radio applications on the Google Play store. Seeing how popular the app had become, I decided it would be smart to determine how I would monetize the application. And this is where things get difficult for app developers. As an Android user, I like to find free apps. And, like just about everyone else, I don’t particularly like ads. Ultimately, I made the choice to have a paid (ad free) version as well as an ad supported version. Let me be the first to say that I’m not getting rich from my apps. In fact, I make very little even with over 250,000 downloads across all my apps.

As an app developer, it’s very hard to find the time to make high-quality apps that you know you’ll never really see anything out of. If I spend 40 hours on an app, even if I only say my time is worth $10 / hour, it would take $400 just to break even. That can take literally years to generate in ad revenue. (I’m going to assume that – like the overwhelming majority of apps out there that mine isn’t going to all of a sudden become the most popular app in the play store.)  What’s even more challenging is when you have negative reviews attacking your free app or when users email you expecting you to provide hours of support for an app that – if you’re lucky – they may pay you $1 for.

I love writing apps, and I have a few more planned for later this year. However, I would encourage users to deliver feedback or requests with a constructive tone and appreciation, especially considering the circumstances surrounding many app developers. Remember, the majority of apps out there are developed by indie developers whose time is tied up with another job to provide income, so they are often unable to implement new features on the fly. Requests rooted in appreciation and a positive attitude make the world a better place for users and developers!