I already had an awareness of Git through my studies with Udacity, and so my laptop is already set up with git and I have a GitHub account. However, as the old addage goes… a little knowledge is a dangerous thing. As part of my nanodegree studies, I was encouraged to use git and GitHub, but instruction provided was minimal and I consequently found myself getting into all sorts of problems with it, due to my ignorance. At the time, it seemed that the use of git and GitHub were primarily for sharing my projects and submitting them for assessment. I was more concerned with furthering my app development skills than learning the intricacies of git/GitHub, and so I abandoned it (to end my growing frustrations with it) and opted for the much simpler alternative of sharing my projects through Google Drive.
The introductory videos provided on this course have given me an appreciation for the importance of version control, and how git and GitHub are tools that I should embrace, for my own sake.
To date, I have only really used GitHub through Android Studio, as opposed to GitBash, and I now realise that I need to gain a greater understanding of how both methods work.
I decided that I needed to seek out some tutorials on the subject to improve my skills and knowledge in this area. I have so far found 2 free version control/git course with Udacity (ironically!) that I will start with, and see if I need further guidance after that:
Having never blogged before, I followed my intuition to set up my critical reflective journal last week, as best I could. I knew what I wanted to do, but couldn’t figure out how to do it, without assistance. So, I thought it would be a good idea to invest some time in learning how to use WordPress properly this week.
This was a great, and relatively short, introductory course, which quite quickly helped me to see that a WordPress post is built up using blocks. I had been trying to use it like a word processing packages and getting quite puzzled (and a little frustrated) when my text wasn’t behaving as I expected it to.
Following the guidance of the tutorial video series, I feel like I have now grasped the main concepts quite well, and have managed to publish a number of posts that are easily navigated through the menu, category and tag systems that I have in place.
As I work through the rest of the module I will continue to experiment and learn more of the capabilities of WordPress, in an effort to eventually achieve blog that serves me well and I am proud to present.
The course videos provided a good starting point for investigating the wealth of development strategies that I could adopt. It is clear to me that my choice of strategy is a key decision at this point and I need to take the time to make the right decision.
My priority, when considering my options, is that I need to be confident that I am able to achieve my objective of developing mobile apps that are accessible for at least the majority of the market. So, my first step is to get a feel for the state of the market for operating system platforms to see who’s currently buying what:
The Mobile Device Market By Platform
I looked at the Statcounter website to get the latest available data. To start with, I pulled up the market share at a global level:
Worldwide: Android 75.4%, iOS 20.8%, other 3.2%
I was already aware that the market for mobile devices is essentially a duopolistic situation. However, I was surprised to learn that, globally, Android is the clear dominant force, claiming an average market share over the past year of 75.4% compared to that of iOS at 20.8%, and together, claim almost all of the market between them. All other operating systems combined make up only around 3.8% of the global market for mobile devices over that period.
So I thought it would be interesting to drill down to see how the market looks at a continent level:
Africa: Android 79.6%, iOS 7.5%, other 12.9% Asia: Android 83.2%, iOS 11.8%, other 5.0% Europe: Android 71.0%, iOS 27.3%, other 1.7% North America: Android 49.3%, iOS 50.1%, other 0.6%Oceania: Android 44.1%, iOS 54.6%, other 1.3%South America: Android 86.8%, iOS 10.3%, other 2.9%
It’s interesting to see the differences between the continents. I would assume that the factors behind this largely revolve around price sensitivity, technological capability, and the breadth of app availability. Android is an open source platform, with many contributors to it’s development, whereas iOS has Apple in control. Android is therefore a far more flexible platform than iOS. The Open Handset Alliance is a group of 84 technology and mobile companies who have come together to accelerate innovation in mobile and offer consumers a richer, less expensive, and better overall mobile experience through the Android platform. This enables a broader range of device options across a much wider spectrum of price points, opening up the possibility of mobile device ownership, particularly so in the more price sensitive markets. The network effects of this, coupled with the relatively uncomplicated app market (compared to iOS) make it a more attractive platform for many 3rd party developers, which in turn leads to a greater breadth of app choice for Android consumers. Loyalty for both platforms is high, although slightly higher for Android.
I then went on to examine the data for several country level markets. I wont include them all here, but as the UK and the USA are probably my most relevant markets, here are the relative market share for these countries:
UK: Android 47.4%, iOS 50.9%, other 1.3% USA: Android 44.4%, iOS 55.1%, other 0.5%
Even though I was certain that I need to develop for Android and iOS platforms, examining market data was a worthwhile exercise for 2 reasons: firstly, I have now confirmed that my assumptions were sound, and secondly, I had no idea whether or not I should also consider the need to develop for other platforms (I had Windows in mind in particular). The conclusion I draw from the market share data is that I definitely need to develop for both Android and iOS platforms in order to reach almost the entire market, but I don’t consider the other mobile platforms as being particularly significant for me. At least, not sufficiently significant to allow it to influence my choice of development strategy.
Strategic Options
Now that I know that I am targeting Android and iOS platforms, I need to consider the 3 high level routes :
Native Development
Progressive Web Apps
Cross-Platform Development
Native Development
Built specifically for a single platform, native apps are written languages that the operating system is specifically designed to accept (Java or Kotlin for Android, and Objective-C or Swift for iOS. Native apps tend to offer a better user experience, superiority in terms of performance and they don’t necessarily require an internet connection (unless remote data storage reading/writing is required). The major setback is the need to develop a completely separate code base for each platform, which has a big impact on resource requirements (time, expertise, cost) across the entire development lifecycle.
Whilst it would be essential to be essential for me to develop an expertise in two languages and build and maintain two separate code bases, I do already have a certain amount of experience with Java for Android and so I consider native development to be a viable option for me.
Progressive Web Apps
Effectively, a mobile website built with JavaScript frameworks, designed to look, feel and work like a native app. This route provides a number of benefits, including a single code source accessible to any platform with a browser, a fast responsive user interface and no need to go through an app store (this has it’s pros and cons). However, there are some drawbacks, which include: limitations on the accessibility of device hardware accessories (particularly on iOS), increased battery power requirement and limited access to plugins (such as Facebook login & verification facilities). Furthermore, from a personal point of view, I have no web development experience whatsoever and so I would be starting from scratch.
I feel that, for my purposes, the downsides outweigh the benefits, and so I’m dismissing progressive web apps as a viable way forward for me.
Cross-Platform Development
There is a mind-boggling wealth of framework tools that provide the capability of developing apps that run on both Android and iOS (and other operating systems in some cases). A single code base is written and maintained in language(s) specific to the chosen framework, which then employs a translation process (compiler, interpreter, virtual machine) to create compatibility with the target operating system.
The major benefit of adopting a cross-platform strategy is the efficiency of one code base serving both platforms is common to all of the framework tools. The common disadvantage is that they tend not to achieve the performance metrics that native apps do. Each framework has arguments for and against it’s adoption, which makes for an overwhelming compare and contrast exercise.
I have done a lot of reading around cross-platform frameworks this week, assessing the relative advantages and disadvantages of many of the more popular options (such as Reactive Native, Xamarin, Ionic and Apache Cordova, to name but a few). It’s not feasible for me to go into any depth of analysis, comparing and contrasting each against the others here, but I did find it difficult to find any one framework that offered a clear advantage for me.
Up until last week, I had no appreciation for the number of cross-platform tools that are available. However, I had come across Flutter, which I find to be an attractive proposition, and so I have been using this as a yardstick against which to compare the various framework options.
Flutter is Google’s free, open source mobile app SDK for crafting high-quality native experiences on iOS and Android in record time, using a single codebase .
Flutter uses Dart, a modern and concise, object-oriented language , which is compiled “ahead of time” (AOT) into native code for multiple platforms. This allows Flutter to communicate with the platform without going through a JavaScript bridge that does a context switch, achieving excellent app performance, and near instant app startup times, that outshine all other cross platform development methods. Additionally, the hot reload functionality (which uses a just in Time compilation model to compile in real-time) makes for a far more efficient development experience as there is no need to rebuild the entire code base every time – it just implement the changes. Dart being a relatively straightforward language to learn is also a big draw for me, as I still currently consider myself to be little more than a coding novice.
All things considered, Flutter remains a favourite option for me. However, I’m not without my reservations, chiefly due to it’s lack of maturity as a framework. That said, the risks are somewhat mitigated by the fact that Google is investing heavily in the development of Flutter (including compatibility with the web, as well as Google’s currently in development operating system, Fuschia), and it is currently widely considered to be the fastest growing SDK, with the fastest developing community (which appear to be incredibly enthusiastic, altruistic and loyal ).
In conclusion
I have decided to give Flutter a test drive to get a hands dirty insight into it’s potential. If that doesn’t work out for me, then I will revert to plan B, which is the native approach, where I pick up where I left off with Java for Android, and, then learn Swift for iOS, once my Java capabilities have been sufficiently developed.
I have identified a number of sources of tutorials, which I will engage with, in order to test my theory that Flutter is the future, and best choice of app development strategy for me.
This week, we’re diving into the nuts and bolts of app development tools.
I see app development as being a talent that comprises of three major components (in order of my perceived importance):
Technical skills
the ability to build a robust product that satisfies a brief, employing the most appropriate and effective tools.
Business acumen
identifying opportunity in the needs and wants of the market and creating a business model to deliver a financially viable solution that the market is prepared to pay for
Artistic flair
applying creativity and psychology to a product in order to provide an emotional and pleasurable user experience
In a team development environment, it’s important to get the right balance of these three components, by carefully selecting team members that possess the necessary skills and experience in at least one of these components. If career intentions lie in working within a development team, focusing on just one of these areas to cultivate a particularly marketable level of expertise, could be considered a good strategy.
However, my objectives for the creation of a startup venture, will see me operating as a lone developer (initially, at least). It is therefore vital that I strive to make significant progress with all of these competencies to maximise my opportunity to make a success of it.
This conceptual web diagram is a representation of where I see myself at this point:
Of course, this is a subjective assessment, purely based on my own perceived achievement to date, largely drawing on a comparison with my peers. It is merely a representation of where I feel I’m at, with no scientific quantification behind the scores at all.
My intention for this course is to develop my score in each of theses areas, to effectively increase the area of my triangle, representing my potential as an app developer.
Note that each of the scale ends have an arrow, pointing toward infinity, acknowledging my appreciation for endless learning opportunity and an ever changing world.
This week is where we get to work on developing my technical skills…