Lunch is an internal to Microsoft, Windows Phone 8 app that allows Microsoft employees to create and join public lunch groups in an effort to help diversify their network. After I pitched the Lunch App I recruited a group of engineers, testers and designers to collaborate and build the app. The app we came up with was a bit different than we had originally planned. After a few focus groups we learned that people wouldn’t necessarily feel comfortable making themselves available for anyone to have lunch with them on an individual basis, but they would be much more comfortable doing it as a group. Therefore, we decided to focus on the group scenarios.
MVP
For our first version we decided we would create a solution that would make it easy for any company employee to create or join a public lunch group. To create a sense of common interest and therefore make it easy for people to come together, each public lunch group would have a specific topic of discussion. Features included - sign in using Microsoft credentials, create lunch group, delete lunch group, join lunch group, cancel lunch group, view other members of lunch group, tile notifications, choice of 2-10 attendees, specify location, and search lunch groups by categories (today, this week, and more).
For our first version we decided we would create a solution that would make it easy for any company employee to create or join a public lunch group. To create a sense of common interest and therefore make it easy for people to come together, each public lunch group would have a specific topic of discussion. Features included - sign in using Microsoft credentials, create lunch group, delete lunch group, join lunch group, cancel lunch group, view other members of lunch group, tile notifications, choice of 2-10 attendees, specify location, and search lunch groups by categories (today, this week, and more).
Version 2
After receiving lots of great feedback, we added many more features. We made it so every time you joined/created a lunch group it would sync to your outlook calendar, you could email all members of a lunch group at a touch of a button, you could create private lunches using your Outlook distribution lists, and you could receive toast notifications when people would create a lunch group.
Here is what the final app looked like.
Here are some of the technical details.
We created it using the MVVM design principles; it is written using C# and XAML.
When the user chooses to sign in, they are directed to a sign in page provided by Azure Mobile Services (AMS) where they type in their Microsoft Domain account. AMS calls Azure Active Directory (AAD), which is a copy of Microsoft’s Active Directory, and asks for an authentication token. When AAD ensures the user is who they say they are, it sends a token, or a string of random numbers that AMS needs in order to grant access to the app. The token is cached on the client’s Random Access Memory (RAM) and then Lunch uses the token to call AAD to retrieve information about the user (Name, Title, Org). Once the app receives this information it stores it in an Azure Database we created for easier retrieval. All of this happens the second after the user types in their credentials and are waiting to enter the app. The token actually comes with an Access Token, a Refresh Token (that allows the access token to be refreshed without having the user type in her credentials), some user information and an expiration date. After a few days, the tokens expire, and the user will need to go through the sign in experience again in order to receive a new token.
Our database has the following tables - UserInfo, Groups, UserPhoto, Attendee, User login, User Channel, User Messages, Locations, and Message Counts. Between our app and the database tables there is an Application Programming Interface (API), that we have used Node.js to create. Our API doesn’t look at the databases, but rather another level of abstraction - stored procedures using SQL (sprocs). The way it works is the app uses a web request to contact AMS, which then contacts the sproc, which looks at the sql tables and returns the information to sprocs and then the api and then the app.