Build Strong Connections

Hope you are well and having at least a little fun this summer.

I wanted to share with you a web app that I've written to help me stay in touch with people I've met throughout the years. I'm calling it Build Strong Connections. I hope you check it out and give me feedback (positive and negative) on if/how it can help you and how I can make it better.

Its not a (sales) CRM. Its a tool to help you remember to reach out to and follow up with the people you meet at conferences, at work, during your everyday life, etc. that you want to keep in touch with but may end up slipping through the cracks if you're not careful. Think of it like a smart address book ... or Rolodex if you are old school.

It is something that I personally have found incredibly useful over the years and has helped me keep in touch with friends, colleagues, mentors, co-workers, bosses, clients, band mates, and many other interesting people.

I know we already have Facebook, LinkedIn, Twitter, etc ... and those are great for what they do. But I never found them to actually be useful for reminding me to reach out to the the people I really want in my life more ... and I end up with a million connections to people I don't really know and haven't spoken to in years.

So, if you've ever found yourself saying "We should stay in touch. I'd love to continue this conversation and ..." but then not actually doing it. Build Strong Connections is for you. The next time you are in that situation, whip out your phone, get the person's email, send them an email with a brief note and BCC and they'll be added to your list.

Later you can log into the system, pick a rough cadence and add details to jog your memory. The system will remind you periodically of which connections you need to get in touch with next. A simple "how's it going" or "I saw this thing that reminded me of our conversation" or "I thought you'd enjoy meeting ..." will go a long way to building strong connections.

On the detail page you can add a photo, notes, emails, links, as well as super powers and important goals for your connection. The text is (fuzzy) searchable so when you have that thought "Who was that person that XYZ?" you can find them. And the cadence you specify gives you a rough schedule for the next contact based on the last contact. You can pick a specific date for the next contact but this is not a todo list, calendar or CRM. It is a super simple system to keep you connected.

Give it a shot, (it is free while in beta and will be very affordable afterwards) and let me know how it works for you. There is still TONS to add and fix. And I'll get to it. In the mean time, let me know what you love and what you hate about it. All feedback is very useful, and will help shape the product and inform work prioritization. I really appreciate it.



PS. Re-Writing Build Strong Connections

Actually, a couple of people have asked so, let me go back to the re-writing part. I've written, re-written and used a version of the Build Strong Connections many times before over many years. I may have even told you about it. So this might be familiar.

Its a project that I've needed most of my adult life as I've moved around a lot. First for the army, then college, grad school, personal reasons, my crazy NYC years, my wife's grad school, her post doc, that time I had Johnny law on my tail and had to vamoose (kidding), etc... At each step I've lost touch with people I'd really like to keep in my life (it's difficult when you are an introvert and difficult as an adult when people move and change jobs constantly) and I'd like to try to minimize that as much as possible going forward.

It is also a project that is just complicated enough that its a good test case for every new technology and programming language I've investigated (and there have been a lot). So I've written and re-written in: Objective-C for iOS and MacOS and in Node, Meteor, Clojure/ClojureScript, Elixir, Elm, Rails, Hasura, Amplify/Appsync, etc.

This incarnation of the app is written in TypeScript and uses the Firestore database as well as Firebase Functions and Auth, oh and TailwindCSS (don't blame Tailwind. I'm just a lousy designer). This is a great stack BTW, IMO.

A couple of people have asked me about my tech opinions and the whole experience, so at the risk of starting a flame war, I've added some rough notes below.

Let me state first that your favorite language/framework is awesome and you are totally right for choosing it. I'm just not smart enough to appreciate it like you do.

So some random thoughts.

All languages and frameworks have warts. Some because they are old and crufty and others because they're new and incomplete

Python has a great machine learning eco-system. The language itself is simple enough but single threaded, interpreted and mutable ... but serviceable. Packaging is a mess. Pipenv/Conda help but don't really solve the issue. Docker is a big help.

Javascript has the most reach and support. Any new system/service out there is going to have a JavaScript SDK, documentation, tutorials, etc. That counts for a lot because there is a lot a modern (solo) fullstack rockstar ninja 10X dev needs to know.

Typescript greatly improves JS. Recent versions of JS are a lot better (even pleasant to use!) but you really should use TypeScript. Not everything directly supports TS but you can get type files and work around most issues.

Elm is awesome. But you need interop and Elm makes it a pain.

ReasonML is interesting. But not having interop libraries to many JS libraries slowed me down a lot. Plus trying to learn multiple technologies at once is a huge challenge. Dealing with BuckleScript and OCaml and React and GraphQL and various unsupported libraries all at the same time was too much for me. That is not necessarily Reason's fault but that was my experience. I may give it another shot in the future.

Clojure/ClojureScript (ie. LISP) has the best REPL driven experience. Its definitely something I miss with other languages and Jupyter and Swift Playgrounds are similar but not the same. These days I'm becoming more and more of a fan of types so that is a weakness here. There are typed lisps (Racket) but then the support/reach issue becomes a challenge.

Rust is probably my current favorite. I love the speed, power and type safety. It builds a single executable and targets many platforms. Unfortunately I haven't been able to use it extensively in my work but I hope to in the future. Also to be honest, most of the time that I feel the need for speed its for machine learning related projects and in that case Python, as a scripting language for C++ and old Fortran libraries, is probably faster (both to write and run) and if not safer in a loose pointer sense perhaps safer in a numerical stability sense (those old Fortran libraries are there for a reason). Plus Python has great support for GPU related libraries ... so for those types of things Python is probably faster... as weird as that sounds.

Go is simple and a commercial success. It is fast (to compile and at runtime), builds a single executable and runs on multiple platforms so is super popular for micro-services and Kubernetes and there are a lot of jobs/gigs. ... but it may be overly simplistic for my tastes (enums, errors, generics, etc). ... still, if you are paying ...

I want to like Swift. It's an elegant language somewhere between Go and Rust. Support for Linux (and Windows) is coming but lags behind the Apple platforms which causes issues with the standard library, threading frameworks, other iOS only (intentionally and accidentally) libraries, tutorials, documentation, etc. I'm not in the iOS world anymore so that is a challenge. Also there is the Swift4TensorFlow project which is appealing on the surface but it is still early days for that project. ... so every time I try to use it I find Python, Rust and Typescript to be better/easier/faster and more widely supported.

Elixir is really interesting. But maybe it's time has passed. If you are not writing software for a telephone switch in the middle of a frozen tundra there are other ways to achieve scale (serverless) and speed/safety (Rust). Again, if it works for you great!

React and component based front end systems are great. Other frameworks may be good too but React is good enough for me. Template (ERB, Mustache, Jinja2, etc.) based systems are not.

create-react-app works fine for single page apps. Managing client side state, which you need for JWT and cross page caches lets say, for server side rendered frameworks is a challenge. You can pass a token to the server and set it in a cookie or something but JWT libraries want to stay in memory so they can refresh tokens and get user info. So a persistent SPA seems to me to be the way to go for apps in the browser.

NextJS is great for content based sites. Server rendered component systems are great for fast content based sites. Again other systems may be good but NextJS works really well. I liked Gatsby for a while but it may be more complicated than necessary and I think I can do everything with NextJS now.

TailwindCSS is great. At first it feels like you are duplicating your CSS but often there are more exceptions (the left widget is different than the right widget which is different than the middle widgets ... on some screens) than you realize and true duplication is easy enough to remove with JS/TS and @apply in the CSS file. It abstracts just enough and lets you combine parts to be super useful.

AWS has a lot of services. But it is a pain to sort them all out and get good documentation and examples etc. The product names are their own special challenge. Just try searching for an issue you are having with the HTTP API (gateway). Not that 'Go' is any better and apparently there is a game called Rust that sucks up all the SEO.

I'm not smart enough to use DynamoDB well. I have PTSD from single table designs. Actually, I think the issue is that, while great as a key value store (think shopping carts), a lot of what I work on needs slightly more complicated queries than DDB supports even with compound keys and multiple GSIs. Fans expound the development speed and the standard line is the complicated queries belong in an offline system. I don't buy it.

GCP was easier for me. Firestore and Firebase are great. With Firestore you can arrange data hierarchically (more document oriented) so you have an implied join at each level and you can query on any field and even build indexes for 'key' and 'range' type queries. Not the full power of SQL based queries but much easier to use than a predominantly key value store.

Hasura and PostgreSQL are fantastic. Writing backend CRUD code is so last decade, Boomer. Seriously, Hasura is great and if you want to use PGSQL definitely take a look at it. The only reason I don't use it is that I'm cheap and lazy and did not want to stand up and manage a a PG database, even if I could get one starting $9/mo, and didn't feel I needed transactions. In some ways Hasura is similar to but far far easier than Amplify.

Thanks for letting me get that all off my chest. And again if you have an emotional/financial/religous investment in any of these technologies, I'm sure you are right and I am wrong and I hope you accept this as one crazy internet rando's experience. There are more important things in the world to focus on.

Stay safe. Stay connected. Find beauty and peace wherever you can.


Want to get notified of new articles and projects?

Get an occasional email with AI/ML and project info.