I’m a recent college graduate. You get it now, I’m used to do things the hard and long way as constraints like time, ease of development, team collaboration etc. were not applicable to me till now. I was not exposed to industry level problems/constraints, so even if I had great ideas, it used to take me very long to develop a product. I must say I got so overwhelmed with Microsoft technologies when I started working as a Cloud Consultant. Everyday has been a new learning for me since I started my career at Rapid Circle. So this blog is an attempt of sharing my experience of going from “Woah I have to write a lot of code” to “It could be done in a short time, but woah there are so many things out there, what should I choose”. I chose to write about Power Apps because I had worked a lot on native Android when I was in college, and currently I’m exploring Power Apps. There are so many things about Power Apps that I haven’t explored yet, but that’s the story of every tech guy, right?
So, Power Apps…
” Power Apps is a suite of apps, services, connectors and data platform that provides a rapid application development environment to build custom apps for your business needs “, this is what Microsoft’s documentation says. I’d say, “If you want to impress your boss and clients by delivering before the expected time, this is the way to go”. Power Apps is a no-code or less-code approach, unlike Native Android where crazy amount of code is required. Imagine an experience where you don’t have to write any code for data source connection, or don’t have to worry about authentication or connecting to important services. That’s Power Apps. But unlike native Apps, Power Apps’ super powers are restricted to internal users only. If you want to develop an app for your own brand or develop a B2C app, Power Apps might not be the right way for you.
Now, Native Apps
If you are a hardcore coder, there is a high chance that you’ll hate Power Apps, just like I do. Power Apps is amazing, but it feels like things are not in our control. Native app development feels rich as it feels like every module of it is our control. Integration with every giant cloud service like Google, AWS, Azure, IBM etc., tracking user behavior, high-level user engagement, and easy inclusion of open source code are some of the things that I like about Native Apps. Complex logic can be written easily in Native Apps, whereas I found it rather confusing to write the same logic in Power Apps using functions.
Connecting to data sources
Power Apps: This is the best thing about Power Apps, I feel. There are connectors for connecting to data sources. Adding data source connectors to Power Apps is as easy as saying, “Jarvis, connect me to SharePoint”. These connectors are more focused on enterprise level Microsoft data sources, like SharePoint, SQL Server, Office365 users, Cloud Storage, Excel, Common Data Service, etc. Apart from Microsoft’s connectors, there are various other connectors too, like Oracle, Twitter, Postman, etc. Adding a data source is just a 3 click job, Go to View -> Data Sources -> Choose connector. That’s it!
Native Apps: No, Native Apps cannot beat Power Apps at this. Connecting to data sources isn’t hard in Native Apps, but it is not as easy as Power Apps. The most popular cloud service for Android is Firebase. Firebase provides NoSQL database which can directly be operated from a native app. Read Firebase documenation to know about its wonders. Other data sources can be accessed by either using APIs or JDBC drivers. Native apps have an upper edge over Power Apps when it comes to working with large datasets. For some functions, Power Apps delegates the processing of data to the data source, rather than moving the data to the app for processing locally. If a function cannot be delegated and number of rows exceed 500, then Power Apps may not be able to retrieve all of the data and show wrong results. To learn more about delegation, follow this link. In case of Android, handling of large datasets depend on the server and size of local storage. So it’s in the developer’s hands how he optimizes performance of queries.
Power Apps: Power Apps has limited offline functionalities. Luckily, local storage is one of them. Data rows queried from data sources can be stored in cache using SaveData function. SaveData only works well with relatively small quantities of data, preferably not exceeding 2 MB. Local storage is generally used to optimize app start-up performance, and not high-end data related operations. Microsoft is working towards increasing offline features, but as of now, designing an app to work flawlessly while offline is tough.
Native Apps: One of the cool things about Android is local persistent data storage. One can store structured data locally using SQLite, or key-value pairs in a local XML file using SharedPreference, or media files in internal or external storage. SQLite database can be queried just like any other SQL database, which will help your app to store complex data. Maximum local storage means minimum calls to server and faster the performance. Periodic synchronization of SQLite database with remote database can be done using a service in Android, which will trigger synchronization at fixed time intervals, without letting the user know. Great performance, great user experience! What else can we expect from an app?
Integration with other services
Power Apps: Microsoft has given developers this wonderful gift of smooth integration to its cloud services. Teams, Github, Azure DevOps, Azure IoT, Office 365 and many such more important services can be integrated to an app using connectors. There are connectors available for non-Microsoft services too, like Pinterest, SendGrid, Teradata etc. Some of the connectors are free, others come under premium category. If any of the current connectors cannot fulfill your needs, you can build a custom connector yourself! I was once stuck on a complex logic which I was finding difficult to implement using Power App functions. I quickly wrote the logic in C#, made a custom connector for it, and done!
Native Apps: The set of services which can be integrated with native apps is much bigger than the Power Apps’ umbrella, as open source libraries also come into the picture. Unlike a power app, a native app does not necessarily follow cloud-first enterprise-first approach. That’s why not just business but all kinds of libraries are available in the community. Network, device or cloud service, everything is possible. To use an external library in Android, just add it as a dependency in gradle file, and build the solution. For iOS, other Xcode frameworks can be imported using Cocoapods.
Power Apps: Microsoft introduced a new Power Platform capability called AI builder, which will help developers to build AI powered business solutions. All of these AI models are still in preview, except prediction model. Currently there are total 4 models which can be used with a power app to optimize business:
- Prediction AI model
- Text classification AI model
- Object detection AI model
- Form processing AI model
AI builder automatically trains a model. What a developer needs to do is just choose model type, connect data, and filter it. That’s it!
Native Apps: Google’s ML kit is a packaged solution of many AI models for mobile developers. ML kit is a collection of various APIs which access AI services developed by Google running on cloud. ML kit offers the following services:
- Language ID
- Smart Reply
- On Device Translation
- Bar Code Scanning
- Face Detection
- Image Labeling
- Landmark Detection
Apart from the services mentioned above, developers can generate custom models in ML kit.
What is suitable for you?
Consider Power Apps when:
- You are developing something for internal users of organization.
- You want to deliver an enterprise level app as soon as possible.
- You want a cloud-based app.
Consider native apps when:
- You are developing a B2C app, or your app will have users outside of your organization.
- You want to have more control on various parts of your app.
- Performance is more important than time of development.
- You’ll be using a lot of 3rd party open source dependencies.
I’m eagerly looking forward to giving back to the community which has helped everyone be what they are today. This blog, my first blog, is a step forward in that direction. I hope you like it. Thanks for reading!