Projects and Updates, 2019-10-01

Projects and Updates, 2019-10-01

A quick party hack: I've been adding Post-It Notes to my door to let guests know they've found the right place. (The crowd favorite is a note that simply reads: "It's this one.") We've all experienced being unsure you're in the right spot; this helps.


Playlist of music in this post: Spotify


Event Planner/Invitation Managing App
I had a burst of productivity in July and added an entire grip of helpful features to my event planning app.

Previously on CKDSN...

Mass Adding Contacts to Tags

Last quarter this was incomplete and now it's done. In the image below, I've added three baseball players to the baseball tag, all at the same time.

Screenshot5_previously

Dynamic Titles for Screens

There's a title at the top of most screens in Android. While developing my app, I got into the habit of "titling" each screen with the name of the dart file that produced the screen. So, in the picture below, the screen is titled "ShowEvents" and the code that produces that screen is saved as "route_showevents.dart".
Screenshot1_staticTitle-1

At the time, it was a strictly utilitarian decision that made it easier to find the correct batch of code when debugging the software. And it worked well until I increased my actual usage of the app.

Eventually, I realized if I'm adding people to multiple events, sending text messages, and checking information in other apps, it's easy to lose track of which event I'm currently editing when the screen is simply titled something like "AddInvitees". (Am I currently adding invitees to the Mary Tyler Moore viewing party, or the 30 Rock viewing party?)[1] In those instances, I needed a more useful title.

For screens with dynamic content, I'm now using dynamic titles: e.g. instead of something like "AddInvitees" the screen below has "Watch MTM" as its title.
Screenshot2_dynamicTitle

Date Picker
I added a calendar picker to speed up adding dates to events.

Screenshot3_calendarPicker-2

I didn't enforce any strict formatting rules for the field itself... the date column in the database is just a text field and I treat it like an open ended text field in the interface. There are some events I initially date as "this weekend" or "sometime in October" and it's convenient to store that data in the date field, as well.

Plus Ones: finally fixed
Guests bring friends to things. I knew right away I would need to add +1 functionality to the app. In fact, I thought adding the ability to quickly attach a +1 or +2 to a guest would be one of the easiest things in the world. If computers are good at nothing else, they're good at adding 1s to things. The core mechanism of a computer is adding 1s to things. There's an entire programming language named after the concept of adding 1s to things.[2]

All of this is to say: as someone who knows anything at all about making software, I know how to add 1 to things.

Except, of course, when I don't.

I believe my main problem was storing +1s as strings in my database and, subsequently, not remembering I'd done that. My secondary problem was not tracking well enough all the times I needed to do a type conversion between numbers and strings for the +1 data. [3] Once I took a second to figure out what was going on, it was easy to get +1s up and running.

Guest Counts
The masterpiece of the last quarter was adding guest counts to the app. Since my home isn't infinitely big, it can't hold infinitely many people. The guest counts allow me, at a glance, to compare the size of an event against how many people my place can hold for that type of event.

Screenshot4_eventCounts-1

In the picture above, the Listening Party has:

  • 1 Yes,
  • 8 Maybes,
  • 0 Nos,
  • 0 people who still need to give me a response.

It's not perfectly implemented, but it's there and it's functional. (And the totals include +1s.)

Project Management
Many months ago I took on a new side gig as a Project Manager... for my escape room crew. So, you know, it's not like NASA or anything. All the same, we've been crushing it. We recently took on the hardest room in a facility and captured that room's first place score by 200 points. For comparison, the distance between 2nd and 5th was about 50 points.[4] Hashtag: mic drop.

In actual seriousness, I realized that the broad strategies I have for being a good escape room project manager are the same strategies I have for being a good leader at work.

  • Find a Thing that needs to be done.
  • Find Someone who both has time to do something and might be good at the Thing that needs to be done.
  • Give that Someone that Thing.
  • Walk away.

"Walk away" is the important part; it's sort of what makes everything else work and there's a lot that's implicit in those two words.

One
If you give a task/project to someone, it's theirs now and you don't get to be a part of doing it. It doesn't matter if it looks like fun. Walk away and let them do it.

Two
If you give a task/project to someone, it's theirs now and it may not be done how you would do it. The best task is a done task because it's no longer in need of resources. If you're already spending someone else's resources on a task, don't also spend your resources on that task.

Outside of formulas and automation in Excel, most of the efficiency gained in a "better way to do it" is probably lost in the teaching, the learning, the perfecting, and the fact that different brains work in different ways.

So instead of doing any of that, walk away.

Three
Your team needs to know they have to ask for help if they need help; none of this works otherwise.[5] If you do a good job of walking away, you won't necessarily know your people need help unless they ask for it.

In our recent award winning escape [6] there was definitely a point at which someone said, "Hey... can we get more brains over here to look at this?" I wandered over with a couple of other people, I quickly assessed that they now had enough brains, and I walked away.


So obviously this works when it works... but what happens when something goes wrong? What happens when someone is doing a task incorrectly? Or instead of 6 minutes it takes 60 minutes?

Here are three quick thoughts:

  1. Make sure you didn't give out incorrect instructions.
  2. Figure out if there's a better way to communicate the goals, context, assets, and risks.
  3. Focus on helping the person level up their skills and not on helping the person accomplish the task.

Five Albums[7]

  • Brandi Carlile, Brandi Carlile
  • The Story, Brandi Carlile
  • Give Up The Ghost, Brandi Carlile
  • The Firewatcher's Daughter, Brandi Carlile
  • By The Way, I Forgive You, Brandi Carlile

Spotify playlist


  1. MTM is one of the best shows ever, go watch it; also, it's easy to see that the people who made 30 Rock also liked MTM. ↩︎

  2. For the uninitiated: C++ is a coding language. It's a sequel, of sorts, to C (another programming language). In C++, "++" adds one to things, hence C becoming C++. So, for example, if you needed to add 1 to a variable called guest_list, you could simply type: guest_list++; ↩︎

  3. Another one for the uninitiated: mileage varies, but it's not uncommon for a coding language to only accept official text data for display in a text field. Meaning, if I want to display the number 3, I may need to convert that data to a text '3' and then display the text version of '3'. If, later, I try to add 1 to my text '3', the language will call me a dummy and tell me I can't add numbers and text together. What this functionally means for this app: if I have a display up that shows me how many +1s I've added to an event, I need that information in two separate forms... a text version so I can display the information on screen, and a number version so I can actually use it to add it to other numbers. ↩︎

  4. It's also worth noting we were a perfect 5-for-5 at that facility. (I was only PM for the last 3 rooms.) ↩︎

  5. Most things don't work when people don't know to ask for help. ↩︎

  6. The award was only in our hearts. ↩︎

  7. I listened to a lot of Brandi Carlile this past quarter. ↩︎