Clutch spoke with Brandon Papworth, the Director of Web Development at Dom & Tom, about the comparison between leading cloud platforms Amazon Web Services [AWS] and Microsoft Azure – an important consideration for anyone looking to implement a Cloud service.
Please describe your organization.
Dom & Tom specializes in full app, web, and infrastructure development. We also offer user experience design and product discovery. Our company is an à la carte shop in which a client can pick anything that their company needs for developing a product, either in part or fully. We pick the best tool for the job, thus many of the platforms we develop end up being polyglot systems. In other words, they may be combinations of Python, PHP, Node.js, and other different languages, which ultimately create the best user experience for the client and offer the fastest development process possible. Dom & Tom has been around for over 5 years and we've been continuously growing.
What is your role and responsibilities?
I am the director of web development. I am in charge of both frontend and backend development, software engineering and APIs, DevOps, and infrastructure management. Our approach to the web development team is to show an inclination towards engineers that have a small amount of DevOps experience, enough to maintain their own staging servers and work with quality assurance ones. The job of our specific DevOps employees is to build and maintain a solid production infrastructure, as well as maintain automation systems. Our goal is to provide some overlap between each member of our team with the persons they're working with in order to eliminate barriers to communication. We sometimes need to put a resource on another task quickly, following the Agile build philosophy, which we use. I plan on covering some cloud systems and storage options in this interview, looking at solutions, which have helped us build awesome experiences for clients.
What are some typical challenges you face when implementing cloud and cloud storage solutions?
There was a recent problem involving a client that needed to move their application from a traditional hosting provider to the cloud. That particular application was writing large image assets to disk and generating a lot of traffic, causing the client to run out of space on their server after a couple of months. We advised the client to move to Amazon Web Services, which offers an elastic storage solution. We could use what is called blob storage, essentially requesting to store a file and paying just for the storage, which is actually used and suitable for the traffic we generate. As long as the credit card remains active, we can keep storing things. It has been a far better experience for our clients and their customers.
With the hosting service, the client's app would break due to its inability to access files or upload new ones. AWS has guaranteed a proper user experience for everyone involved and has given us room to breathe. This particular project was quite substantial. We had to actually audit the client's code base, working with the original developers, and figure out how files were being stored. Then we had to make a full migration to AWS.
Are there other instances that come to mind in which a client required a cloud solution but did not have experience using one beforehand?
A large global auditing firm became the client of one of our clients, engaging in a performance review project for their employees. This large auditing firm wanted to use our product. They had very strict requirements in terms of how data was supposed to be stored and how server processes were maintained. They weren't familiar with using the infrastructure, which we favor, which is built upon Docker containers through which we spread our processes across AWS. The client was very interested in the process, but their legal documentation did not properly define what we were using. Their immediate reaction was to refuse our proposal, but I was able to convince them that AWS was a more secure solution, more in-line with what they wanted.
Are there projects you've worked on that required very specific or highly sophisticated cloud implementation strategies?
We deal with many third-party services like payment providers and so on. We recently started working with some companies, which either deal with the medical industry or are just starting to do so. They have to interface with some strange electronics management services. Neither one of these platforms is good, but they're established pieces of software which can't be avoided. We've had to manage to interface with some of these systems, and each comes up short somehow. For example, when trying to get someone's prescription history, the API will only return the most recent entry to the file for some reason. We've had to build a solution using a kind of message queue and a caching layer that would constantly hit this service and collect a cache of the information. When we queried and logged that information, we could intercept requests from our own applications and check for missing information. The data that goes forward and back needed to be massaged, in a manner of speaking. We have used this approach in many situations when dealing with third-parties.
We write API gateway bridges, small processes, which handle the data negotiation going out to the service we're targeting and return data to our application, running separate of anything else. It's a micro-service we've loved using and we've come to do this to handle the failure of external services much more gracefully, as well as ensuring that we receive homogenous data. If the API suffers changes, we can simply update that micro-service and not have to go through 25 code bases, updating each one.
Have you encountered any key differentiators that have persuaded you to select one particular service over another?
The most attractive aspect of cloud providers is their packaged services. A client doesn't have to install MySQL on a server, they instead get something which works like MySQL. They can plug into it by clicking a button. Even regular Microsoft SQL servers are available at the click of a button. Similarly, caching systems which work like Redis caches are readily available. These are all attractive prospects, but the underlying issue about them is that they lead to platform buy-ins. If the client becomes accustomed to using those services and they suddenly need to migrate to another platform, they end up needing to rewrite significant parts of their code base, which was written to work with a proprietary platform owned by a company.
The warning I could give to someone is for them to consider what would be best for their application, or use services and programs which they can install on a server themselves. If an application simply runs on a server, any cloud provider can accommodate it, so this will offer the most flexibility. I am not encouraging anyone to ignore what the cloud providers offer; some of the services are fantastic, but they should be approached critically in order to avoid being locked-in.
What are some key differentiators that might encourage you to consider a cloud solution?
Cost savings are an important part. Unfortunately, cloud services cost a significant amount of money and all of them level-off to pretty much the same price. The differentiator could become each platform's ability to integrate with third-party tools. There are many solutions that allow users to automatically provision servers, deploy them, destroy them, get access to internet testing interfaces, and so on. These are only compatible with some of the providers. AWS has the most variety of services behind it in terms of integration. This is a reason for its attractiveness. As companies are growing and want to reach different markets, they will want to use more tools to reach different markets. The tool developed by Dom & Tom is one such example. We are looking to make it work with as many cloud providers as possible because, at the end of the day, they all offer server space. The difference is in how easy that space can be used.
Could you compare the pros and cons between AWS and Microsoft Azure?
Microsoft Azure is a very pretty service and satisfying to use from an interface standpoint. When initially starting servers or deploying parts of the infrastructure, the experience is incredibly attractive. This creates a sense of confidence in the service and in the fact that a server is actually functional and performing well. Microsoft Azure automatically includes a dashboard when a user logs into the service. They show what software is running in the system, as well as performance and traffic reports. The user is at their command center; users know what's going on and they feel empowered and confident.
AWS also offers these types of analytics, but it requires digging through menus. It has a more utilitarian feeling; it feels like an engineering tool, which performs a job. It's incredibly confusing to navigate and requires a lot of effort, whereas, in Azure, usability is key. However, Azure simplifies some processes such as setting up data redundancy, making it easier to protect against mechanical failures and natural disasters. The user is given a cost and they're done in a few clicks. AWS requires many more clicks and comprehensive documentation.
For less sophisticated clients who fear their data being at risk, would you consider Microsoft Azure to be a better solution than AWS?
Is there a specific type of client or industry vertical that would be more likely to benefit from a cloud solution like these?
It doesn't matter very much. How a solution is built is more important. We develop many of our projects using PHP, which has some negative clout around it, given that it's an old language, it's slow and so on. Facebook built their platform using PHP, and they have billions of users. The reason for their success was the fact that their developers knew how to build their application. Good developers are more important than writing in a newer language. We often try approaches and solutions in which we're not very strong at Dom & Tom, but we're fully confident that we will be able to deliver at or above the goal point set by our client in those cases.
Would you recommend a partnered team from the selected cloud solution provider itself or a 3rd party implementation partner?
The way of properly vetting the options would be to ask what systems the developer had built in the past, specifically, ones that needed scaling-up in order to handle more users. The best answer that a vendor can give is to say that they made these considerations from the beginning and they made efforts to handle scaling with minimal alterations. It may not be practical to do this from the start, but there are many things which can be done to handle a task. It makes a big difference when the client needs to handle a few more thousand users and they are able to achieve this without rewriting half of their code base. This makes it easier to combine multiple services together. There is no way to write a scalable application using only one language. Some languages have strengths over others and they can handle different scenarios. When they are put together, they can lead to a beautiful combination.
Are there any factors that a client should take into consideration before finalizing their selection?
The way to find out what solution would be best would be to ask how documentation is handled. Is the code documented immediately through a simple process or is it done afterward? The answer to look for is "during the process and also before". Some documentation is done before the actual code, which is a good way of keeping focused. Another question to ask would be whether the client performs integration and regression testing? Do they use continuous integration in delivery tools that run tests automatically during code base pushes? There are strategies and methodologies for maintaining multiple people altering a code base through version control. Simply using Git isn't enough. What matters is how it's used. There are many ways of answering this question, but the bad answer is to say "we simply use Git". That is a big red flag in terms of future scalability.
Are there services that haven't performed to your expectations or are there tools you'd like to see implemented within AWS or Microsoft Azure?
Cook books or recipes would be an improvement. One suggestion would be to start a WordPress blog. Instead of having a one-click WordPress install, services should actually show users how they connect everything together. It would be an almost automated installation, which also showed a tutorial and best-practice explanations. Instead of a WordPress logo, AWS would start an instance of MySQL or PHP, provisioning the database. It would then start up a load balancer and point it at WordPress. The user's VMs would then be pointed to the load balancer. Seeing every step of the process would be fantastic because many of the behind-the-scenes actions can be very confusing until they're put together in front of someone. After seeing something like this a couple of times, it will become intuitive and the platform will be utilized more efficiently. AWS or Azure will end up making a lot more money because their services would be used more because they would be easier to use. The barrier for entry at the moment is a bit too high. People don't use the platforms at their full potential as a result.
Is under-utilization or miss-utilization something that is prevalent in the industry?
Yes. The gap between doing the work right and not doing it right is very big, and bridging it can be daunting.
Is the responsibility for bridging that gap on the shoulders of the buyer, or should service providers walk their clients through the process?
It's a shared responsibility. Most people who invest in these services are already curious and are trying to find solutions on their own. The internet is a great archive of information, and obsolete information has caused much confusion. People will read an article from eight years ago and think that things still work in the same way. Help from a cloud provider is a huge issue as they are the single source of truth. AWS built their system and know it better than anyone else. Good support would build a better relationship and trust between client and provider, making the gap not as hard to jump. The provider can't completely walk the client through it; niche consulting services have been able to fill this gap, but there's definitely ground that can be covered by providers.