{"id":33193,"date":"2017-09-07T13:00:57","date_gmt":"2017-09-07T20:00:57","guid":{"rendered":"https:\/\/blog.xamarin.com\/?p=33193"},"modified":"2017-09-07T13:00:57","modified_gmt":"2017-09-07T20:00:57","slug":"digitally-imported-delivers-10-music-streaming-apps-millions-fans-globally","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/xamarin\/digitally-imported-delivers-10-music-streaming-apps-millions-fans-globally\/","title":{"rendered":"Digitally Imported Delivers 10 Music Streaming Apps to Millions of Fans Globally"},"content":{"rendered":"<p>\t\t\t\tOne of the first music streaming services and the #1 radio network for electronic music fans, <a href=\"https:\/\/www.di.fm\/\" target=\"_blank\">Digitally Imported<\/a>\u2019s laser focus on UX and mobile quality helps them retain their competitive edge and keep users coming back for more. The team has grown from one developer and one app to a global team supporting five (near five-star) music genre apps, available on <a href=\"https:\/\/play.google.com\/store\/apps\/dev?id=7961242804719675600&amp;hl=en\" target=\"_blank\">Android<\/a> and <a href=\"https:\/\/itunes.apple.com\/za\/developer\/digitally-imported-inc\/id375242620\" target=\"_blank\">iOS<\/a>, and millions of users.<\/p>\n<p>Today, we\u2019ve invited Jo Friedman, DI\u2019s VP Product Development, and Andrew Simpson, DI Mobile Architect, to share how their technology choices and mobile DevOps processes, including Visual Studio for Mac, Xamarin Test Cloud, and HockeyApp, free their extremely distributed team to collaborate, hand off work, ensure high quality with every commit, and release updates every two weeks.<\/p>\n<h3>Tell us about your company and your roles.<\/h3>\n<p><strong>[Jo Friedman (JF)]<\/strong>: Digitally Imported creates 100% human-curated radio experiences, and our flagship product DI.FM has streamed electronic music to fans since 1999. In addition to DI.FM\u2019s 90+ unique electronic music channels, as a company, we\u2019ve expanded to even more music genres, and now offer five different streaming services (Rock, Jazz, etc.).<img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/44\/2019\/03\/Picture3.png\" alt=\"Digitally Imported on iPhone\" width=\"200\" class=\"alignright size-full wp-image-33203\" \/><\/p>\n<p>Our customers are music lovers who want to listen to the newest, best music in a \u201clean-back\u201d radio experience. To make this possible, our staff and volunteer music enthusiasts (spread across the globe) sort through and select content submissions, so we play only the best music on each channel.<\/p>\n<p>As DI\u2019s VP Product Development, I manage and prioritize our development, UX, and QA teams for all of our web and mobile services, and I\u2019m constantly identifying ways to enhance the listening experience and roll out new exciting features to our listeners.<\/p>\n<p><strong>[Andrew Simpson (AS)]<\/strong>: I\u2019m a Mobile Architect, and my main role includes helping create technical requirements and implementation specs for new features, sharing and ensuring we uphold development best practices, and developing our apps alongside the rest of the team. We\u2019re a small, fully remote team, split across eight time zones and ten countries, and we\u2019re always improving our multiple apps: adding great new features that our users want or fixing any bugs.<\/p>\n<p><strong>[JF]<\/strong>: While I\u2019m not a developer myself, I\u2019ve worked on product management, user experience and product development teams for my entire professional career (20 years!), creating and bringing mobile apps to market since the earliest \u201csmart devices\u201d in 2000 (Palm Pilots, then pocket PC\u2019s and J2ME or BREW devices, years before the iPhone).<\/p>\n<p><strong>[AS]<\/strong>: I\u2019ve developed software professionally for over seven years. I instantly fell in love with programing in high school, and, after getting my Bachelor of Computing Honors degree, I joined a boutique app agency. I learned mobile development for BlackBerry OS 3.x (which was the \u201csmartphone\u201d at the time), and clients were soon requesting iOS and Android apps. It was a fairly small company, so I had to learn to develop native apps for each platform: a fantastic and challenging experience.<\/p>\n<h3>Tell us about your apps and what prompted you to build them.<\/h3>\n<p><strong>[JS]<\/strong>: Our apps are all about enabling listeners to listen to the best music available in their preferred genre and style. We provide a very deep experience; I mentioned this before, but rather than offering everything and relying on users to find songs, our music is fully human-curated.<\/p>\n<p>Music listening and mobile go hand-in-hand. Today, somewhere around 60% of all music streaming is done from mobile (Spotify for Brands report, 2016). We\u2019ve seen a major shift over the last five years, with over 50% of our users currently experiencing DI for the first time via mobile. We have over nine million app downloads, and mobile accounts for a large percentage of our revenue.<\/p>\n<h3>Why did you choose Xamarin?<\/h3>\n<p><strong>[JF]<\/strong>: In 2015, it became clear that we needed to develop Android and iOS apps for all of our music services, and to do it quickly, but our team was almost entirely web and backend developers.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/44\/2019\/03\/Picture5.png\" alt=\"Digitally Imported on Android\" width=\"200\" class=\"alignleft size-full wp-image-33204\" \/>Our one (very talented) mobile developer suggested Xamarin, because it would make the most of our small resource pool and allow us to share as much code as possible across platforms. Today, we\u2019re actively developing five Android apps and five iOS apps with Xamarin, and we\u2019ve grown the team considerably.<\/p>\n<p><strong>[AS]<\/strong>: While I wasn\u2019t on the team, I started looking at Xamarin for this position, and immediately saw the appeal. I\u2019d always loved native development; having 100% control over what you can do with the app and device is great. Even though it takes a lot of extra, duplicative effort to ship apps for both platforms, I\u2019d found it worth it to get a great end product.<\/p>\n<p>Xamarin was an easy win to me: I knew Obj-C, Java, and C#, and Xamarin gave us access to native features, while code sharing reduced the effort. Between a single platform (Android or iOS), we\u2019ve architected our apps to be very similar, with only 10% of the \u201clook and feel\u201d code different across brands. But, Xamarin allows us to do something unique: share business logic across platforms. For reference, we currently share over 20,000 lines of code, or 40% of our total code for each platform, across all of our Android and iOS versions.<\/p>\n<h3>What does \u201cnative app\u201d mean to you?<\/h3>\n<p><strong>[AS]<\/strong>: An experience that tells you \u201cthis is a quality app,\u201d not a mobile styled website. As a developer, this means: (1) uses core platform features to the fullest extent (2) properly takes advantage of built-in hardware and operating system frameworks and (3) renders a UX with smooth animations and instant UI feedback.<\/p>\n<p>I used to think \u201cnative\u201d equaled writing from scratch for each platform. Xamarin surprised me: full access to underlying OS features, just as if you were writing an Android app in Java. Every function and feature was there and ready to be used immediately.<\/p>\n<p>We integrate with things like Bluetooth and create efficient media systems, and our customers appreciate our high quality audio. Not only are our users happy with the performance, other developers are surprised to learn that our apps aren\u2019t \u201ctruly native\u201d (i.e. written from scratch for each platform in Obj-C and Java).<\/p>\n<h3>How did you get up to speed with cross-platform mobile development?<\/h3>\n<p><strong>[JF]<\/strong>: Most of our developers had some exposure to cross-platform mobile development before they joined the team, whether Xamarin or another platform. Regardless, getting up to speed has been very quick, and our new hires are typically productive within a few weeks.<\/p>\n<p>In an extreme case, a Mobile Architect candidate learned Xamarin in seven days! We had a one week break between his initial technical interview and his hands-on lab exercise, and he went from no experience to coding his lab with Xamarin&mdash;successfully earning him the job!<\/p>\n<p><strong>[AS]<\/strong> \u2026 I wonder who that could be\u2026 <\/p>\n<p>I have a history of learning new programming languages, starting with Java and C in University. I really cut my teeth on Java with BlackBerry; I still remember implementing String.Split() (it didn\u2019t exist in in the early versions of BlackBerry\u2019s Java). Around the same time, I learnt C#\/ASP.NET to build our apps\u2019 backend API services, and, from there, I taught myself Objective-C. I shipped my first professional iPhone app for iOS 3.1, and from there, I developed my first Android app (targeting Android Cupcake 2.3). I\u2019ve also written Windows 10 and Windows Phone apps with C# and XAML.<\/p>\n<h3>Describe your development process.<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/44\/2019\/03\/Picture7.png\" alt=\"Digitally Imported on Android 2\" width=\"200\" class=\"alignright size-full wp-image-33206\" \/><strong>[AS]<\/strong>: We have Mac and Windows users, based on personal preference, so we use <strong>Visual Studio Tools for Xamarin<\/strong> and <strong>Visual Studio for Mac<\/strong>. Architecting our codebase with Xamarin has helped increase code reuse and reduce duplicated effort.<\/p>\n<p>We automate as much as we can. Our developers pull bugs or feature requests from our \u201cinbox\u201d stack and work on a separate branch, and every line of code must pass a round of peer review and QA before being accepted into the master branch. Once a developer thinks an issue is fixed, or the new feature is working, the pull request triggers a code review with another member of the team, and the original developer either gets the greenlight to move to QA, or makes any requested changes and kicks off another round of code review.<\/p>\n<p>We\u2019ve set up <strong>Xamarin Test Cloud<\/strong> to augment our manual QA processes; each push kicks off unit tests and UI test suites. Xamarin Test Cloud runs through the \u201cimportant\u201d user behaviors and stories for every app, and testing the same steps on many different devices, capturing screenshots, and seeing stack traces adds peace of mind.<\/p>\n<p>At the same time, our CI server integrates with <strong>HockeyApp<\/strong> to build, upload, and distribute all five brands\u2019 apps builds to our QA team to for internal alpha\/beta testing on their devices.<\/p>\n<p>If all tests pass, QA manually reviews to ensure features meet the expected deliverables and no bugs were introduced. Once the change has passed code review, automated testing, and QA, we merge into master.<\/p>\n<p>After we\u2019ve accumulated a fair amount of changes, we double-check the branch, and ship to our users, usually once every two weeks.<\/p>\n<p>I\u2019ve played around with the Visual Studio Mobile Center Preview, and I\u2019m looking forward to having everything fully integrated.<\/p>\n<h3>How has Xamarin helped you get high quality experiences into your users\u2019 hands?<\/h3>\n<p><strong>[JF]<\/strong>: Xamarin helps us bring new features to market quickly. We\u2019ve structured our team with iOS and Android specialists, with one specialist leading development for a new feature on one platform. While new features are ready for one OS first, the second developer already has 75% of the development work complete and can quickly build for the other platform. This saves time and uses our team\u2019s resources efficiently, allowing us to deliver high quality experience to all of our users.<\/p>\n<h3>What have your users said about your apps?<\/h3>\n<p><strong>[JF]<\/strong>: Our listeners love our apps, particularly: our channel diversity, ease of streaming, and our intuitive features.<\/p>\n<p>We consistently get high ratings in both iTunes and Google Play, and this recent feedback summarizes what we hear fairly often:<\/p>\n<blockquote><p>\u201cPerfect, curated music from all electronic genres. I use this predominantly over all other services, as I can be sure whichever channel I choose, usually trance and deep house, the content will be a divine blend of new and old, and never hear any annoying repeats.\u201d<\/p>\n<p>Harry A., June 13, 2017<\/p><\/blockquote>\n<p><strong>[AS]<\/strong>: App quality is super important to us, and we pride ourselves on our highly rated apps (4.5+ stars). We always want our users who to have a great experience, and we work hard to make sure that we\u2019re producing high quality apps.<\/p>\n<h3>Have you accomplished your goals?<\/h3>\n<p><strong>[JF]<\/strong>: We\u2019ve built a quality listening experience: beautiful, usable web and mobile apps across five music genres. This is a great accomplishment, but we\u2019re always striving to meet new, bigger goals, from offering more music and new ways to listen to delivering better usability, performance and user experience.<\/p>\n<p>We have many, many things that we want to build to create the ultimate listening experience. This will involve a much bigger focus on personalization\u2026<\/p>\n<p><strong>[AS]<\/strong>: In addition to building new features, we\u2019re planning to do more public betas. Today, we have a few savvy, invested users who are hugely helpful in testing our pre-release versions and making sure we\u2019re ready for general release.<\/p>\n<h3>What advice do you have for mobile developers who are just starting out?<\/h3>\n<p><strong>[AS]<\/strong>: The problem isn\u2019t that there aren\u2019t enough good resources, there are far too many good resources! From free university lectures to endless documentation from Apple and Google\u2019s official websites to podcasts, free ebooks, and more. It\u2019s easy to get bogged down, and think you need to know it all before writing your first line of code.<\/p>\n<p>In my experience, being personally invested and interested in your project is the absolute best learning tool. From there, just try to build it. Obviously, when you\u2019re just getting started, limit yourself to something small and achievable, but nothing helps me learn faster than trying to make something work. When I get stuck, I can go look for specific answer, solve my problem, and keep coding.\n&nbsp;\n&nbsp;\n<i>Visit <a href=\"http:\/\/xamarin.com\/download\" target=\"_blank\"><em>xamarin.com\/download<\/em><\/a> to get started and explore <a href=\"http:\/\/xamarin.com\/customers\" target=\"_blank\"><em>xamarin.com\/customers<\/em><\/a> to get inspired.<\/i>\t\t<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the first music streaming services and the #1 radio network for electronic music fans, Digitally Imported\u2019s laser focus on UX and mobile quality helps them retain their competitive edge and keep users coming back for more. The team has grown from one developer and one app to a global team supporting five (near [&hellip;]<\/p>\n","protected":false},"author":564,"featured_media":33201,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2],"tags":[5,9,6,4],"class_list":["post-33193","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developers","tag-android","tag-case-studies","tag-ios","tag-xamarin-platform"],"acf":[],"blog_post_summary":"<p>One of the first music streaming services and the #1 radio network for electronic music fans, Digitally Imported\u2019s laser focus on UX and mobile quality helps them retain their competitive edge and keep users coming back for more. The team has grown from one developer and one app to a global team supporting five (near [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/posts\/33193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/users\/564"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/comments?post=33193"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/posts\/33193\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/media?parent=33193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/categories?post=33193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/xamarin\/wp-json\/wp\/v2\/tags?post=33193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}