Hello and thank you for joining us for today’s episode of Async Weekly! This is a standard chat I, your host William Holt and a UI Engineer Lead at Tonic, lead for our various disciplines, prompting discussions on relevant topics to our team in a way that’s unobtrusive for their day. (Hence the Async nature.)
This week, Tonic’s engineering team dive into the pros and cons of evaluating a tech stack for a client. What should be considered? At what point do we take account of new technology available, and when should it be considered viable for a real world product? Let’s see what our experts have to say!
Have a question our experts should discuss? Drop us a line!
First off, there is a difference between inheriting a project with its existing tech stack and obtaining the mystical Greenfield projects where we bring the stack with us and intro to the client. Which avenue?
Great clarification — As Tonic does both, we can discuss both, and throughout all applicable platforms and mediums. One involves evaluating our own team’s skill sets while the other regards how we fit into an existing stack.
There are instances of us bringing the frameworks and coding languages with us, relying on our current skills, but there is also the world where we are diving into a newer tech, Vue in that instance. What are the deciding factors on what is used, and why/when building a product?
A few things I look at from a mobile perspective — For Greenfield projects, is there a need for both iOS + Android? If so, what kind of architectural alignment can we do between the two platforms to ease development? Not just talking about feature parity, but actual architectural decisions. With Swift and Kotlin being very similar in many ways (and also different in others), it’s nice if devs can switch code bases and understand what is going on.
Are there any shared libraries between the platforms? What about the backend? Can it work for both?
As for new projects, I try to push for the direction Apple is pushing us. Mostly because I know Apple will build and enhance tools around that new technology, but also impose requirements for apps to adopt in the future in order to be in the App Store (this is a whole different discussion about what Apple should and shouldn’t do here — tune in to a future Asyc for app store requirements and regulations).
For existing projects, we’ll look at users. That’ll be the big driver for decisions moving forward. What devices are they using? What operating systems? Are there any dependencies in our stack that will affect decisions? What is the development and business cost if we keep legacy users around?
And things to consider when evaluating tech stack for clients —
For web in general, JS framework discussions can get a bit intense and silly, to put it mildly. However, factors I like to think about are —
All great perspectives to take and bring to a client conversation. Let’s say, a client is using a tech stack that has a technology that is unmaintained or otherwise no longer fit for use, how do we handle that conversation? For instance, we can argue not to use Express for several reasons, but mainly that it hasn’t been updated in 6 years. There are also still lots of companies relying on AngularJS. And I’m sure there are similar instances of dated tech in the mobile space.
...is there a need for both iOS + Android? If so, what kind of architectural alignment can we do between the two platforms to ease development?
Dusty Fields
There is a gulf between React/Vue/etc and Angular in a lot of respects on satisfaction and interest. Some developers and companies rely only on sprints and new features, not touching the underlying spaghetti since it was first laid down. That overhaul often is a lot of time and money, but can really harm the success of a product in the long run.
Right when I got into development in 2015, there were all these competing techs coming out and it was truly a fight for the top with some of the tech falling into the abyss. I wonder if React is big and popular enough that it could be around for the long haul?
A lot of company’s use React in their own web applications, so I think it’s got long legs. It’s also a framework that keeps evolving to get itself out of the way of vanilla JS features so it’s far more re-usable from a skill set.
I like using React, and with the recent hooks and other behaviors they continue to encourage less code and simpler state management which means less dev time. Also, it’s easy to export with Preact which results in crazy small compiled code that’s like 1/10th the size of an Angular app or less doing the same thing.
Every Twitter JS framework convo will have at least one Vue stan parachuting in with sparklers talking it up.
I’d say it looks perfectly fine and feels like a good framework overall. But it still has lower exposure, a much less mature ecosystem, and doesn’t have as large or well-funded of maintainers, so I can’t say for sure how its support or user-base will look in, say, 3 years. Especially since Svelte is apparently the new darling (there’s always a new darling). AKA: I’d use it and probably enjoy it. I’d probably propose React over it by default unless I saw more adoption/maturation. 
Vue is basically React with some syntactic sugar. I think Angular is really the JS framework that stands out as really different than all the others.
At some point we need to know for clients if they will be supporting the product in the future or if they will never have a dev team. I think that can dictate a lot in what technology we use.
Regarding mobile, it’s worth noting where the market share lies. I think anytime we’re thinking of making an application for just one operating system we should ask ourselves why. Especially since the income and racial disparity between iOS and Android adoption means those left without app access are often the same folks left behind by other market decisions that tend to skew demographically.
A great point and absolutely agree. That’s where having as much parity as possible between the platforms can help with the development process (knowing there are some differences between the platforms that will have deltas).
...For mobile, there are quite a few options for cross-platform development. Where the audience is and what platforms they utilize is huge in evaluating tech stacks.
John McKillip, Principal Software Engineer
Well that feeds directly into a question I had, what are your thoughts on hybrid tools like React Native or Ionic? Some frameworks are great for one use case, but I can certainly see the limitations of a fully fledged app with only certain code partnerships.
Hybrid tools and native solutions both have advantages and disadvantages. When validating a hybrid tool, it’s important to ensure that it can successfully fulfill the clients’ needs. Some tools are more powerful and better supported than others. React Native is probably the best cross platform tool while Flutter and Ionic have less support. But there is a time and a place for each tool.
Native development will give you the best development experience because you are closer to the system (Swift on iOS and Kotlin/Java on Android). But you do need two code bases and two devs for one project.
You can still achieve high quality apps and features with cross platform solutions with careful planning and good experience.
I’ll politely disagree. Yes, there’s always a need for native-level dev and tinkering in a percentage of more advanced application’s behaviors. But an application written 100% in native is going to require twice as many devs and at least twice-as-many person-hours to develop.
Unless, again, you’re going only iOS. At which point, you have to again address the fact that you’re writing an application that will have a much narrower market, and one skewed to certain demographics.
That’s a great point. My situation where I had to rewrite the React Native app, they had to hire two devs instead of one dev. It always gets back to the wants and needs of a client.
So this is diving into the intent of the application and the organization behind that app. Which is absolutely a valid concern and plays into how we evaluate tech stacks.
I mean, I’d rather make products that don’t exist for in-app purchases, frankly. Because those apps probably aren’t making a difference for the world, they’re making a difference for startup CEOs.
Which, I guess as William is saying, plays into how app intent may drive tech decisions.
Exactly. And how our decisions and conversations with clients needs to take these things into consideration.
I like what Kyle is pointing out. And it makes me wonder about the social aspects here. Money is a huge driver and are users being left behind because of it?
Yeah, there’s plenty of evidence how decisions like this shut out the majority of potential consumers. There’s trade-offs. I think the exact amount is going to vary a lot depending on what features you’re looking for. A home solar power tracking app isn’t probably going to need a lot of advanced native features, for example.
You can easily build cross-platform mobile apps with Xamarin, which is .NET. A single code base for any device makes a lot of sense to me. For mobile, there are quite a few options for cross-platform development. Where the audience is and what platforms they utilize is huge in evaluating tech stacks.
Discoverability for apps once they are created is also crucial in this evaluation. Right now there is a huge problem in the iOS App Store. It is hard to find good apps made by independent devs. Some of those apps do rise to the top organically, but Apple also has a bias where they feature apps that adopt the newest features first like widgets and app clips. Getting featured by Apple is a huge deal for new/independent devs. So they’ll rush to adopt these new features (debatable whether these apps need these new features or if users adopt them). Again, this circles back to making money and intent. I think a lot of that falls on Apple and how they curate the app store.
Another factor for consideration is our company and its desired client list and culture fit that kind of development mindset. Having a discoverable product is one thing, but making sure we are aligned on tech and missions is another conversation.
Thank you again for joining us for this week’s Async Weekly chat! We hope this was helpful to see how our team approaches tech stack evaluation and the many factors that can go into it. If you have any topics you’d like for our team to tackle, please send them our way!
We'd love to see how we can make an impact for you. Let us know what you're working on.