Microsoft apps and teams

Currently, Microsoft has more than 150 apps published by different teams in the Google Play Store, with around 70 in active development receiving frequent updates.

9 of them have more 100M downloads.

5 of them have more than 500M downloads.

The average rating is 4.2 stars, and on apps that have more than 1M downloads, the average rating goes up to 4.33 stars.

Apps are developed in all Microsoft divisions and across 15 World Wide sites.

The following map shows where our Android teams are located:

As you can see, we have many different locations, in many different countries like USA, Canada, Germany, England, Norway, Czech Republic, Israel, India, and China.

In these locations, we can find teams such as Outlook, LinkedIn, PowerPoint, Microsoft Launcher, Yammer, Word, Skype, SwiftKey, Edge, and many more.

Some of these teams are distributed teams, so they do not operate in just one location. For instance, Outlook has people working on it across the globe based in San Francisco, Redmond, New York, Hyderabad, Bangalore, and Suzhou.

Other teams have people located in just one location like OneNote in Hyderabad.

However, regardless of the internal structure of a team, they all collaborate and interact with other teams across the world.

This variety of teams, apps, and locations make our teams very heterogeneous.

How do we work?

The way different teams work can vary quite a lot across the company. Every team chooses how they want to work in all aspects, methodologies, processes, technology, etc.

For instance, some teams could work by following Agile methodologies, but others could follow a more incubation-style approach to working as they try to create prototypes to test out.

Programming languages

As mentioned, every team chooses how they work, so they also choose which programming languages they want to use.

Some teams could be using just Java as their main programming language, while others could be already working with Kotlin, or even using C++ for code sharing, etc.

Kotlin is definitely a trend at Microsoft. Many teams have already moved to Kotlin and all new code that they develop is written in Kotlin.

Teams such as Sticky Notes embraced Kotlin even before Google announced its official support 2 years ago.

Others like Microsoft To-do have embraced Kotlin later, writing all new code in Kotlin.

C++ is something very important for many teams as well. Products such as Word, Excel, PowerPoint, amongst others take advantage of code sharing so they can share the same core logic with all different apps and platforms.

If they had to write their logic several times, maintaining it, and keeping parity, the effort would be much larger.

And what about other languages and frameworks?

There are apps that are wholly written in, or have components written in, React Native or Xamarin as well.

For instance, Skype has many parts already written using React Native but also uses Java, as well as C++ for hardware related shared code; while Microsoft News is an app fully written in Xamarin.

So as you see here, we are pretty flexible with what programming language we use. We stay on top of industry trends and take into account the great views and experiences of developers within the Android community, and try to experiment as well, whilst still taking into account our different business needs.

Architecture and testing

You guessed it :-D. Every team is flexible to use the architecture they want to follow.

From architectures that don’t use other frameworks to those that use just a few, to completely RxJava-oriented apps, to apps that follow an unidirectional data flow approach, to apps that make extensive usage of Architecture components or apps that follow Uncle Bob’s clean architecture.

Every app and team has the freedom to choose what they want.

In terms of testing, the same applies. Some teams rely completely on unit testing and UI testing using Espresso, while others can use also Appium and/or Cucumber, etc.

Some teams also have their own custom frameworks they have developed internally to further improve their testing and better their QA process.

We are also early adopters of the new improvements Google makes on Android. App bundles and dynamic features, just to name a couple, are some of the latest Android features that some teams use.

We even submit bugs and talk to Google when we find issues, etc.

Code, build and release management

We are open to using tools that are better for our needs. Whether they are proprietary or FLOSS, the only restriction we have is that it must meet the high bar Microsoft sets when it comes to our privacy and security.

Microsoft values this very highly and thus we have extra measures in place to ensure there is a thorough review process before use.

Regarding how we use our source code and build our projects, some teams use GitHub (yes, even before it was acquired), while other teams use Azure DevOps, which includes everything you need to host and build your software.

Of course, as we’ve said before, it is up to each team to decide what tools they use. For instance, some teams handle their build pipeline using Jenkins, whilst others may use Azure DevOps.

Using a combination of alternatives is pretty common for us.

For internal distribution, we mainly use App Center, which can be used not just for Android but also for apps on platforms such as iOS, Windows, Xamarin.

We also take advantage of App Center for bug reports and analytics, as well as for test cloud devices.

FLOSS

Far behind are the times where FLOSS at Microsoft was something similar to being forbidden. Currently, Microsoft embraces it, and engineers are encouraged to use it whenever it’s needed. No more reinventing the wheel.

Of course, we are talking about a big corporation and the misuse of FLOSS could end up placing the company in a bad position. For this reason, we have a tool which scans the provided source code to verify it is really under the license it says it is. Our internal tools have access to the source repository thus can easily be able to scan it.

We also can ask (depending on the purpose of your business, it can be required) to run an Intellectual Property scan. This will run many tests and cross-references to see if the code has parts of it that are under other different licenses that the ones were explicitly cited in its license document/repository.

This scan, even though it takes time to complete, is really helpful since you can see any legal/license issues (i.e. code that was copied-pasted and under a non-compatible license) that are critical and that were not mentioned anywhere.

Things that basically all our apps have to do

Authentication. MSA and AAD are the main ways to authenticate that we have to implement.

For those not used to Microsoft authentication, MSA refers to Microsoft accounts, like the ones you can create easily such as @outlook.com and @hotmail.com.

AAD in the other hand is oriented to enterprise and school accounts under the Azure Active Directory (AAD).

We have open source libraries that help you to support these authentication methods, so if you are interested and want to use them in your own apps: MSA and AAD.

Many apps also implement multi-account like Outlook, Microsoft To-Do, OneNote, etc. you can log in with both your AAD work account and your personal MSA account. So without having to log out and log in again, you can use in the same app two different accounts with your different work and personal spaces.

Another related auth feature that we also add to our apps is SSO (single sign-on) so when a user logs in, it enables access to any of the different Microsoft apps that have implemented it. In our case as first-party apps, when you sign in using your Microsoft account on apps that have already implemented Microsoft SSO, you can log-in on them without providing your credentials anymore.

The other thing that we usually have to work on is on supporting Intune, which is used to enable app protection policies. For instance, Intune is used on corporate mobile phones to allow wiping the data if for instance the phone was lost and it had sensitive information in it, amongst other actions.

If you are interested, you can have a look at Intune here.