In any trade, craftsmen tend to have their favorite tools or brands. Over time these preferences deepen and shift due to experience or ignorance. These preferences influence what tool they use to perform their work. The tools they choose and their skill in using them are some of the greatest factors in determining the cost, quality, and efficiency of their work.
The software field is no exception. There are a plethora of languages, frameworks, tools, and services that solve similar problems. Picking the right one is often a painful experience plagued with problems like these:
- Analysis Paralysis: you spend more time trying to find the right tool than doing the work.
- New Hotness: you keep jumping to new tools to find the best one rather than getting skilled with one.
- Everything looks like a nail: you have a favorite tool and try to solve every problem with it, for better or for worse.
Defining your software toolchain is a delicate balancing act and heavily depends on your values. At Induro, these are some values that drive our toolchain decisions:
- Learn Early: do just enough work to learn so we waste less and can make informed decisions earlier.
- Differentiating Factors: focus on solving the domain problem rather than re-solving development problems (logging, authentication, hosting, …).
- Appropriate Solutions: the cost and complexity of the solution are appropriate for where the client is at and its setup to scale with them.
These values have led us to prefer the following tools:
- Flutter: UI toolkit for developing beautiful, natively compiled, cross-platform mobile apps from a single codebase.
- Angular: JavaScript framework that provides the scaffolding for quickly building performant, live-streaming, web-based applications.
- Gatsby: static site generator that pulls data from multiple sources and produces a blazing-fast website.
- Firebase: cloud platform optimized for mobile and web that provides serverless hosting, authentication, databases, storage, functions, and much more.
- Google Cloud: cloud platform that provides serverless analytics databases, message queues, task scheduling, logging, IoT device management, and much more.
You might notice that most of these are Google products. That wasn’t intentional, but in our experience, Google consistently produces high-quality tools with a great development experience. They also have great synergy.
There has been a lot of research and trial and error that went into each of these choices. Rather than bore you with the details of the journey, here are some of the benefits of our toolchain:
- We can authenticate and authorize users with email or social logins with very little code.
- We can build mobile apps for iOS and Android on a single code base with high reuse and great performance.
- We can securely create, read, update, and delete data without ever writing an API.
- We can stream data in real-time to client applications without managing web socket connections or subscriptions.
- We can create APIs without setting up or maintaining servers.
- We only pay for the compute time, memory, storage, and bandwidth that we use.
- We don’t have to reserve resources to handle sudden load.
- We don’t have to build out elaborate strategies or manually intervene to handle scale.
- We rarely have to maintain operating systems, networks, and software installs.
All of this allows a small team to have a big impact quickly.
—
We see too many projects where a startup is paying $250-$1,000 per month for their infrastructure before any client is using it. For context, we just built an IoT solution that costs less than $1 per month and will still be pretty cheap at scale. This website that you are reading this blog post on costs us $0.07 per month on average.
So if you are a development shop, then I encourage you to define your values and find a toolchain that helps you achieve them. If you are looking to build your dream product, then let us help you get it to market quickly with a strong foundation for the future.
Erik Murphy
Erik is an agile software developer in Charlotte, NC. He enjoys working full-stack (CSS, JS, C#, SQL) as each layer presents new challenges. His experience involves a variety of applications ranging from developing brochure sites to high-performance streaming applications. He has worked in many domains including military, healthcare, finance, and energy.