Back in the day, when life was simple and technology was limited, dairy producers would keep track of their herds by using journals or notebooks. As time as passed, adoption of computer software increased where data could be entered, but only after jotting it down on the farm first. Nowadays, there is mobile technology everywhere and there are apps out there to support all kinds of activities – including dairy farming.
How convenient is it for a dairy producer to take his phone or tablet anywhere to keep track of his/her herd? Well, to keep to a one-word answer – “extremely”. Not only is it a time savings by not having to log something on a piece of paper and go back and enter it onto a computer, it’s the convenience of having the information with you all the time.
Here at Shockoe, we have had the opportunity to work closely with a couple of clients to build apps for the dairy farming community. As part of the process, we had conversations with the future users of the app (dairy producers, veterinarians, and animal technicians) to learn how they use their existing software and what was missing.
As we traverse through the mobile development lifecycle with our clients, our product management practice focused on a few key main areas to ensure we meet our client’s needs:
1. User Experience
If users open the mobile app and don’t feel like there is any value for it, they will quickly delete and continue to use something else. The app needs to have the functionality to allow the users to accomplish their tasks, but also be structured in a way for easy navigation and reliable performance.
Albert Einstein: “Everything should be made as simple as possible, but not simpler.” This and the principle, KISS, that has been around since the mid-1900’says it all. If a mobile app is not intuitive and easy to use, it will not be used – even if it on a device being carried around all day.
If data or user information is not protected, the app is a huge failure. Users need to know the mobile application they are using is safe to use. This means securing the code, securing the device, securing the data, and securing the transactions.
What is the most common functionality used in the mobile application? Which functionality is the least used by users? How long are the sessions for a user? Answers to these questions and feedback from the users, help determine what enhancements can be made for future versions. It just doesn’t stop after the mobile is pushed out to the stores, monitoring and evaluating needs to occur.
Dairy producers, vets, and technicians need the ability to access information about their animals, update data, and also perform various functions throughout the day. Following these key elements and working closely with the users, allows us at Shockoe to deliver a high quality mobile experience.
Making user interface elements display how you want them is not always a simple task. The Titanium 2.0 SDK changed the way the ‘auto’ sizing keyword is handled. These changes may require some existing code to be modified in order to produce the same output. So, we’ve put together a simple iOS example to show the use of nested views with the new values Ti.UI.SIZE and Ti.UI.FILL.
We want to make a layout that looks like this:
First, let’s create our window.
Next, we want to create an outer view container for our layout and add it to our window. This container’s layout property is set to horizontal so that our content will be added from left to right.
We’ll create an ImageView, set its photo, and add it to our outer view container.
Since we don’t want our labels to go directly next to the photo, we need a small buffer. We’ll create a view to use as a buffer and add it to our outer view container.
We want a container with a vertical layout so we can add three rows of labels from top to bottom. We create another nested view and use it as a container for labels.
We create our Labels and add them to the nested view container.
Finally, we add our nested view container to the outer view container and open our window.
The UI views are colored to indicate the output of each element. Comparing the code to the output should provide some idea of how the properties affect the outcome. Please let us know in the comments section if this example was helpful!