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!

I Need an App!

Increasingly, organizations desire an app of their own. For many businesses, this can be a source of increased visibility for their organization or even a channel to generate more revenue. A great example is apps by large and small businesses alike allowing users to order and pay for food and then stop by to pick it up. The business gains increased visibility with their corporate logo on the user’s phone, while the user gains an improved user experience… everyone wins.

Conversely, many organizations create an app just so they can advertise that they have one. They want the increased visibility for their brand, and they imagine a benefit for the user that causes them to create the app. However, does the user truly benefit, or does the business instead create a failed attempt at trying to seem relevant? I’ve seen some apps for businesses that aren’t worth downloading as they provide no tangible benefit. Rather than enhancing the company’s relevance, the app creates a cheap or cheesy brand image. Sadly, organizations can also appear lacking in technical know-how and damage their brand.

We’re here to help! If your organization is looking to create an app, be sure to identify a tangible benefit to the user. Give the user a compelling reason to keep the app installed on their phone. Convince them not to uninstall the app or give a poor recommendation to their friends. Be careful not to create an app just to say you have one. Instead, determine – first and foremost –  how it adds tangible value for the user. After all, the end-user doesn’t care how the app improves your brand or your revenue. They simply installed it on their phone so it could benefit them!

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!

Ads on the Moon?

Moon

When I was a child, I had the same dream as every other child in my generation – the dream of being an astronaut! Indeed, since the dawn of time man has been fascinated with space. The calendar month is based on the moon’s time to circle the earth; ancient religions included the moon, sun, and planets as gods; and even modern radio enthusiasts use the moon as a natural satellite for communicating with people on the opposite side of the planet. Among the earliest of movies ever made was A Trip to the Moon (1902) by Georges MélièsThroughout the centuries, man has been captivated by the beauty of the moon, the stars, and of everything else visible in the night sky.  The night sky has been an inspiration for art, music, poetry, folklore, religion, and just about every other realm of the human experience.

Yesterday, as I was reading the current issue of MIT Technology Review, I came across an article that mentioned putting ads on the moon. Now, I must start by saying that the article didn’t provide any details, but I was disgusted to see such a thing suggested. Imagine a future where lasers are used to project the Nike swoosh onto the moon or the Amazon logo is proudly displayed. Is the moon really nothing but a billboard for corporate use?

Of course, the problem of technology and nature is nothing new. For years there have been battles between people wanting wind farms and nearby landowners who don’t want their view polluted by turbines. Roads, water turbines, railroad tracks, oil pipelines, and countless other technologies threaten the natural beauty of the world we live in. Questions of who owns the land, waterways, and underground resources such as oil and coal are a big deal in the legal realm of land management. Is the moon the next frontier for such legal battles?

Who has the right to deprive mankind of our brightest muse? Are we really willing to destroy the beauty of the moon for a few dollars? I’m a capitalist, but some things are priceless and shouldn’t be destroyed for a quick buck. For me, the moon is one such object. Looking at the night sky to see the moon displaying the Pepsi logo seems like a hellish future I hope we can avoid.

For the record, I may be able to support using the moon to display the bat signal, but don’t tell my daughter – she’s a Marvel fangirl.

The Best Job Ever

Early in my career as a software engineer, an executive of the company I worked for told me that “nobody wants to be a programmer, it’s just something you do to put food on the table.” That particular comment has stuck with me for years. I’m not an easily offended person, but that comment seemed to have an underlying attack on my value as a human being. It suggested that I was doing undesirable work and that I wasn’t capable of finding a real job. The irony is, I believe I have the best job in the world. Writing software pays well, it’s mentally challenging, and tremendous fun.

When we talk to young people about work, we often tell them to follow their dreams – but that’s a really bad idea.  After all, neither the mortgage company nor the grocery store accepts dreams as payment. Instead, better advice is to find the sweet spot in life. What is that? The sweet spot in life is where your skills, your desires, the market, and money all meet. It’s the job you want to do, that has employment opportunities, and pays well enough to enjoy your life. For me, I absolutely love programming. It really is the best job ever. I found the sweet spot in my life, and I couldn’t be happier.

So, to that individual who said nobody want’s to be a programmer, you’re wrong. Very wrong. I wake up every morning and look forward to my job. I read about it in the evening. I code for fun. Writing software is my passion and I have never once been ashamed of what I do or thought of myself or my skills as undesirable.

Can you say the same about your job? Are you truly passionate about what you do? Did you manage to find that sweet spot in your life? I did and it has made all the difference!