Camesa, a division of WireCo World Group – a Kansas City-based manufacturer, engineer and distributor of wire rope, synthetic rope, specialized assemblies, wire products and electromechanical cable – hired DEG in the fall of 2013 to develop a mobile application designed to provide customers with a consolidated set of helpful tools and product information that are accessible from anywhere.
DEG’s development of the Camesa app covered every aspect of mobile application design, including writing shared and reusable codes and implementing platform-specific projects that target both iOS and Android platforms. This application has been available for download in both iTunes and Google Play App stores since early 2014.
FEATURED: Download the Camesa app here
There were a number of factors that influenced the development of the Camesa mobile application, but there were two challenges that stood out above all others:
- A majority of the technical calculators that Camesa produced to enable both customers and field sales representatives to make buying decisions were in Microsoft Excel spreadsheets. The process of keeping these Excel files updated and tracking how they were being used had become outdated and inefficient.
- Tracking product inventory across Camesa’s network of service center locations was being executed in paper format; the same process by which product installations were being tracked. This was terribly inefficient for the business and Camesa wanted a more effective method of analyzing where its products were being employed.
By understanding where, when and how much Camesa product was being installed for every customer, the business would inherently be able to target its marketing efforts based on the estimated lifecycle of individual products. This would also allow Camesa sales representatives to better serve its customer base by ensuring that adequate product was on-hand at the local service centers.
To address the challenges that Camesa was facing, DEG designed and developed a dual-focused mobile application that would meet the needs of both customers and its service center partners. Based on the type of end-user – whether customer (or general user) or service center operator – different features within the application would be accessible or hidden.
Features developed for the application include:
We designed and developed a total of six field calculators for the application based on the outmoded Excel spreadsheets, including an imperial-to-metric conversion calculator.
Leveraging the same Product Catalog data used on the www.camesaemc.com website, the application was designed to allow end-users to filter and select a cable type by a variety of attributes, including size, nominal diameter, maximum temperature (in Fahrenheit), breaking strength, and wire breaking strength, among many others.
To address the challenges of tracking product installation, the application was designed to allow service center end-users to use camera-based bar code reader to scan the bar codes of various wireline shipping reels upon installation of inventory.
The mobile app prompts the end-user for additional information related to the customer and installation and then generates an email notification to the appropriate Camesa EMC representative.
In order to maximize reusable and sharable code and a single code base solution, we elected to build upon the Xamarin mobile framework – Model-View-ViewModel (MVVM) pattern – and agile development process for this project.
This application is structured as two layers: Core projects layer and Platform specific applications layer.
Core Projects Layer
The core projects layer shared the business logic, data storages, and web services handling across platform-specific projects. It includes:
- Data layer: Database definition and its data access interfaces
- Web Services Layer – handle web services API calls for pulling products and sale rep data and submit inventory tickets
- Business Layer – Business logic definition
Platform Specific Application Layers
- Use MVVM pattern to bind data from Core Project Layer to UI controls
- Include custom UI controls for specific-platform look and feel
- Include platform-specific feature implementation such as barcode scanning using camera on device
DEG created this application using an agile development approach. We divided the entire development process into multiple iterations. This approach is especially useful for mobile development. We can provide a clear road-map for development to the client, and the set of features will be clear during the development of each iteration. It also helps us to get feedback from the client and end-users faster and more frequently.
Core Projects Layer Architecture
The following entities and attributes were based on the requirements of this application.
Contains user’s basic info including associated region. If he/she is a Camesa technician they will have additional service center info associated to them.
- Product Category
Product category name.
- Product List
A collection of product info.
- Product Detail
A set of attributes about a specific product such as: SKU, Size, Dimension, Max Temperature Allowed, etc.
- Sale Rep
A sale representative’s basic contact information and their associated region.
A set of attributes associated to their service center’s inventory such as: SKU #, serial number, quantity, etc.
- Installation Ticket
A set of attributes associated to their cable installation such as customer information, cable’s SKU # and technician’s note.
Data Access Layers
The repository pattern was used for data access between the application and its local data storage. Data is cached and stored from the user’s input and supporting web services. The following outlines each data model and the repository class associated with it:
- User Repository
Includes methods for inserting, reading, and modifying user data.
- Product Category Repository
Includes methods for inserting and reading cached categories.
- Product List Repository
Includes methods for inserting, modifying, and reading cached products.
- Product Detail Repository
Includes methods for inserting, modifying, and reading cached product details.
- Sale Rep Repository
Includes methods for inserting, modifying, and reading cached sales reps.
- Inventory Repository
Includes methods for inserting and reading cached inventory.
- Installation Ticket Repository
Includes methods for inserting installation tickets.
Web Services Layer
All sales rep and product specification data come from web services. This allows the client to manage this data from a content management system (CMS). Each web service is comprised of classes to handle two-way data interaction with our app. One of the requirements of this application was supporting offline functionality. All data is cached after being download from the web services. It includes the following handlers for processing web service data:
- Product Specification Handler
- Sales Rep Handler
- Inventory Handler
- Installation Ticket Handler
- Service Center Handler
This layer exposes a set of common APIs that are required to drive the user interface regardless of the mobile platform. It encapsulates data retrieval and storage including sorting and implementing business rules for each screen within the mobile app.
Unit Tests Layers
Each unit test ensures a solid and bug-free foundation for each platform-specific app and each business layer API.
The majority of business logic and data retrieval handling occurs in the Core Projects layer, and each platform-specific implementation is relatively thin. The platform-specific implementations include custom UI controls and resource files such as logos and icons. We have implemented push notifications for each platform as well.
Camesa Mobile Solution
- Core Projects
- Web Services
- Unit Tests
- Web Services
- Platform Projects
The finished product
By using Xamarin, MVVM pattern, and agile development process, DEG was able to design and develop this cross-platform mobile application on a rapid project timeline. We were able to produce reusable, shareable and highly testable source code on each platform. We were also able to take advantage of platform-specific features and take advantage of native performance for this mobile application.