This time last year, I started developing Sun Surveyor initially as an academic exercise of building and deploying a native mobile application from start to finish on 2 different platforms. The idea of it being something people other than myself could use or purchase was a secondary goal. To that end, the Android iteration has had modest success, beyond my own expectations for it. Ideally, the iOS iteration will be finished within the next few months. I’m sometimes asked what was involved in building a mobile app, and in particular the unique challenges of this one. So here’s some thoughts and reflections on what I’ve experienced over the past year.
Building an Application
Here’s a list of technical topics I had to brush up on, or get a basic understanding of, that were essential to the development of Sun Surveyor:
- Basic Trigonometry (SOHCAHTOA!) and Circular Geometry
- Astronomical Algorithms – Sun and Moon calculations and information
- 2D Graphics Programming basics – for the 3D compass, z-order stacking
- 3D Rotations – for representing the user’s position in the world versus other object positions
- Quaternions vs. Euler Angles, gimbal lock – for spherical augmented reality
- Game Development basics – efficiently calculating and rendering graphics
- Time Zones and their complexity – they are geopolitical, and dynamic!
- Accelerometer and Magnetometer basics – understanding the sensor fusion that allows deriving the device orientation in the world
- Compasses and Magnetic Declination – the difference between Magnetic North, True North, and how it varies throughout the world
- Optimizing for Mobile – very limited heap space, varying device builds and capabilities, strong need for efficient algorithms and data structures, asynchronicity, respecting the main/ui thread
- GUI basics, GUI design patterns and UI/UX interaction patterns
- Maps, Geocoding, Coordinate systems
If I knew that all of these things were to be involved on day one (on top of learning the Android SDK), it would have seemed an intimidating start. Thankfully, my ignorance allowed me to dive in and constantly add to the growing list of topics of which I needed to increase my knowledge, and slowly the app came together. Something I realized is that one doesn’t have to become an expert in every topic to make use of its basic concepts! And to that point, I think that the concept of abstraction and working with abstraction, which is so important to us in the software engineering world, really comes into play here. Many components and problems for this app could be modeled in the abstract sense with the implementations evolving until they were working and efficient. This is the one part about engineering that I think many non-“techy” folks may find intimidating, overwhelming or “magical,” when it’s all just possible due to careful abstract design, thought and structure.
In the months since the initial release, many of the components and modules of the application have been rewritten, refactored and improved as time allowed; resources such as Refactoring, Effective Java (2nd Edition), and the classic GOF Design Patterns were helpful influences.
Another great resource was the The Business of iPhone and iPad App Development book, which really helped put into perspective the mobile app marketplace and how applications I develop would need to find their way within it, even if it was focused mainly on the iPhone/iPad and iTunes. I saw this at a Cocoaheads meeting and it was incredibly helpful to buy and read right before launching the app.
Some of the non-technical topics that I quickly became aware of:
- User Base – other than myself, who potentially uses this application? The answer was broader than I imagined!
- Customer Service – understanding the expectations of customers, handling complaints, issuing refunds, and resolving and prioritizing bugs and feature requests
- Competition – what other apps are out there? How does this one stack up? What is unique about it?
- Pricing – understanding the value people expect out of something priced at a certain price point, versus how much value they expect from a free version or a competitor’s
- Mobile App Business Models (“Freemium”, ad-based, etc)
- Analytics – what the most used features are, how many are upgrading from the “Lite” version, how many people make use of a new feature when it’s added, etc
The business side was an interesting and unexpected one, and I’ll cover that in Part 2.
Some of the modest successes and highlights over the past year:
- All of the interaction from the wonderful folks who use the app – solar panel installers, real estate agents, gardeners, architects, grips and film crews, cinematographers and photographers!
- Scoring 5/5 in a Digital Photography Review(dpreview.com) Android and iOS app tool roundup
- Seeing the app mentioned by Romain Guy (Android framework wizard) in several posts (here and here)
Also in the past year, I started making an effort to discover and meet more people within the Pittsburgh developer community. I started by attending a Geek Night, then the iPhone/iPad and Mobile App Developers Pittsburgh Meetup (great, though seemingly now dormant), and eventually discovered the wonderful Pittsburgh Cocoaheads Chapter. Run by co-founder Mark Dalrymple (author and developer extraordinaire) and augmented with additional presentations from Sean McCune, Nick Waynik and others, Cocoaheads has been a great monthly experience and opportunity to meet and interact with other passionate Pittsburgh developers and enthusiasts.
I also attended a really fun and free event called the Global Day of Code Retreat, which happened worldwide, with the Pittsburgh event having over 50 attendees. This involved pairing up with different partners in 6 sessions to practice test-driven development on Conway’s game of life, with the code being deleted at the end of each session. Definitely an interesting and intense way to practice and hone some coding, design and testing skills.
To Be Continued…
In Part 2, I’ll share some thoughts on sales, the “freemium” business model, the Live Wallpapers I’ve developed and Android marketplace and device fragmentation.