A Fly Fisherman Returns From the Wild to Develop in the Cloud
Bradley has been in the coding game since 1997 when he started bravenet.com, which he ran until 2003. The site featured simple pre-Facebook tools, such as guest books, message boards, and classified ads. At the height of success, Bravenet.com was the second largest website in Canada and 50th largest website in the world.
After selling the company, he left development for almost 20 years. Then, just before COVID, he stumbled across the release of an online Dungeon and Dragons platform. He approached the software author and agreed to be a commercial hosting service for his application. Outside of development, dice and hit points, Bradley fly fishes and plans to develop a mentorship website where developer newbies could learn from the old, talking about infrastructure design pitfalls and successes.
What follows is a highly classified interview with Bradley Knorr:
Question: What technologies did you use to build Bravenet.com?
Bradley Knorr: I developed the original website using Windows NT 3.51 IIS 1 and ASP. We quickly exceeded the capacity of that software and chose to move towards a Linux based solution. I cut my teeth in development with PHP, MySQL, and Apache. This combination far exceeded the capabilities of the window by a factor of 10.
Question: What development tools do you use now as a cloud developer?
In 20 years, the tools for development have changed dramatically, and I had to relearn new technologies quickly.
Question: What is your secret development weapon?
I would have to say the single biggest weapon at my disposal is the Lens IDE management tool for Kubernetes. It's a very well-thought-out and functional piece of software that gives you insight into a very complex world of orchestration and containers. Tailscale is another service I use that is a fantastic VPN that allows me to be on the same network as my cloud infrastructure, making my infrastructure very secure and easy to access the different administrative UI's for the other software packages I use.
And with all its third-party extensions, VS Code is probably one of the best development tools I've ever used. It is easy to use and actively supported. I have not had a single update that has broken the functionality or degraded its performance.
Question: What challenges does every cloud developer face?
The biggest challenges for me and many other developers is inconsistent documentation and support for open source projects. Most people can't afford enterprise applications and support while developing and doing proof of concept. Learning a new piece of software to make your proof of concept is the most challenging and most frustrating part of the development cycle.
The second biggest challenge in today's development world is ironically the many layers of abstraction designed to make life easier for the administrators and developers. The challenge here is that it can be tough to determine which abstraction layer is causing the issues when something goes wrong. In the open-source world, there can be a lot of finger-pointing to the different abstraction layer authors as to it being someone else's problem and not theirs.
Question: What's the thing that's most exciting about cloud development?
Today's most exciting parts of cloud development are the wide breadth of open source projects available to solve just about any challenge you have. Also exciting is that I don't have to maintain an entire equipment data center with a considerable capital outlay and staffing costs. I can provide as much hardware as I require with a few buttons. These major cloud providers sit on massive backbones and give us the most significant access to the Internet.
When it comes to migrating from local development to production environments, I hear this issue a lot: "Hey, it worked on my machine - It’s not my problem if it doesn't work on the production server."
Working in development and then deploying to production is a challenge. There are many ways to simulate production on home computers or simple VMs, but in the end, you will always need to do your testing on the exact same production equipment and environment. The only solution I could come up with was to provision identical hardware and software in the cloud—one for production and one for staging. I did the development and initial testing on simple VMs, which can get expensive for large projects, but with cloud providers, you can spin up as little or as much hardware as you need for as long as you need. With a little bit of effort, you can manage the costs.
Question: What is your biggest success?
I created a hosting service for the application called foundry VTT. The website is foundryserver.com, and I host people's games that play Dungeons and Dragons. I have not worked for other people, just for myself.
Question: What is your worst failure?
The worst mistake I ever made was the one after the launch of the website I accidentally deleted 100 paying customers' game data and billing information. I have to admit, once I found out what I did, my heart sunk, and I almost threw in the towel. I was so embarrassed, but everybody understood. Then they happily recreated their accounts, and some of them are still with me three years later.
Question: What should every cloud developer know when it comes to development?
Before coding, make a plan that can be as simple as a network diagram or as complex as multi-page flowcharts and Venn Diagrams. Whatever it takes, try to solve your challenges on paper first before you buy expensive hardware and spend many hours only to find out the abstraction layer you chose does not support the functionality you need.
The biggest hurdle and challenge will be by far your persistent storage solution. These can be simple or complex depending on your performance and the redundancy you need. Most new developers will turn to NFS as a storage solution, which will work great for a while. After that, you will run into performance issues and start looking elsewhere for something that will work. The challenges of doing it this way mean you most likely have to massage your terabytes of data into a clustered file system and will mean significant downtime while you make this transition. My advice would be to research and decide on a clustered file system upfront and avoid NFS as a starting point. A clustered file system is the one place where a startup may have to spend money they don't want to; however, it will pay its dividends later on.
Question: What mistake should every cloud developer avoid?
The mistakes always come down to a lack of foresight and planning. For example, let's say we choose Docker Swarm as our orchestrator. Then we realized that we need geographically distributed machines and found out that Docker Swarm will not work well over a VPN tunnel between two other data centers due to latency. While using something like Kubernetes with enterprise-grade mesh system service can be accomplished quickly. However, the time to refactor and re-engineer your infrastructure to move from Docker Swarm to Kubernetes will be significant.
If you're a cloud developer/pro with a cool success story to tell, I'd love to interview you. Please contact me at email@example.com