Blog Archives | Mood Up team - software house

8 Things to Consider Before Developing a Mobile App

With over 4,7 billion mobile phone users around the world, who spent an estimated $19.5 billion globally in the first quarter of 2019, developing a mobile app to tap into this vast number might seem like a no brainer.

A mobile app, however, is an extension of your brand, and developing one should be approached quite carefully to ensure the app brings its intended benefits and doesn’t cause more harm than good. Another reason why we recommend the consideration of the below eight factors is as a haphazardly developed mobile app can have you losing money, time and opportunities.

1. Do you really need it?

You’d think this to be an odd question from a mobile app development company such as ours, but asking questions such as this makes our clients evaluate themselves and their expectations.

Remember, an app is an extension of your brand and developing one for the sake of doing so is not a smart idea.

Creating and adding value for your end user however is.

2. End-user

All apps should be developed after extensive research as doing so helps to understand the current offerings on the market and the expectations users have of such apps so that your app may serve a better solution. The top four questions you must ask yourself therefore is

  1. Who are my competitors and what is their app offering?
  2. What’s their strategy and unique selling point(s)?
  3. Are there any weaknesses?
  4. Customer sentiments to the app offered by competitors

Having answers to the above should give you an idea of the state of the market you intend on entering and help identify threats as well as opportunities. Upon establishing this, we recommend doing some research on the end users themselves as the success of any app lies in its user-centeredness. The question you should ask yourself, therefore, is

  1. Why are customers using these apps?
  2. What are needs that are being met at present
  3. Are there any needs that are not being met?

3. Operating system

The global app ecosystem is dominated by two key players, iOS and Android, who each command 81.8% and 18.2% respectively. Any development of an app, therefore, should cater to these platforms and their users.

It might be tempting to aim for the dominant Android platform and leave out iOS users, but do keep the following in mind

  1. 30 million iOS users switched to Android in 2017, whereas Android lost 112 million to iOS.
  2. Almost half (45%) of iOS users have more than 5 paid apps or subscriptions, whereas only 19% of Android users could say the same.
  3. Revenue from the iOS App Store was double the revenue from the Play Store in 2018

We have a great article that can give you more information to help make a decision on your platform here.

4. Native or cross-platform development

Once you’ve made a decision on the platform you’d be opting for, it’s important that you pay attention to the technology that will be used for app development. A key option you can pursue is native app development, which is essentially apps developed for the specific operating system, which gives them the ability to utilise device-specific hardware such as camera, GPS and fingerprint scanners.  We at Mood Up favour native programming languages such as Objective-C, Swift for developing iOS apps and Java for Android apps. The downside of such an approach, however, is the increased development time and cost a client would have to incur if the apps need to run on both iOS and Android.

There is however a second hybrid option through which developers can create one code base and use it to run apps on both platforms. Such development using frameworks such as React Native and Flutter can reduce development time and costs, allowing the app to be deployed faster. One must, however, remember that such an approach is not always best if the app that is being developed need to be tightly integrated to their operating systems and/or will be performing heavy duty tasks such as graphic heavy games.

5. UI/UX Design

UI is the interface that the user interacts with whereas the UX is the experience one has with it. Both design elements are equally important and can mean the difference between the success and failure of your app. Such design thinking at the early stages of the design of an app is vital as it sets the look and feel for the app, which then allows the developers to start coding.

A well thought out UI/UX design will provide your end users with a seamless experience that will translate into increased revenue, customer advocacy, faster growth and better brand image.

6. Mobile analytics

It’s impossible to improve on something that we cannot measure and that’s where mobile analytics become highly useful. This, however, should be done in conjunction with your business goals so as to recognize and optimise the performance of your app. Integrating mobile analytics to your app will help analyse and pinpoint functionalities that are performing well with those that are not, so that the design and development team can continue optimising the app to achieve your business goals.

7. Testing

An app that works is more useful than an app that looks pretty but is riddled with bugs. Such buggy apps that do not respond, crash and is generally unstable will have your hard earned users abandoning you for your competitors and damage your brand.

That why at Mood Up place a core focus on running automated and manual tests on each the end of builds we produce. Such testing allows us to discover bugs (if any!) that are then passed onto the developers, who ensure the issue is rectified. This rigorous process ensures that the product build our customers get at the end of every sprint is one that can be deployed should they decide to.

8. Costs

Custom app development is not cheap and anyone who says otherwise should have you worried. The benefits of a custom app with a good UX/UI, strong backend and no bugs however far outweigh the costs of making it, and should be considered as an investment in your business with far-reaching benefits,

Development costs, however, could be reduced if you choose a software partner with agile pricing where charges are only incurred for the development done, unlike the fixed pricing method which locks clients into a contract with set expectations and higher costs (due to set profit margins).

Another thing to consider is, will you be charged separately for the design, development and QA? If so the bill will be on the hefty side.

Mood Up, however, offers design and QA as value added services for our clients and only charge for the app development work that is done.

Summary

Mobile app development as we mentioned is no walk in the park with many factors contributing to its success and continuity. Being prepared and giving due consideration to factors such as the UI, UX, the development frameworks used and QA, however, can help transform an idea to a great mobile app, at a considerably low cost.

Have an idea that we can help with? Tell us more about your idea here and get the first week of development free.

Flutter vs. React Native: Which should you choose for your mobile app?

Choosing the right technology stack for a mobile app can have anyone confounded with the amount of technical jargon out there. The conflicting advice you would find on Google isn’t very helpful either, and this can have you feeling disheartened despite the exciting idea you have for your app. We know this as many a client has told us the same before we sat down with them and started asking the right questions.

The tried and tested method of developing apps for both iOS and Android, is doing their coding separately (native apps). Android apps, for example, require a developer to use Kotlin or Java, while iOS apps are built using Swift or Objective C. Such separate coding is essential for the performance and the stability of the apps, despite the increased time and cost involved.

A second very interesting option is the use of cross-platform solutions, such as Flutter and React Native through which a developer can translate the code to fit both iOS and Android platforms. To elaborate, Flutter is written using Dart, and compiles its code into a native library which is then attached to each platform project. React Native, on the other hand, is a framework in which the code is written in JavaScript, allowing it to run in the background thread of an application and be translated into native code and components expected by iOS and Android. Both platforms as per our experience perform the same despite their differences and have been gaining increasing acceptance from the development community due to their ability to shorten development time and effort.

The technology stack you would need however is dependent on your idea and the expectation you have of your app, which is why we have penned this article with a comparison of Facebook developed React Native and Google-owned Flutter.

Maturity, community & stability

Flutter alpha was first seen in mid-2017, giving React Native a two-year headstart in building a solid foundation, larger community and access to big players in a market with no competition. Flutter, therefore, might still have issues that have been resolved by the React Native community who provide more support and is generally considered more stable. Google, however, is putting its weight behind Flutter and is fast becoming a force to be reckoned with.

Design

Flutter implements components from its own graphics library, allowing developers to choose between Android’s Material Design and Cupertino’s iOS-style widgets to make an app look the way it should without additional work.

React Native, on the other hand, uses platform-specific components, which makes the components such as buttons or switches look different on iOS and Android. Creating identical apps, therefore, will give rise to additional work.

Time

Flutter as we mentioned previously can be useful for developing apps when time and costs are of the essence. This, however, is not applicable when the app contains a sizable number of custom views and requirements that are difficult to implement.

React Native with its large community of developers, on the other hand, can be useful here its head start on Flutter has created a library of information one can use to troubleshoot any issues.

Maintenance & Updates

An app is not a one-time investment and needs to be maintained well. Both Flutter and React Native are equally good in this regard if one is comparing the time and effort that needs to be invested. Those who work with React Native however, might find their work made easier due to a large amount of information they can turn to online.

Updates are vital for any app as they allow it to add/remove functionalities in response to market changes and keep it secure. Flutter wins this one as updates cause very little problems, whereas apps built using React Native can pose unexpected issues.

Documentation

Flutter’s documentation is very exhaustive and supported by Google codelabs example apps, through which developers can learn how to develop and search for specific solutions.

React Native’s documentation in our opinion is not as good.

Popularity with developers

React Native due to their headstart is more popular than Flutter at the present. Flutter, however, is fast narrowing the gap as we are seeing an increasing number of clients and developers taking it up. You might also want to see the popularity of the two terms on Google Trends over here.

Support for testing

Testing is an integral part of app development and Flutter offers a wide range of support for such tests and provides rich documentation about it.

React Native does a good job of handling unit tests. The same, however, cannot be said for its capability for handling integration or UI tests.

Conclusion

Cross-platform app development is the future, with Flutter and React Native vying for a piece of it. Both platforms in our opinion have their pros and cons, depending on the requirements you expect of the app. What is clear however is that React Native is capable, has more help for troubleshooting issues, whilst Flutter is easier to update and provides richer documentation. We at Mood Up are very curious and excited to see what the future has in hold for cross-platform development frameworks.

Do you have an idea for an app we can help with? Mood Up has extensive experience in mobile app development and offers a one-week development trial.

10 factors you need to consider when picking a software house

Picking a software house is not a task that should be taken lightly as the wrong choice might mean a loss of a sizable amount of money, time, peace of mind and more importantly, opportunity.

This is why at Mood Up encourage our partners (client is a word we steer clear off of) to look beyond the boastfulness and accolades that one sees at first glance and dig deep into a software house’s people, skills, previous work and processes. It might be a tedious task, but one that will pay off in dividends once the project is completed.

1. Presence and market reputation

Software development is no walk in the park and can be a costly affair if done incorrectly.

That’s why we encourage any client looking to develop a product to do their research on the business operation length of the software houses they intend on working with. This will dispel any doubts on the financial stability of the software house in question and create a lasting partnership.

You might also want to take a look at the portfolio of the software houses to evaluate their previous work. Recommendations from clients on websites such as Clutch can also be very helpful.

2. Communication strategy

Communication is vital in any partnership and all the more so in software development as a project’s velocity is dependent on the speed in which issues are discovered, communicated and fixed.

Inquire on the communication tools used by the software houses you intend on working with and find one that matches your preferences whether it be Slack, Jira, Asana or Trello.

Remember, communication with your software house, who are essentially your extended team should be seamless, and not a chore.

3. Partnership dynamics

The strength of a partnership is only as good as its dynamics and this is pivotal when picking a software development partner.

This is why we recommend expending some time to research your potential partners for a good fit. Meet them if it’s possible and/or encourage them to pay your company a visit.

Remember, you need to like the people you are working with.

4. Technology Stack

You need a partner with proven experience and skill sets that match the requirements of your particular app, and not one that dabbles in many programming languages.

Pose your potential software houses with your requirements and evaluate their approach to it. Ask for the credentials of the development team that will be allocated to you. Ask for examples of previous work using the same technologies.

Remember, a good software house should have no qualms about answering any questions a client might have.

5. The work process

Does your potential software development house use agile or the waterfall methodology in developing their products?

If it’s the latter, you might be in trouble as agile work processes such as scrum is now an industry standard due to its ability to increase the velocity of product development at lower costs.

6. Cost model

The cost of development is at the forefront of any customers mind and rightfully so.

Our recommendation is to opt for agile pricing models that charge for the work done as the development progresses versus the fixed pricing model, which can have you paying more for limited functionalities as software house usually add a sizable markup to counter any unexpected issues.

Remember, if the price of a project is too good to be true, it probably is.

7. Scope of service

Some software house provides end to end services that encompass design, development, QA and even listing the final product on iOS and Android app stores.

Make sure you opt for one that has the services you require as close cooperation between designers, developer and QA creates better products, faster.

8. Contracts

Transparency is vital in any partnership, which is why you should ask your potential software development house to provide you with an example of the contract that will be signed.

You are also well within your rights to ask for a non-disclosure agreement (NDA) before submitting your idea for an estimate.

9. Location and cultural fit

Close collaboration is key to a successful partnership.

Working as such, however, is rather difficult if the software development partner you outsource to is on a vastly different timezone and culture.

This is why we at Mood Up prefer to work with clients who nearshore their software to us.

10. Trials

Outward appearances can be deceiving which is why we recommend agreeing on a trial period to test the dynamics of the relationship and all that we mentioned above.

Mood Up offers one free week of development to every client we work with. Get yours here.

8 things to consider before building an IoT app

With the Internet of Things (IoT) helping users with everyday tasks from entertainment, fitness, home automation and security, it’s a good idea to upgrade/create your app on the same. Developing such apps are now easier, thanks to increasing acceptance of users, growth in smart devices and cloud-based technologies. Moreover, such apps allow for integrations with artificial intelligence, allowing connected devices to be smarter and more effective.

Developing an IoT app, however, needs some careful thinking as their development is different from traditional web and mobile apps on account of their always-connectedness.

1. The platform

An IoT platform is essentially the ecosystem that supports and connects the physical devices to each other. They collect the data from these connected devices and provide a platform through which the devices, software, data can be managed and analysed to improve functionality.  

The growth in IoT has garnered the attention of the big tech players such as Microsoft, Amazon, SAP, CISCO, IBM and Google who now offer read made, secure platforms that help app developers to accelerate the pace of development with lower risks and costs. You can also create a custom made platform from scratch, but this might lead to longer and costlier development.

 Choosing the right platform with their technical jargon is no easy task, which is why we encourage you to write to us at Mood Up with your idea.

2. The devices

The physical device you intend to have your app connect with is a very important consideration when developing an app. Below are the questions we like to ask our clients

  • what kind of functionality does your app perform?
  • which industry do you want to cater to? Entertainment? Fitness? Home security?
  • do you own a line of hardware devices you would like to connect to the IoT?
  • would you like your app to be connected to certain hardware or expect interoperability with many devices?

3. Privacy

Privacy concerns are a thorny issue and rightfully so, as our data is a powerful currency in today’s digital economy.

This is all the more important as IoT devices are always online and gather vast amounts of user data on a real-time basis to provide the services it does.

Remember, privacy breaches are costly to a company’s bottom line and more importantly, its reputation.

4. Security

IoT apps are in constant communication with each other, which is what makes them different from traditional web and mobiles apps. Security threats to the firmware, therefore, are more pronounced which is why IoT apps need stringent security protocols and continuous updates.

5. Scalability

With Gartner expecting 95% of all new products to use IoT by 2020, your app should be able to match a growing number of uses.

Doing so will allow you to add more functionalities while keeping security in check to remain relevant and successful in the future.

6. The user experience

Customer experience plays a pivotal part in any app and this is all the more so in an IoT app as it is akin to an extension of a user.

Doing research on customer expectations, features and integrating lean design standards, therefore, is important.

7. Speed and quality

IoT devices get their namesake for their ability to be always connected, which is why speed and quality of the experience are crucial to the success of any such app.

8. Cost

The costs of the building an IoT app as you might have guessed is different from a regular web or mobile app due to its nature.

This, however, is dependent on many factors that include the above, the functionalities expected and the technical skills of the developers you’d hire.

Summary

The role of technology is to ease the lives of its users and IoT devices are its forefront. Such devices provide a very large market potential which is why we are seeing an increased focus on developing apps that are always connected to the internet. Our advice, however, is to first be clear on the idea for your app and then partner with a software house that has the necessary skillsets, experience necessary to advise, build and deploy your app.

Mood Up team several years of experience in developing IoT apps. Take a look at our work in IoT apps here or send us your idea for an estimate here.

React Native Apps vs. Real Native Apps – Which Should You Pick?

Mobile apps have become an integral part of our lives, as are the apps that help in making life a lot more convenient and hassle-free. This is the reason why companies are constantly looking for ways that will accelerate and facilitate the process of creating mobile applications to meet market expectations. Not all smartphones, however, are created equal, which is why app developers need to pay careful attention to their operating systems, in order to develop apps that can run on the said operating systems.

Mobile Operating System Market Dec 2018

Statistics data from the Statcounter.

The question then boils down to picking between iOS and/or Android, the two operating systems holding the largest share in the app market. It isn’t easy, which is why we have a separate guide on picking the right platform for your app.

Once a decision on the platform has been made, the developers must then go about creating the code for the two platforms, which are very different. This is as time-consuming and expensive as it sounds, which is why React Native is fast becoming a favourite amongst the app development community.

React Native AppsAbout React Native

React Native is a cross-platform framework designed by Facebook to give developers the opportunity to create apps for iOS and Android at the same time. It is based on React, which is a Facebook library for building user interfaces and has been used in the creation of apps such as Airbnb, Instagram and Facebook due to its

1. Efficiency

One of the most important advantages of using React Native is the ability to save time that would otherwise be spent on developing two separate versions of the same app. Such time saving allows developers to focus on creating better code at a faster speed, which lowers app development costs for the client.

2. Modular and intuitive architecture

The modular and intuitive interface of React Native makes it easy for developers to migrate and implement quickly on the project. This increases the flexibility of the development team and facilitates a faster introduction of updates.

It is however not without its disadvantages

1. Not for all APIs

One of the biggest disadvantages of the React Native framework is the lack of support with some native APIs, preventing it from being able to communicate with other applications, thereby affecting its overall functionality.

2. Design adjustment

The design adaptation may require writing additional code to avoid confusion in the application as Android and iOS platforms have seperate design guidelines.

Real Native Apps

Real native apps require developers to write separate apps for iOS and Android, unlike with react. Applications for iOS are developed using Swift or Objective-C while Android applications are developed using Java and Kotlin.

About Real Native

Do not discount Real Native just yet, as it trumps where React failed.

1. Best performance

Thanks to the native structure, applications are created and optimized for a specific platform, which makes them very fast, responsive and high performing.

2. Better harmony with hardware

The Real Native approach provides better access to hardware such as  GPS, camera and microphone, which translates into enhanced performance and application capabilities.

3. Easy errors detection

By using basic languages for the chosen platform, the possibility of errors are fewer and can be detected as they happen.

The above however does not come without its own share of disadvantages

1. Higher costs

Making an application for two separate platforms require twice the labour, which translates into longer development and testing time, requiring the client to foot a larger bill.

2. Separate optimization

The two platforms require different levels of optimization to their inherent differences.  This is all the more pronounced when developing for Android, due to a sizable number of versions of its platform in the market.

Conclusion

React vs Native Benefits

The React Native structure is a solution that allows you to deliver applications in less time on both platforms and provides many functionalities. It provides full support for the functions of mobile devices and a high rate of performance, which is why most clients prefer to use it for their apps. This, however, is not a standard and requires careful consideration of the project and its scope before deciding.

Got an idea for an app and not sure whether to opt for React or Real Native?  Drop us a line with your idea here so that we can get back to you with an estimate.

Should You Adopt Lean UX Principles?

In a mobile-first world where clients require faster development cycles whilst adhering to the same high standards of quality, UX designers were in limbo.

It is to fit these requirements that the lean standards were introduced to design, prioritising regular UX interactions with real customers over excessive documentation. Such an approach to design we’ve found is more agile, increase collaboration and allows the design work to be done as efficiently as possible, so that the client receives the best possible product at the lowest possible cost.

Lean UX Cycle

Basics of the Lean UX

The primary function of Lean UX is to be as agile as possible, reducing the traditional UX documentation and long hours spent in design meetings. The team, therefore, focuses on regular interactions with real customers through UX interviews and early testing.

“Design only what you need. Deliver it quickly. Create enough customer contact to get meaningful feedback fast.”
Jeff Gothelf, Lean UX: Applying Lean Principles to Improve User Experience

Such an approach to design, increases collaboration, where everyone is considered equal with no place for gurus or ninjas. This approach, we’ve found brings different perspectives to the table and initiates the simultaneous processing of tasks within the different members of a team.

What’s not to love?!

The lean UX process

Detailed deliverables are not a significant part of Lean UX, as the core purpose is to improve the product here and now.

The traditional requirements in a design brief are therefore discarded in favour of “problem statements” which leads to a set of assumptions, that allows us to create hypothesis statements

General questions we ask to create assumptions include

  1. Who is your user?
  2. What is the purpose of the product?
  3. In which situations it is used?
  4. When is it used?
  5. What is the most important functionality?
  6. What is the challenge in delivering a product?

Hypothesis

A hypothesis contains three components: product purpose, its importance and the personas it is important to.

Hypothesis Statement

Such hypotheses are useful as it guides designers throughout the process of designing a product. Deviations in the MVP are easily discovered when ones work does not fit into the hypothesis produced.

MVP (Minimum Viable Product)

What is an MVP?

Lean UX is all about creating the MVP – a product with just enough features to give the end users a satisfying experience while providing feedback for future improvements. Such minimum viable products are the reason for Lean UX design to flourish.

The MVP is created from both brainstormed ideas and the hypotheses, in order to build a product that has a minimum of all the key components. The MVP is then used to gather user feedback to improve upon previous assumptions and the quality of the product.

MVP definition

Such an approach to MVPs brings down the cost of development, increase efficiency and user satisfaction.

How can one evaluate the success of UX design?

  1. Observation –  directly observe the actual usage of the product in order to understand user behaviour and possible problems.
  2. User surveys – a simple end-user questionnaire can provide fast feedback if user observation is not possible
  3. Usage analytics – building analytics right into the product helps validate initial use and provides application telemetry. This is an incredible way to be up to date with user feedback.
  4. A/B testing – Allows for the comparison of two versions of a product to evaluate and pick the most effective variant.

Conclusion

App design is a costly process, in terms of both time and money, which why lean design can be beneficial for most clients. Such an approach will ensure an efficient design for your app as it can integrate with the agile framework of software development, which we use at Mood Up.

Got an idea that we can help build? Tell us more about it here.

How Do Mobile Bitcoin Wallets Work? – Blockchain Technology [Part 1]

Known by almost anyone with access to the internet, cryptocurrencies such as Bitcoin are being heralded as the payment medium of the future. It is to take advantage of this that a growing number of online and traditional business are now accepting cryptocurrency payments, which is where Bitcoin Wallets become handy.


“The blockchain allows our smart devices to speak to each other better and faster”

— Melanie Swan, the Founder of the Institute for Blockchain Studies


What is a mobile cryptocurrency wallet and how to get one?

A cryptocurrency wallet is essentially an app that gives you access to your Bitcoin wallet address and therefore to your money. Such a wallet could be obtained by virtually anyone on the Google Play or App Store, to receive and send funds in cryptocurrencies like Bitcoin and Ethereum. If you have trouble choosing a wallet, we can recommend the Blockchain Luxembourg app [download for Android] & [for iOS devices] for its design and simple navigation.

As you might have guessed, Bitcoin wallets place a very high priority on security,  which is why every owner is provided with a private key that is needed to access the Bitcoin wallet and sign every transaction. One can, however, make the process a little simpler by setting up a pin code to authorise transactions. Most of such apps also utilise QR-Code technology to facilitate speedy blockchain transactions instead of having the user provide recipient address and amount manually when sending funds.

The development of mobile apps using blockchain technology however is no easy task as the product needs to be secure and stable. Such development can only be done by highly skilled developers with years of experience under their belt, as they require development that is in line with compliance and industry standards.

In the next part, we will take a look at blockchain- the underlying technology of cryptocurrency wallets and its other applications.  

Got an idea for a blockchain app? Let our experienced developers know here and have your idea come to life!

Mobile App Testing: Why You Should Always Do It

Demand for mobile apps is surging year on year, with 2017 topping a global app download of over 175 billion and consumer spending that exceeded past $86 billion. This offers a huge opportunity, with many players attempting to outshine their rivals to increase their share in this space.

Smartphones today are considered very personal devices, with users expecting instant gratification and high performance from the apps they use. The haphazard release of apps, however, is not the solution, with many developers preferring to follow an agile approach to development, supported by a robust testing plan, to ensure the end product is of high quality.

Users also tend to associate their experience of an app with the brand it represents. All apps that carry a brands name should, therefore, be tested rigorously to ensure it functions as it should, in order to prevent any harm to the brand it represents.

Another important reason why app developers should test their apps is compatibility, as there is a vast array of mobile devices in the market, with the number expected to increase to 6 billion by 2020. App makers should, therefore, undertake rigorous test standards to ensure compatibility with the numerous devices and operating systems that exist.

Source: Counterpoint research, 2015

This might not be as big a problem for apps that run on iOS, as Android whose source code is open and shared widely with many OEMs.

An interesting example for this is Facebook, who continue to rigorously test new versions of its products such as Facebook, Messenger and Instagram on over 2,000 devices.

Conclusion

The smooth functioning of an app plays a key role in its success, which is why we at Mood Up base our development and testing on Agile processes. Rigorous test standards play an essential role in ensuring the speed, privacy, security and UX, users expect of an app developed today and should be made a priority. Remember, there is no lack of great apps that failed due to substandard testing!

Why Is Planning so Important in App Development?

With over 7 years of experience in working with clients, we can safely say that no two clients are alike. Each client is unique, with some coming to us with a clear vision of the product, while some require our help in narrowing their ideas down to a product.  It’s as challenging as it sounds, but not impossible as we at Mood Up place a core focus on planning.
Continue reading “Why Is Planning so Important in App Development?”

How to code (pt.1): RxJava + Retrofit

RxJava is an implementation of ReactiveX library for observable streams of data or event by using combination of the Observer pattern (read more). You will find more info on Retrofit (here).

I would like to show you how to call RestFull API enpoints using RxJava and Retfrofit 2.0. We are going to show you how to switch Retrofit’s Services method to RxJava Observable as well.

RxJava and Retrofit in practice

Before we get started, let’s add needed dependency to your gradle:

compile ‘io.reactivex:rxandroid:1.2.1’
compile ‘io.reactivex:rxjava:1.1.6’

RxAndroid included classes to RxJava that makes writing reactive components in Android applications easy.

After that add retrfoit dependencies:

compile ‘com.squareup.retrofit2:retrofit:2.1.0’

If you are using GSON please add converter for retrofit. Converter is needed to deserialize HTTP bodies into your custom class model. If you are not using it Retforit deserilizes HTTP bodies into OkHttp’s ResponseBody.

compile ‘com.squareup.retrofit2:converter-gson:2.0.0-beta4’

Here is a list of official converter modules provided by Square:

  • Gson: com.squareup.retrofit:converter-gson
  • Jackson: com.squareup.retrofit:converter-jackson
  • Moshi: com.squareup.retrofit:converter-moshi
  • Protobuf: com.squareup.retrofit:converter-protobuf
  • Wire: com.squareup.retrofit:converter-wire
  • Simple XML: com.squareup.retrofit:converter-simplexml

You can create custom converter yourselft by using Converter.Factory interface.
Next dependecy will help us return Observable object from Services:

compile ‘com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4’

Thanks to that we have defined Service.

public interface APIService {
@POST(“list”)
Call loadCar();
}

In order to switch RxJava observable only one change is needed:

public interface APIService {
@POST(“list”)
Observable<Car> loadCar();
}

 

Now let’s modify your Retrofit Builder and add CallAdapter and ConverterFacvtory:

public Retrofit provideRetrofit(){
return new Retrofit.Builder()
.baseUrl(“http://api.geo.org/”)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.build();
}

Right, now let’s move to some examples, shall we?

Example 1

We can start and call first Restfull API method with RxJava. Let’s begin with creating simple example that will provide object car.
We are about to do some simple activty where we have included APIService object already and are ready to call loadCar using RxJava.

public class Activity extends AppCompactActivity {
APIService apiService;
@Override
protected void onCreate(Bundle savedInstanceState) {
apiService.loadCar()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
}
}

Now we want to call asynchronous task. In order to do that, we have to use subscribeOn(Schedulers.io) to execute the observable on a new thread.

If we want also to get result in main UI thread, we have to use observeOn(AndroidSchedulers.mainThread()) which means that result emits through on the main UI thread.
subscribe() method is kind of trigger. If you don’t call it the request never executes.
If you take a look closer to subscribe method you will notice that there are more overloaded methods. I prefer to use subscribe method and handle errors. I will explain this below.
Let’ modify our request and add to subscribe method parameter Subscriber.
It should look like that:

public class Activity extends AppCompactActivity {
APIService apiService;
@Override
protected void onCreate(Bundle savedInstanceState) {
apiService.loadCar()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Car>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Car car) {

}
});
}
}

There are couple of important things. Let’s start from onNext method. That method provides you with response for loadCar request, in our example that is object Car and immediately method onComplited executes.

onNext method calls everytime unless you have kind of error, for example JSONException, IOException etc. In this case method onError called instead of onNext() and onComplited doesn’t execute.
There are couple of cases to execute onComplited and onNext instead of onError when you have error. But that is subject for next tutorial.

Example 2

Let’s see what happens when we use subscribe method without parameters. We are going to resource Observable and find couple of overloaded subscribe methods. Let’s check subscribe() method:

public final Subscription subscribe() {
Action1<T> onNext = Actions.empty();
Action1<Throwable> onError = InternalObservableUtils.ERROR_NOT_IMPLEMENTED;
Action0 onCompleted = Actions.empty();
return subscribe(new ActionSubscriber<T>(onNext, onError, onCompleted));
}

On the surface everything looks pretty nice. Above we have three Action object for each action in our request. But what is weird is static value:

InternalObservableUtils.ERROR_NOT_IMPLEMENTED.

Take a look closer, In InternalObservableUtils class found:

public static final Action1<Throwable> ERROR_NOT_IMPLEMENTED = new ErrorNotImplementedAction();

Implementation class ErrorNotImplementedAction with method call will throw exception:`OnErrorNotImplementedException`;

public void call(Throwable t) {
throw new OnErrorNotImplementedException(t);
}

Final note

So if we subscribe to observable using subsribe() (method without parameter) it will work fine. But as I wrote above, it is possible to get error which is handled by onError method. In this case you will have crash because of throwing exception OnErrorNotImplementedException.
We should handle error in our side either by implementing onError action or providing Subscribe object.

Hope you enjoyed this coding tutorial, you can expect more in the future.

How Much Does It Cost to Make a Mobile App?

A key question on the mind of any client that approaches us with an idea for a mobile app is the cost it would take to develop one. It’s a natural question and one that has no hard answer as the cost varies on many factors. This is why we at Mood Up invest a sizable amount of time into understanding a client’s requirements and expectations of a product, preferring agile pricing over a fixed priced.

Some factors such as the ones below, however, are ones you should pay attention to

1. Your priorities

You’ve probably seen the image above before and with good reason.

If anyone tries to convince you of a possibility to have all three, hire him for your sales team and not software development.

Remember, if something sounds too good to be true, it usually is.

2. In-house or Offshore development

Building your software in-house can be cheaper than outsourcing if you have a pool of talented designers and developers waiting on standby.

This, however, is not the case for many companies, which is why they prefer to outsource software development to independent companies such as Mood Up who possess the skill sets and experience needed to meet expectations.

We at Mood Up are strong believers of nearshoring, which provides customers with all the benefits seen with offshoring business processes and more.

3. Devices and Android or/and iOS platforms

With the numerous amount of devices that users today connect to the internet, it’s important that you decide on the platform you’d like to be on.

Not sure how to do so? Take a look at our tips for clients when considering the platform for their apps.

4. App design

Apps with beautiful User Interfaces (UI) and Experience (UX) do not happen by chance. They are the result of many hours of scoping, wireframing and numerous round of designs.

As you might have guessed, higher UX and UI quality can increase costs, which is why  we pair designers and developers together to ensure a balance between cost and efficiency.

5. Features

An app that can do everything is not good for anything.

Be clear about the function you want your app to serve and stick to it.

The features you expect of your app should be made clear to the developers from the start as the planning for its development depends on it.

6. Maintenance

Building an app is not a one time task as you would think.

Its process that one must pay careful attention to, and improve based on user feedback, bug reports, security and operating system updates.

7. App testing

First impressions are important and launching an app riddled with bugs will have disastrous consequences.

Testing is paramount before launching an app, but they do not come cheap.

8. Marketing

You’d be forgiven for thinking that the costs of an app are only technical and the only thing left to do is to figure out a monetization strategy.

But how would you reap the benefits of this monetization strategy if you haven’t got any users?

Remember to integrate the cost of marketing to your app.

Conclusion

App development is not an easy task, which is why we help our clients with detailed strategies for execution. It’s important to remember that there is more to developing an app that you would see on the surface, and the costs will reflect it. The above eight factors, however, should give you an understanding of the factors you should take into consideration.

PS- never trust a developer or a software house that asks too little questions. The questions you should be asked now will make sure there are no unpleasant invoices later on.

Have an idea that we can help develop? Tell us more here and we can get started.

6 Reasons Why Nearshoring in Poland Is a Good Choice

Scaling a business brings a fair bit of what we like to call growing pains, requiring many considerations from the owners part. One such key consideration that we would like to highlight today is the investment one must make in a product, to ensure it creates real business value and continue to do so.

Of course, you can opt to hire a software developer or delegate it to an in-house development team if you have one. Doing so, however, might lead to lower creativity, reduced innovativeness with longer development times and higher costs.

Such recurring issues is why many clients prefer to hand over their ideas for growth to external software houses who possess the required creativity, tools and technical expertise to deliver high-quality products at lower costs.

What is nearshoring?

Nearshoring as you might have guessed is a derivative of the term offshoring and is essentially the outsourcing of processes to companies in nearby countries. Such outsourcing of work to countries near each other is proving to be quiet popular in Europe where most nations are only a few hours of flying away.

Example- a customer in London can outsource their work to a company in Poland and make periodical visits to check on progress with a two-hour flight.

What benefits does nearshoring bring?

Nearshoring shares a few benefits with outsourcing

  1. Lower costs –  a client that opts to nearshore their work incurs lower production, research and labour costs.
  2. Access to a larger talent pool – you can hire professionals

Some advantages, however, are unique to nearshoring

  1. Same time zones– large time zone differences make regular communication difficult, leaving both parties bleary-eyed with late-night/early morning consultations. Nearshoring remedies this as the lack of large time differences reduce the need for developers to pull graveyard shifts, improving their quality of code.
  2. Fewer cultural differences – being on the same continental region means fewer cultural differences and enhanced cooperation.
  3. Faster problem-solving – being on the same time zone or in one close to the developer provides the client with the ability to reach out and highlight any issues. The developers, in turn, can respond at the same speed, leading to faster problem-solving.
  4. Proximity – short distances allow for more frequent and less expensive face-to-face meetings that will definitely boost the productivity of the collaboration. This is important to us as we take a partnership approach to our clients and require their full involvement, just as we send our team to client HQ.

Remember, teamwork makes the dream work!

Why choose Poland for nearshoring?

  1. Software development services are competitively priced.
  2. The population of Poland is larger than Scandinavian countries combined and produces over 40,000 IT engineers each year.
  3. Polish engineers are considered one of the most competent in Europe when it comes to new technologies. Their skills are enhanced by Poland’s membership in the European Union and Schengen area which allows for the free exchange of labour and information.
  4. Polish culture is inherently European, ensuring a closer fit with other European clients. Poles are also very adoptive with high communicative skills in English,  seamlessly integrating with cultures outside Europe.
  5. Poland’s geographical location in central Europe makes it accessible from every major European city within 2 hours.
  6. The Polish economy shows constant growth, with high levels of trust and a low level of corruption. This stable political and economic climate makes it very conducive for business.

Conclusion

Outsourcing software development can be a nervewracking affair for some clients.  Nearshoring, however, is a very interesting and promising alternative, with Poland leading the way as a trusted powerhouse for high-quality software development.

Interested in having a conversation about how we can help build your product? Tell us more about it here.