For Decision Makers Series — Installment 1
The purpose of this article is not to provide an in-depth technical discussion of the pros and cons of these technologies but rather to speak at a higher level from the perspective of business owners, CEO, COO & CTO’s and team builders about the implications this technology decision can have for your organization in terms of team building, team sizes, speed of development, team morale, relationships with your clients/stakeholders and above all your bottom line!
Purpledecks started out working on diverse native systems where we were domain experts across a small number of specialist domains. In particular we were predominantly known as “smartphone specialists” having worked on smartphone platforms since their inception around the year 2000.
Over time we built our team and expertise in areas such as scalable enterprise cloud systems, modern web applications etc, but we struggled with the amount of expertise we had to carry on our team in order to deliver to our clients.
Our Main Development areas
We work in a heavily Dev-Ops oriented environment building enterprise cloud services. We use a micro-services architecture, shipping as containers and deploying to a Kubernetes cloud.
Node.JS has grown up a lot since then and it is now a more rounded stable platform with a large developer and support base. The number of libraries and utilities are growing by the day. Its adoption is so widespread now that it can no longer be considered niche.
We have used it with great success to deliver large services using protocols such as REST and GraphQL and providing ease of integration with databases such as MySQL, PostgreSQL and MongoDB.
Whilst there are some concerns about the lack of multi threading support on Node.JS we have not found any limitations in the vast majority of our work that prevent us building successful scalable outcomes for our clients.
Our go to choice framework for Web is most definitely React.JS. React.JS has brought many advantages to our web app projects. Originally developed by Facebook, React.JS is now its own independent open source project which is open to and maintained by the developer community (with help from Facebook!). React is widely adopted and is fantastic for developing web apps (it’s fast to render, stable, has good development tools and fits perfectly in to the Design System movement).
Constant innovations on this platform only serve to make it more attractive. A couple of interesting new developments:
- Gatsby — for lightning fast static website creation using React (Great for SEO)
- Server Side React Rendering (SSR)
Larger organizations looking to change their technologies should not be afraid to adapt React.JS. Its appeal is broad and it’s used extensively by leading software companies.
Given our original background as “Smartphone specialists” — many of our clients and projects in the mobile space have very specialized requirements in terms of performance, processing, hardware integration and also have medical device requirements. Requirements like these still tie us to native development on both iOS and Android.
The majority of apps out there mostly need to:
- interact with web services
- may need to store some data locally
- manage state
- present a graphical UI
- interact with media and social media
This is not to undersell the monumental efforts that goes into building these systems but rather to demonstrate the scope of requirements when choosing a build technology. React Native easily meets all of those requirements.
React Native is a cross platform build technology that came out of the React.JS framework. React Native is used to build iOS and Android apps. It is used extensively by Facebook and many other large companies.
We now use React Native in about 40% (and growing) of our projects. The main reasons we choose React Native are:
- It compiles down into native code — this is a really big plus for both stability and speed (despite what people try to say… browser based apps just don’t cut it yet in terms of quality)
- You can easily plug in native iOS and native Android code where you need to
Some things that we learned when using React Native
- You will still need good knowledge of xcode, the apple signing process, Gradle for Android and device specific issues which you don’t encounter if you only work in the browser
- Moving from making native apps to React Native is probably easier than a React.JS developer moving to React Native as there is a good learning curve when dealing with the issues mentioned in the first point
- Whilst the React Native community is good, platform releases are not as frequent as we may like and this may lead to bugs pertaining to a certain platform or device living for longer than desired. These bugs may not exist if the app had been coded natively
- Building a high quality app in React Native takes roughly about 75% of the time it would take to build a separate iOS and Android app
- There are less crashes (not necessarily less bugs) in React Native
React Native is a great addition to our tool set and we are increasingly using it. However it is still a ‘horses for courses’ choice — We won’t be ditching native any time soon but we will be doing an awful lot more React Native apps.
How did our big move fare?
- More concentrated teams — Developers can now much more easily move between the back end and front end. This means that we can now deliver more with fewer developers and that there is less developer down time within the company
- More efficient agile sprints — again following on from the first point, developers can better swarm to complete outstanding sprint tasks
- Developers feel part of a bigger team — no longer do people identify themselves as a back end developer or front end developer. People now belong to project teams and the sense of overall shared responsibility for the success of the project has really enhanced the working atmosphere and buzz of projects
- Hardcore single platform mobile developers and fanboys became React Native developers and progressed to become web developers — need I say more?
- Back end and front end components integrate more easily — As front end developers have a greater understanding of the back end and vice versa the overall process to define and deliver interfaces has been streamlined, thus reducing time taken and bugs raised
- Better dev ops — As we now need less developers per project team we have more time to focus on dev ops and areas such as unit and integration testing. Using fewer different stacks has also meant that we can reuse a lot of the same frameworks in our dev ops across stacks. This means that we can do a lot more with a leaner dev ops setup. Dev ops has become faster and easier.
- As more developers are working across a common language the group knowledge is greatly enhanced as developers combine their collective experiences to introduce a lot of good practice libraries and frameworks across multiple stacks. This in turn enhances productivity
- Easier to read code — the existence of frameworks such as Prettier means that we have a common code standard across all projects
- More efficient QA — QA are dealing with fewer platforms and therefore require less specialist knowledge that can only be gleaned over time spent testing on diverse platforms
- The combination of the last four points has led to an overall improvement in the quality of code and deliverables with less bugs and more stability
- Happier customers! — all of the above combine to provide a much more streamlined quality deliverable
For Purpledecks we still have deep team expertise with the following languages
- Swift for native iOS projects
- Java & Kotlin for android projects
- C++ for where we need fast running cross platform algorithms on mobile
- Python for big data and machine learning
Digital Transformations — Purpledecks help companies to formulate digital products & services around their core technology and strengths.
Our main technology strengths are React.JS, Node.JS, iOS (Swift & React Native), Android (Java, Kotlin & React Native), Kubernetes, Dev-Ops, GCP (Google Cloud), AWS, MySQL, PostgresQL, PostGIS, MongoDB, GIS
We work across a variety of sectors such as Media, Retail, Connected Health (Medtech), GIS, Fintech