Building Co-Touch: Goals & Introduction
Tags: showdev, learning, devjournal
Published: 2020-01-07 19:52:58

---
title: Building Co-Touch: Goals & Introduction
published: true
description: The first post in a series on building a new project and learning new languages.
tags: showdev, learning, devjournal
---

# Building Co-Touch: Goals

Today was my first day at [the Recurse Center](https://www.recurse.com/), where I'll be spending the next six weeks taking some time off of client work and focusing on learning some new things. My goals for my time here are:

1. To work with new programming languages for both backend & frontend.

    I have been working as a freelance full-stack developer for the past 7 (almost 8!) years. During that time, I've worked with PHP, Python, Javascript, and a little bit of Ruby - but, Javascript has become my go-to and is what I use for almost all of my work at this point (Last year I made the switch to Typescript, but that's another blog post). On top of that, all of my frontend web work is usually done in React: it's what I know best, and I don't want to jeopardize or slow down a client project by diving into something new.

    So, having the space and time to work on something of my own, I want to branch out.

2. Publish a cross-platform app.

    Other than some small projects using Cordova, I haven't had the opportunity to build native iOS and Android applications. I want to grow in my career as a developer, and mobile apps have felt like an un-checked box for a few years.

3. Write more.

    That's what I'm doing here. I never had any formal training in programming; instead, I learned through people who were posting questions, blog posts, tutorials, and classes online. Most of what I have learned from was shared freely. It is amazing to be part of a community that values learning together in this way, and I want to be better at making a contribution.

4. Form a healthier relationship with work.

    This is a "meta" goal for my time at the Recurse Center. As a freelancer, it is easy to overwork. You don't see coworkers clocking out at a regular time, and if you mostly work alone, it's hard to get a sense of how much work is "enough" for one day. I tend to work compulsively, and too much, and have experienced burnout too many times. I won't be writing about this much in subsequent posts, but this is a big goal for me this year, and I also think it is important that we (as developers, as humans) are open about things we struggle with.

# Co-Touch 👉👈

This idea is fairly new, and I'm still not sure of the best way to describe it. But, after meeting a handful of other fresh Recursers this morning and discussing what we will be working on, I've formed a bit of a sound-bite: Co-Touch will be a kind of chatting app, using collaborative drawing instead of messages. I want it to be simple and playful, inspired by apps like [Flight Simulator](https://flightsimulator.soft.works/) and [Dialup](https://www.dialup.com/).

The general idea is that you'll share some kind of canvas with another person, and "draw" to each other instead of sending messages. The drawings will be simple, ephemeral, and time-based - like drawing with your finger on a foggy window.

I don't have any mockups - things are all still very loose, and, since I don't have any collaborators, I think it's OK to just keep it all in my head for now.

## The Stack

1. **Mobile Apps**

    Right now, the choices I have come to for mobile app development is either React Native or Flutter + Dart. The latter is appealing because I want to learn a new language, but Flutter doesn't include the kind rendering engine I can use to "draw" in the way I am hoping to. But, it is able to interoperate with Javascript, which leads me to:

2. **Drawing**

    I've decided to use a web-friendly renderer for the drawing, maybe working directly with HTML5's `canvas`, or using a library like [p5.js](https://p5js.org/). This part of the project may be the most technically difficult one, so trying to achieve it in a new language might be taking on too much.

    Also, it's important to me that the drawings can exist online, so using javascript seems like the natural choice. While the experience I want to create is primarily a mobile one, I may still want to be able to include some functionality in the browser.

3. **Backend**

    I will need some kind of backend & API. Users will need a way to connect with each other somehow, and I want them to be able to save and replay the drawings they have created together. A simple REST API feels like it makes the most sense, but I'll still need to consider:

 - Real-time collaborative drawing - websockets will be involved, and I'll need a way to stream users' "touches" (or strokes) to others as efficiently as possible.
 - Database - Each drawing will be stored as a long list of touches, and not as static images, as I was originally planning. A drawing could potentially be made up of thousands of touches, so I'll need a database that can performantly save new entries and fetch many at a time. I am most familiar with Postgres, but I have also done a little work with [DGraph](https://dgraph.io/) and might give that a try.

Six weeks is not a lot of time - especially when you are surrounded by dozens of people working on all sorts of interesting projects. We'll see how much of the above I can really get through in my time here. If I end up with a simple MVP, or even just getting the hang of a new programming language, I'll leave happy.

Stay tuned here on [dev.to](http://dev.to) for more posts as I continue working. If you have any questions, advice, or feedback, please chime in in the comments, or on twitter at [@typeof_goodidea](https://twitter.com/typeof_goodidea).

A little bonus: this morning I had a pair programming exercise to build John Conway's [Game Of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) - [here is what we came up with](https://gist.github.com/good-idea/2648bcba48d3dd26c686f7c54f8391a6).