Teammate Android; From #Startup to Open Source Software
I like to moonlight as a UI / UX designer
TJ Dahunsi
May 22 2019 · 4 mins
Teammate Android: From #Startup to Open Source Software
I like to moonlight as a UI / UX designer
In 2017 shortly after being offered my first Senior Android Developer role, I took some time to reflect, and in doing so realized most of my professional development had occurred at places I’d worked; should I omit my employers from my resume, there really wouldn’t be much left.
Now this isn’t a bad thing, but I wanted to build something I could call my own. Something I could point at and say: I did that. I came up with the architecture, the design, the spec, the MVP and stuck with it all all through conception, execution and delivery.
Fortunately for me, I had a friend who was looking to try his hand at something new as well. Together we built
; he built the iOS app, and me, the Android app, backend and website. Ron was more CEO, high level decisions, spent cash and I was more CTO, I messed around with code and suggested when we spent money on. This side project is what propelled me from Android Developer, to Full Stack Software Engineer. So, let’s talk about that stack shall we?Teammate is a MERN web application built entirely on Google cloud:
Database: The MongoDb instances for both Dev and Prod are managed by mLab (Now acquired by MongoDb Atlas) and hosted on Google Cloud and visible only to IP traffic from the Google Cloud project VPC.
Multimedia storage: Hosted on Google Cloud Storage, the dev environment uses a staging bucket so uploads are automatically deleted after 2 weeks, while prod uses a standard bucket. The app uses Google Cloud Vision to filter any obscene materials that are user facing like user photos or team logos.
Chat: Provided via socket.io which is just an absolute delight to use. Since server instances are ephemeral, all socket servers are kept in sync with a Redis adapter.
Server: A simple Express.js server on Google Compute Engine. The Dev instance is a single non managed node, the prod instances scale to meet demand and is backed by the Google Cloud Load Balancer.
Website: The production website uses Angular 2 and Bootstrap, while the development website uses React.js and Material UI. See if you can spot the differences!
Suffice to say, in the 2 years I built both the Android and Web Applications for this app, I’ve really really fallen for Google Cloud as a one stop shop for PaaS solutions. I even bought the domain on domains.google.com.
Now let’s talk the Android app. It:
Is offline first
Is pseudo single activity and heavily fragment dependent (It’s got 2. Registration is it’s own activity and flow, the rest of the app is the
MainActivity)Uses the latest iteration of material design including expandable Floating Action Buttons, vertical drawer navigation, bottom sheets and the like.
Makes animation and transitions a priority and treats them as first class parts of the user experience.
Is Android Q edge to edge ready.
Highly themeable, checkout the feature/nike branch for a Nike inspired theme.
In it you’ll find most of the current libraries and architecture patterns that dominate Android today with RxJava, Android Architecture Components like Room and ViewModels, Google’s Material Design, and so on making appearances. So go on, give it a click: tunjid/teammate-android A Team Management app for creating tournaments and games for various sports - tunjid/teammate-androidgithub.com
So what’s next for Teammate? Nothing really; I’ve gotten from it what I set out to, the satisfaction of creating my own thing. It’s been extremely fulfilling and I am immensely proud of it. It’ll remain a free service, until it’s too expensive for us to host anymore at which point the prod server will probably go down and the dev server will be just what’s left. This most likely will be at the end of July when Google switches to the new Places SDK. For a duo, their new pricing is completely unaffordable.
Ironic isn’t it? That Google, what made Teammate viable in the first place with Google Cloud, would be what makes it untenable with Google Places?
Did you ever hear the tragedy of Teammate the app? I thought not. It’s not a story Google would tell you.
It’s part of the reason the Android app is now open source. The open source community is where I found the tools to build this whole project, the very least I can do is give back to it in some way, hence the extremely permissive MIT license.
That’s it! A summary of the amazing experience of being #StartupLife for a hot second. I learned quite a lot, SSL, DNS, Database Administration, Load Balancing, SQL or NoSQL, REST or GraphQL, RxJava or Coroutines, React or Angular, and so much more. The full stack is a huge space, rife with opinions that are can easily be taken out of context and applied to the wrong scenarios. I’m just glad to have taken the very first steps to navigating it as my software career progresses.