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!

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.