Many of our customers use their passion for .NET to build amazing employee and consumer-facing apps that power the “future of work.” These developers help entrepreneurs and team members eliminate pen-and-paper based systems, access information, and be productive from anywhere, with any connectivity.
HP, Inc. turns document capture, scanning, editing, and routing into an automated, one-click process, allowing users to customize workflows, integrate with their cloud storage provider of choice, and more. Today, we’ve invited Jeff Lee, Modern Capture Lead Software Architect, to share how his team reduced code complexity with Xamarin for Visual Studio, transitioned from one-platform specific Android app to .NET for all platforms (iOS and Windows), and delivers “world-class” apps to professionals everywhere.
Tell us a little bit about your company and role; have you always been a developer?
At HP Inc., we believe everyone can be a creator with the right intuitive, accessible technology, and that this technology should work for you and adapt to your needs, context, and environment. The Modern Capture team develops products that give users a customized, easy way to transition from physical documents to digital.
I started working on image capture software as a college intern, developing an X-Windows-based scanning app for HP-UX 300 Workstations. Since then, I’ve worked on HP Inc.’s ScanJet and multi-function device software imaging solutions and, in 2015, our business stakeholders kicked off an initiative to deliver advanced scanning capabilities across web and mobile platforms.
Currently, I’m a technical lead and architect for HP Inc.’s software solutions, and our team supports both desktop and mobile apps. The Modern Capture Team is primarily a group of experienced developers who use C++ and C# as their main development language, and Xamarin makes it easy to leverage our existing expertise to deliver native apps for Android and iOS. Our new college graduates have picked up Xamarin and .NET quickly, becoming highly productive early on.
Tell us about the app and what prompted you to build it.
HP JetAdvantage Capture is a scanning and capture workflow app that targets mobile professional customers, ranging from government agency clerks to leasing agents to banking customer service reps. We help them capture and route forms, invoices, statements, receipts, checks—any sort of document—and accomplish tasks such as collecting signatures, logging inspections, routing documents to case folders, onboarding customers, initiating claims, applying for permits, and providing approvals.
The app’s design center (see screenshot from our Windows 10 app) is focused on one-touch capture flows; we use customizable shortcuts and cloud services to provide a simple, fast, powerful, automatic, and secure user experience.
We’d previously built a version of HP JetAdvantage Capture for Android, using Java and Android Studio. Now, with our iOS and Windows 10 releases, our customers can complete their tried and true desktop capture tasks on their preferred mobile device, anytime, anywhere.
Why did you choose Xamarin for the project?
Our customers use an onslaught of new mobile platforms, beyond traditional PCs, and they expect to be able to accomplish the same tasks, including advanced document capture, on their device of choice. We delivered a simple document and photo scanning app for Windows 8.1 (HP Scan and Capture) desktop users, and, in early 2016, an advanced scanning and capture app for Android.
When our business stakeholders requested that we deliver the same advanced capture capabilities to our iOS and Windows mobile users, we had a choice: (1) continue to invest in separate development efforts and code bases for each platform or (2) find a way to use one unified effort and code base to deliver on all platforms.
We explored and evaluated web/cloud, code translation, platform-specific, and cross-platform technologies. We chose Xamarin for three reasons: high level of industry support, our team’s experience in Visual Studio and with the C/C++/C# programming language, and the ability to create and maintain one build process.
Coding once and releasing fully native apps on three platforms is extremely powerful, and we’re all looking forward to delivering more products using C#.
To me, to be a “native app,” it must look and feel like it belongs on each platform, and provide a true-to-platform experience. Using the MVVM pattern, we separated platform-specific UI code from the common model and view model code. We opted to use Xamarin.Android and Xamarin.iOS (versus Xamarin.Forms), giving us maximum control over the user experience, and used MVVM to minimize the amount of business logic at this layer.
We had in-house experience with .NET and Visual Studio, and we used a mix of educational resources, including: Xamarin University classes, Xamarin Forums, and cross-platform collaboration with other internal teams. We also had a weeklong on-site Xamarin training workshop that got the team up to speed. Since then, we’ve continued to research online, and take Xamarin University courses to learn new and advanced skills.
How long did it take to ship your app, from design to deploy?
We had a lot of technical know-how barriers to overcome with this project: integration with a unique scanner, Wi-Fi Direct implementation, online/offline conditions, integration and synchronization with our cloud services, learning Mac, determining the best project structure, localization, and Xamarin itself. We integrate with several existing HP cloud services for authentication, temporary cloud storage, and connectors to email and cloud storage providers.
We started a few people on the project in September 2015, then provided team training in January 2016. We released our new, first-ever JetAdvantage Capture iOS and UWP apps on March 1st, 2017. We’re now working on bringing the iOS and UWP versions to feature-parity with our existing Java-based Android app (released January 2016).
In anticipation of replacing our Java-based app, we’ve developed the Xamarin.Android version in lock-step with iOS and UWP. Doing so ensured our common code works for all three platforms, and we can maintain one code base going forward. Now that the massive learning curves are mostly behind us, delivering new features to all three platforms will be much faster than platform-specific development and we’ll release concurrently.
Cross-platform also applies to build, test, and delivery. We’re striving for continuous integration and deployment across desktop and mobile projects; we’ve built an agile deployment pipeline (using industry best practices and optimizing for our needs), and we’re finding and fixing bugs more quickly across all of our platforms. We can “fail” fast and learn fast, with lower risk.
Another way to determine Xamarin’s impact, in addition to faster time to market, is return on investment. When I compare platform-specific versus cross-platform staffing models, I estimate that, for us, delivering multiple apps with Xamarin is roughly half the cost of platform-specific delivery. The more platforms you deliver out of your effort, the higher the ROI.
As you can see in this pie chart, we have ~65% code that is platform-independent, with between 8-15% platform-specific UI (but, still all C# of course).
What is the most compelling or exciting aspect of your app?
If you need to scan frequently, our app dramatically improves your productivity, allowing you to set repetitive tasks, automatically re-do your last task, build custom documents—including pages from multiple document—rotate, edit, and delete multiple pages, and overall, saves our users time with each transaction.
The customizable shortcut is a huge time-saver for our users: launch, scan, send, and walk-away (grab n’ go). For example, when I have an expense form to submit, I sign my form, place it on the scanner, tap my customized “Email & Archive Expense” shortcut, and I can grab my paper when the scan completes and immediately walk away. The app finishes the processing and delivery tasks, and, based on the my “Email & Archive Expense” settings, takes it a step further: optimizing and formatting my documents into the specified format, sending to pre-specified email recipients with pre-specified subject/body content, and archiving documents to my company’s OneDrive expense submissions folder.
With our new release, we’ve added cloud-based multi-destination processing, which means that the app delivers the document (users’ files can be very large, like for a multi-page, 300 dpi color document) to the cloud service once. Our cloud uses the users’ customized shortcut settings to automatically deliver the document to any number of destinations and services, including: specific email recipients and clients, Google Drive, Box, Dropbox, without requiring any other client apps are installed on the device.
Going forward, we’ll add even more advanced imaging features and cloud services, such as additional image quality and document processing, file type support, capture settings, and more to create an even more powerful experience.
How do you use HockeyApp?
We use HockeyApp to distribute pre-store release versions to internal stakeholders, outside of our team, and to external beta customers. It’s been a very convenient way to distribute and install new updates, complete with release notes. The simple sign-up, distribution, and install (no side-installs required) are our team’s favorite features.
User experience is critical to us: poor quality leads to low customer satisfaction, usage, and ratings. HockeyApp helps us get new releases into users’ hands as soon as possible, so they can provide feedback and help us prioritize enhancements and improve our customers’ experience.
What kind of feedback have you gotten about the app?
Our users love that they can create and customize shortcuts for specific tasks and workflows, saving them time. Internally, our boss says that the app and our delivery is “world-class.” I feel the same: the outcome and the effort is world-class. To go cross-platform, implement a continuous delivery pipeline, connect to hundreds of different HP scanners, support Wi-Fi Direct, and integrate with cloud services at one time, with a very small team? To say I’m proud is an understatement.
What advice or resources would you share with developers who are just starting out or investigating mobile development/deployment?
Leverage the large development community, and work closely with your partners. You’ll still need some platform and Mac knowledge, and, as always, Stack Overflow and other online knowledge bases yield great results. We’ve found that Xamarin web search hits are high on the list, which lends itself to the growing interest and number of developers using this technology.
I’ve really enjoyed my experience using Xamarin; we haven’t found a technical challenge we couldn’t overcome, and I think that’s due to (1) the great support from the Xamarin team themselves and (2) the other experienced developers who contribute both components and knowledge to continuously improve the technology and its growing developer community.
To learn how our customers across industries and geographies deliver amazing mobile apps, visit xamarin.com/customers, and visit xamarin.com/download to start building your own.