[Editor’s note: This is part of a series of articles highlighting ArcTouch’s talented team members. Like many members of the maker movement, the app makers we spotlight here crave getting their hands on the latest tech or finding creative new ways to apply existing tech to their projects.]
Nathan Williams sits at what is fast becoming an important intersection: where mobile meets Microsoft. Like many veteran programmers in the tech industry, he’s steeped in experience using Microsoft .NET technologies, with the C# programming language as his foundation. But he’s also a principal at one of San Francisco’s leading mobile developers, ArcTouch.
Right at that intersection with Williams is Xamarin; in fact, Williams leads a team of ArcTouch developers focused specifically on Xamarin. Xamarin allows development teams to write once in C# and build multi-platform mobile apps — an efficient and cost-effective way to reach both Android and iOS users.
But, building successful apps in Xamarin isn’t just about knowing C#, Williams says. “There is much more to mobile development than simply knowing the appropriate language.”
We sat down recently with Williams to ask about his experiences using Xamarin, explore the concept of “native” cross-platform development, and get his view on how Xamarin has changed since the company was acquired by Microsoft in early 2016.
You build cross-platform apps for a living. But would you say you’re more of an iOS or an Android person?
My personal phone is an Android phone, and I’ve always been a fan of the Nexus and now Pixel line of phones. My Pixel XL is one of the best mobile devices that I’ve owned. However, I do also have an iPhone 7 that I use often for work. When developing in Xamarin, it helps to keep both devices handy for testing. I bought into the Android ecosystem early (including music, books, and pictures) and can’t see myself switching to Apple anytime soon.
What’s your favorite app?
Duolingo is one. I’m studying Japanese, and I use the app every day, multiple times a day. I’m impressed at the quality of content that they offer in their ad-supported tier. Google Assistant is another. I’ve really grown to rely on it surfacing relevant and important information to me in a timely manner.
When did you first start coding?
I can remember writing programs for the Apple IIe as a kid, and being fascinated by it. I didn’t get into serious programming until college though, when I was studying as an embedded engineer. There was something about the interface of software and hardware that I was really drawn to. I migrated to customer facing and enterprise software after college and then eventually to mobile development, which I feel is a great fit for me.
When did you start using Xamarin?
My first Xamarin project was at ArcTouch, about 4 years ago. At the time, I was working in Android, but from my enterprise and consumer software days, I had a very strong background in .NET and C# programming. So when the opportunity to use Xamarin came up, it was the perfect next step for me. I’ve been involved in Xamarin development at ArcTouch ever since.
Our first real app was Meeteor, an internal app we still use for managing the conference rooms at ArcTouch. Each conference room has a dedicated iPad affixed outside the door, and the app allows us to see the upcoming schedule and book the room right then if it’s free. The app also integrates with Google Calendar so that when the conference room is booked via email, it automatically syncs to the iPad to update the displayed schedule.
You’ve been building mobile apps in Xamarin for a long time. From a dev point of view, what do you like most about it?
The development environment is the biggest draw for me. C# is my preferred language, and in my opinion, it’s one of the best languages for application development because of its maturity and breadth of features. The Xamarin framework itself is also very robust, considering that it provides access to the full set of Android, iOS and Windows phone APIs. Xamarin also has a track record of adding support for newly released platform APIs within a day.
There’s a lot of debate about the term “native” and whether you can build truly native apps in Xamarin. What’s your take on that?
When it comes down to it, Xamarin apps use the same APIs as a traditional “native” app developed in Xcode or Android Studio. In that sense, Xamarin apps truly are native. The nuance, however, is that Xamarin apps are technically running in a .NET managed environment, where calls to the platform specific APIs must cross the boundary to the unmanaged side. This of course has implications for performance, code size, and memory management. But I don’t feel that this disqualifies Xamarin apps from being considered native. We like to use the term “indigenous” native to distinguish those apps that are written specifically for one platform using the intrinsic toolset.
In your view, how is Xamarin better/different than other cross platform mobile tools?
Putting aside arguments about preferred language or environment, Xamarin offers better performance and access to a broader range of platform functionality than does a hybrid solution such as Cordova. When it comes down to it, Cordova is running in a web environment, and that is fundamentally different than Xamarin.
It’s been over a year since the Microsoft acquisition of Xamarin. How has this changed things from a developer and market perspective?
Xamarin as a development environment has definitely become more open and accessible. Aside from the open sourcing of Xamarin.Forms and many of the Xamarin SDKs, the Visual Studio Community Edition (free tier) now includes Xamarin, and Xamarin University has greatly expanded the amount of available free content. I think this has gone a long way to lowering the barrier to entry for a lot of developers, and addressing many of the prior complaints about the Xamarin platform. Microsoft has helped cement Xamarin’s future in cross-platform development.
What’s the one thing you think that mobile developers don’t understand about Xamarin?
I think this comes back to the idea of whether Xamarin is native or not. Many iOS and Android-only developers lump-in Xamarin with hybrid solutions such as Cordova, and then they expect that it has the same performance and API limitations. But that’s a misconception.
One of the hardest decisions for cross-platform projects seems to be choosing to use the traditional Xamarin Platform (with Xamarin.iOS and Xamarin.Android) or using Xamarin.Forms? How do you make that decision for your projects?
This ultimately comes down to UX and UI. I personally love Xamarin.Forms and prefer it to the traditional Xamarin approach due to the ease of development and the increased code sharing. But of course it’s not applicable in all cases. App designs that rely heavily on platform specific interactions or that require high performance animations, such as games, simply are not a good fit. At ArcTouch, we push the boundaries beyond what Xamarin (conservatively, in my opinion) recommends for Xamarin.Forms and I believe we’ve been very successful. At some point however, the time and development cost is not worth the potential gain in code sharing and you’re better off using the traditional approach.
All technologies fail at times, especially when developers don’t fully understand how to implement them. Why do you think some Xamarin projects fail?
There’s a tendency to assume that because Xamarin is C# based, any seasoned C# developer can write a good Xamarin app, but that’s unfortunately not the case. There is much more to mobile development than simply knowing the appropriate language. A solid knowledge of mobile fundamentals, particularly user interaction paradigms specific to the platform, are a necessity. The opposite is true as well — .NET is its own beast, and making the transition to Xamarin from iOS or Android requires an in-depth understanding of the framework. ArcTouch is well positioned in having both expert Xamarin developers as well as very experienced iOS, Android and back-end engineers. We have a team in place that understands all sides of what it takes to make a Xamarin app successful.
One of the value props of Xamarin is that C# is already used by a lot of developers and enterprise teams that understand Microsoft development. How hard is it for a C# developer to learn mobile?
Understanding the mobile experience is key here. Having a solid background in C# is a good start, but to get the most out of your Xamarin investment you need to be Xamarin experts and iOS and Android experts. ArcTouch’s Xamarin services are a great complement to teams that have an existing .NET skill set and Microsoft infrastructure. We’re able to bring our Xamarin, iOS and Android expertise to ensure that our clients can deliver a successful mobile experience.