AWS Amplify Release, GraphQL, and Recent Curated Links

This release kicked off this week in time for re:Invent and I put together a quick write up. Any questions, feel free to ping me via my contact form or better yet, just pop a question at me via the Twitters @Adron.

Authenticator

Amplify’s new Authenticator

Docs here

The new authenticator is a component that adds a full authentication flow for your app with coordinated boilerplate. This covers vue.js, angular, and react frameworks. The component has a customizable UI (as you’d expect), includes social logins for Google, Facebook, Apple, and Amazon. The initial setup is zero-configuration, and does have password manager support, along with show/hide confirm password forms.

The zero configuration works based on your Amplify CLI setup. To use this component grab the latest version of Amplify 6.4.0.

npm

npm install -g @aws-amplify/cli@latest

yarn

yarn global add @aws-amplify/cli@latest

Once that runs it will update your aws-exports.js with the latest backend configuration for the Authenticator. So, zero configuration you have to add, but there’s configuration back there if you need to or want to dig in.

There is then an initial state for the component that sets a user up for sign in, sign up, or resetting their password. You might start with some code to get the component in your page like this.

export default function App() {
  return (
    <Authenticator>
      {({ signOut, user }) => (
        <main>
          <h1>Hello {user.username}</h1>
          <button onClick={signOut}>Sign out</button>
        </main>
      )}
    </Authenticator>
  );
}

Then to set the initial state add the following parameter.

export default function App() {
  return (
    <Authenticator initialState="signUp">
      {({ signOut, user }) => (
        <main>
          <h1>Hello {user.username}</h1>
          <button onClick={signOut}>Sign out</button>
        </main>
      )}
    </Authenticator>
  );
}

Setting many of the other options to your needs includes adding additional parameters to the Authenticator component like;

Social providers

export default function App() {
  return (
    <Authenticator socialProviders={['amazon', 'apple', 'facebook', 'google']}>
      {({ signOut, user }) => (
        <main>
          <h1>Hello {user.username}</h1>
          <button onClick={signOut}>Sign out</button>
        </main>
      )}
    </Authenticator>
  );
}

Sign up attributes

export default function App() {
  return (
    <Authenticator signUpAttributes={[]}>
      {({ signOut, user }) => (
        <main>
          <h1>Hello {user.username}</h1>
          <button onClick={signOut}>Sign out</button>
        </main>
      )}
    </Authenticator>
  );
}

Login mechanisms

export default function App() {
  return (
    <Authenticator loginMechanisms={['username']}>
      {({ signOut, user }) => (
        <main>
          <h1>Hello {user.username}</h1>
          <button onClick={signOut}>Sign out</button>
        </main>
      )}
    </Authenticator>
  );
}

There are lots of other features too, give the docs a quick read for the full details. For more details on the overall authentication worflow check out these docs.

In-App Messaging

In App Messaging

This library is, sadly for my vue.js app, only available for react native. A quick install will get you started.

npm install -E aws-amplify@in-app-messaging aws-amplify-react-native@in-app-messaging amazon-cognito-identity-js @react-native-community/netinfo @react-native-async-storage/async-storage @react-native-picker/picker react-native-get-random-values react-native-url-polyfill

Then install pod dependencies for iOS.

pod install

An example looks like this.

import 'react-native-get-random-values';
import 'react-native-url-polyfill/auto';

import { AppRegistry } from 'react-native';
import App from './App';
import { name as appName } from './app.json';

AppRegistry.registerComponent(appName, () => App);

Then import the awsconfig vis aws.exports.js.

import Amplify from 'aws-amplify';
import awsconfig from './src/aws-exports';

Amplify.configure(awsconfig);

Then integrate the Amplify React Native UI component if your app’s root component.

import {
  InAppMessagingProvider,
  InAppMessageDisplay
} from 'aws-amplify-react-native';

const App = () => (
  <InAppMessagingProvider>
    {/* Your application */}
    <InAppMessageDisplay />
  </InAppMessagingProvider>
);

re: from the docs, here’s an app.jsx example.

import React, { useEffect } from 'react';
import { SafeAreaView, Button } from 'react-native';
import { Analytics, Notifications } from 'aws-amplify';
import {
  InAppMessagingProvider,
  InAppMessageDisplay
} from 'aws-amplify-react-native';

const { InAppMessaging } = Notifications;

// To display your in-app message, make sure this event name matches one you created
// in an In-App Messaging campaign!
const myFirstEvent = { name: 'my_first_event' };

const App = () => {
  useEffect(() => {
    // Messages from your campaigns need to be synced from the backend before they
    // can be displayed. You can trigger this anywhere in your app. Here we are
    // syncing just once when this component (your app) renders for the first time.
    InAppMessaging.syncMessages();
  }, []);

  return (
    <SafeAreaView>
      <InAppMessagingProvider>
        {/* This button has an example of an analytics event triggering the in-app message. */}
        <Button
          onPress={() => {
            Analytics.record(myFirstEvent);
          }}
          title="Record Analytics Event"
        />

        {/* This button has an example of an In-app Messaging event triggering the in-app message.*/}
        <Button
          onPress={() => {
            InAppMessaging.dispatchEvent(myFirstEvent);
          }}
          title="Send In-App Messaging Event"
        />

        <InAppMessageDisplay />
      </InAppMessagingProvider>
    </SafeAreaView>
  );
};

export default App;
In App Messaging

Custom Resources w/ AWS CDK or Cloudformation

René (@renebrandel) wrote a blog post on extending the Amplify backend with custom AWS resources using AWS CDK or CloudFormation. The post is avilable here but I’ll give you a quick summary.

The new CLI comand amplify add custom will get almost any of the AWS services added to an Amplify backend. The core tech here is backed with AWS Cloud Development Kit (CDK) or CloudFormation. For example if you want to pull in AWS SNS as custom resource, this is a very quick and concise way to do just that.

Again, check out René’s post to really get into it and check out some of the possibilities.

Overriding Amplify Backend Resources with CDK

Amplify sets up various capabilities out of the box in many situations such as project-level IAM roles, Cognito Auth, or S3 resources. As with the previous section, this one I’ll keep short as René (@renebrandel) has wrote a great blog post about this capability too titled “Override Amplify-generated backend resources using CDK“. If you’re interesting in nixing (overriding) any of these features and using another choice, this is your go to.

Prototype a Fullstack App without an AWS Account

Not specifically related to the release, this capability that Christian Nwamba AKA Codebeast wrote up in a blog post will show you how to do just that. The docs focused around what he details in the post are avilable here.

GraphQL Transformer v2

This I saved for last, it’s in my wheelhouse after all. Some of the features of the new v2 drop include; deny-by-default auth, lambda authorizer, customizable pipeline resolvers, and OpenSearch aggregations and use-scoped queries. The accomplished blogger, as mentioned in this very blog post, blogging legend René continues with “AWS Amplify announces the new GraphQL Transformer v2. More feature-rich, flexible, and extensible.“.

The first thing René brings up in the post is more explicit data modeling. I’ve stolen two of the screen shots from that post as examples and motivation to click through and check out the post. But I’ll also elaborate.

Adding primary and secondary indexes.

With the new explicit data modeling options, we’ve got @primaryKey and @index added as directoves to configure primary and secondary indexes from schema for your Dynamo Database. The directives in AppSync GraphQL really makes for a powerful schema definition capability to push via code first or to map from database to GraphQL scehma.

Adding relational directives.

The other part that is hugely important is the ability in schema to draw relationships that add referential integrity to your schema and the inherent data. There are now @hasOne, @hasMany, @belongsTo, and @manyToMany directives. I’m really looking forward to some data schema and modeling build outs in the near future. I’ll be sure to put together some tutorials and content detailing some of the design considerations and where and how to get all the schema hacks working best for your particular app data builds.

Thanks & Curated Follows

That’s it for this post. I’m always endeavoring to bring interesting tech and blog about it, but another way to get the quickest updates, links, details, and information about these releases is to follow the following people in the Twittersphere. They’re all in the cohort I run with at AWS with the Amplify team. I owe thanks to each for helping me find the following information and details included in this blog entry.

I Joined AWS, It’s Surreal, and Why

TLDR I joined Amazon Web Services on the 11th of October – i.e. AWS – and it rocks.

When you join Amazon you are signing up to learn a lot of things about the company and the ways in which the company gets things done. Before I get into all that, I’m going to tell you a bit about my career and what led me to Amazon. After all, it is surreal and unexpected for many that know me that I’m here. This relationship has definitely been a 2-way story, and one where it finally fit in a mutually beneficial way.

My First Years in Tech

Years ago, I jumped into the nascent tech industry from the state of Mississippi, where I grew up. Mississippi is quintessentially one of the most regressive, least advanced, disadvantaged, poor, and poorly run states in the entire United States. For most Mississippians life starts rough and continues that way throughout. However there are shining little slivers where tech lives and thrives in the state, and I lucked out in a massive way by cutting my teeth at Stennis Space Center (yes, a part of NASA).

When I got into tech I had no high school diploma and no college. I would eventually attend college but I couldn’t attend yet as I was only 13. I fumbled my way into some coding by taking a programming class. The class used the "Basic" programming language taught by a smart and creative woman that did well to keep the attention of a moderately bored "metal head" 13 year old.

Just a few years later I picked up a C++ book, because one didn’t have the internet to just google their way into learning a new language. That was quickly followed by learning Visual Basic 4, which landed me an opportunity to build a video rental tracking application. I got paid too, a massive $300 bucks! In the next several years I ended up getting into networking, systems administration, more programming and scripting and doing work for doctor’s offices, hospitals, trucking dispatches, junk yards, and a number of other businesses.

I loved the independence this life I’d gotten into gave me. Eventually college came up and I attended some courses, mostly about music and music theory more than programming. But out of a desire to learn faster and cover more topics I left college to advance in the industry.

Fast forward over that following decade and I tore into a plethora of technologies, started working for some giant companies like Bank of America, Citigroup, and Fidelity with hundreds of thousands of people, Government agencies, and some smaller startup like companies.

The famous mythical man-month!

Through all of this experience, and traumatic death march styled work, I came to two decisions that have shaped my career for many years and benefited me in a very significant way.

  1. I was going to cease working for the Government, after years of consulting and related work with the Federal and States Governments I just couldn’t take the lack of control, inability to really effect change, and the general laggard nature of the work. I promised myself I’d stop working in this sector entirely. At this point in my life, I’ve held 100% to that promise, it’s been a rewarding and very effective decision.
  2. I decided I would, likely, stay away from big corporations and also likely stick primarily to small (i.e. SMBs) that allowed me the most impact within an organization. If I were to shift back to a large corporate entity it would have to be with some type of rogue group or segmented team within that organization that fell outside of the general organization itself. So far only one team fit that mold, at Home Depot, but outside of that group I’ve stayed my course and stuck to small business, SMBs, and startups.

Hello Amazon Web Services

"Every day is Day 1." - Corporate Training, but coined per Jeff Bezos

This line in the embarkation of working at AWS stuck out. Which is saying something, because when you join AWS there’s about ~80-120 hours of training videos and culture related content to consume for the coder, techie, project, product, and leader related type of work.

It stuck out because, really, in very real terms this is day 1 of a new career direction for me. I’ve shifted and mutated my 2nd declaration above, in a significant way. I’ve joined AWS to work with the Amplify, AppSync, and surrounding teams to move forward work in GraphQL, data, flows related to, and projects and services around that data space. I’m stoked, but I didn’t join just because of the tech.

Why AWS?

Why join AWS? Even though I’d promised myself not to join anymore big corp companies I got to a point and looked at several of the big companies because I wanted more scope. What I mean by scope is the range of topics, tech, and people that I could work with on a daily basis that were involved in a wide space instead of just a singular narrow space. Startups and small business, by their very nature, work in a singular and narrow space. I still had intent and wanted to work with GraphQL and tech immediately tangential to GraphQL, but I wanted more access, more range, and options to expand the interactions of the tech and expand into access to interactions with people in the industry. So I began a search that eventually led me to join AWS.

That search started with several companies, including AWS. I was looking for several key characteristics that would dictate where I landed.

  1. Involvement in the space, specifically the open source space I wanted to work in. That included several key technologies, depending on what matched best, I’d go that direction: Kubernetes, GraphQL, and general open source development (like Github, etc). This made the options basically Google, Microsoft, AWS, or Facebook!
  2. What company would trigger the least ethical dilemmas for me. Yes, this was indeed part of the criteria I was looking at and discussing. Facebook was already on the shit list considering their political meanderings and inability to fix them. I also just wasn’t sure considering the conflation between actions vs. words. Google was in a moderately ok space, as was AWS, and Microsoft has been doing pretty good on the ethical front as of late. There’s always some questions about things, but I basically wanted to make sure I wasn’t working on things directly helping to cage kids or bomb other countries that are in the stone age back to the stone age!
  3. What company has culture (i.e. specifically good behaviors around meetings, people, etc) that I would appreciate and would work well for me. I’m a rather disciplined, driven, yet ADHD afflicted soul so sometimes, a company’s culture can destroy me or burn me out at 10x the rate of others. I want to join an effort and stick around for some time to really drive home some impact!
  4. How would the team I’m on and teams of people I’d work with, mesh with me. Obviously they’d interview me but I am more than aware, and 100% interview them at the same time. Interviews are absolutely a 2-way relationship and I, as with the last decade plus of my career, have chosen only to work with teams of people that I know are top tier, diverse, open minded, and have a good heart in their efforts.

How It Came Together

I started my search with the premise that I wanted to gain the above four characteristics in which company I joined. I had the privilege and due diligence to choose the company that I could gain all of these, not just a one or a couple of these characteristics. I won’t focus on the companies that didn’t make the cut or why, but I will elaborate on why AWS, and Amazon in general, did indeed make the cut.

  • Leadership principles: One of the things Amazon as a company lives and dies by is the leadership principles. There are a whole host of folks that like to complain, denigrate, nit pick, and come up with reasons why these are bad, but I’ll just cut that off with – when intent is good – they’re all awesome. Full stop. To break down each and personally elaborate:
    • Customer Obsession: yeah, I literally do this work with a priority on who will use it. It’s one of the reasons I focus on minimizing ethical concerns. It then insures that I too can truly be invested in supporting my customers in their efforts. Check.
    • Ownership: I already live by this principle, not just in work life, but personal as well! It’s something I staunchly believe in. Long term over short term, take accountability, act on behalf of not only yourself but others. Step up, there’s a lot that needs to be done in this world! Check.
    • Invent and Simplify: The mantra I’ve basically lived my whole programming career by. If I can’t build things to work myself out of work, and I can’t find a better way to do something after doing it for a while, I’ve started to fail at what I’m doing. I work in this field to make things easier, better, and more resilient for the users’ of the things I build and help others build. Check.
    • Are Right, A Lot: Nuff’ said.
    • Learn and Be Curious: Just scroll through and read the posts on this blog, follow me @Adron or streaming @ThrashingCode. You know I’m all about this. Check.
    • Hire and Develop the Best: Well, I haven’t hired anybody yet at AWS, but I’ve hired a lot of people in my career so far. I don’t hire you if you won’t or can’t be the best, thus, if I ever do hire you, you can rest well knowing I vouched for you and know you can kick ass and take names! 🤘🏻
    • Insist on the Highest Standards: We can talk about the pedantic nature of this leadership principle in the future and joke about tablets later. Check.
    • Think Big: Always. Check.
    • Bias for Action: People’s lives continue today because of my bias for action. If you know me, you”ll understand this comment. If not, feel free to ask, I’ve just summarized it with this statement for this post. Check.
    • Frugality: At work, yup. At home, no comment. Albeit I would own a plane or launch rockets in a frugal way too if I had the financial resources. Check.
    • Earn Trust: I’m always working to earn trust among those I trust and respect. I hope we all are, it’s a remarkably good way to live. Check.
    • Dive Deep: I’m on it. Check.
    • Have Backbone; Disagree and Commit. Thanks brutally, caustic, and toxic southern upbringing, and thanks west coast for helping me tone that down to an effective level of having backbone, disagreeing and committing in life. Check.
    • Deliver Results: I’ll admit, this one I’m a little afraid to ask why it even needs to be listed. Check.
    • Strive to be Earth’s Best Employer and Success and Scale Bring Broad Responsibility: I’ll do my part but I’ll leave these as is for today. There’s work to be done! Check.
  • The team and members on the periphery of that team checked all the boxes (good job!), were friendly, easy to converse with, and are top tier people in this industry! During my initial loop I got to speak with, meet, and I highly recommend following each of these people if you don’t already, and more benefit if you are interested in the work we’re doing:
    • Bill Fine -> @billfine
    • Brice Pellé -> @bricepelle
    • Ed Lima -> @ednergizer
    • Robert Zhu -> @rbzhu
    • Ali Spittell -> @ASpittel
    • Mohit Srivastava -> @mohit
    • I also met and spoke with Aleksej Trefilov and Ben Snellings, but we can’t discuss all the cool secret thigns they’re working on, so I’ll just leave it at – awesome to meet them, if you get a chance to work with them sign up!
    • Big shout out too to Adam Desai and Mashayla too! Adam is the recruiter that I worked with and got all of the loops lined up, and Mashayla joined in to make sure everything got coordinated and scheduled! Great experience and good workflow y’all have!
  • Around the culture aspect, as I spoke to the team and others in the immediate teams I dove into a number of culture questions. One of the things that summarizes the drive and energy at AWS is the principled and organized nature of meetings starting with a document read – everybody reads the document – then the meeting resumes around discussion of the document, the details, data, and the participants take actions based on that. It’s a very effective way to run meetings. Beyond that however, the general readiness of the team, the approach and interactions of everybody involved, was excellent. The conversations during the interview, the tests and challenges, all were great fun and I got a lot of information (and I got the job, so I suspect I provide good information!) and enjoyed the interactions. I got a solid feeling we’d mesh well. Another criteria, check!

Now all of this didn’t go off without a hitch, because of certain things I got to do a second short loop and my role switched from Developer Advocate DA to Product Manager Technical. This worked out very well however, as now I’m positioned to have impact from work as a developer advocate and product management efforts.

There were other competing offers from Google, Microsoft, and other companies I interviewed with at the same time. In the end though the responsiveness, effective flexibility from the team and Adam led to AWS coming out the winner. With everything wrapped up and questions answered, all criteria met, I gave AWS and the team a solid YES!

With that I’ve joined AWS! Ready for new challenges and bringing a simpler, faster, more usable Amplify, AppSync, and Cloud environs to every coder out there! Let’s do this! 🤘🏻

My Bespoke JetBrains Toolbox Configuration

One thing I do just enough to remember I need to do, but not frequently enough to remember which settings are which, is installing the JetBrains Toolbox app to get the other JetBrains’ software installed.

The following is the quick list of the key things that I setup to get the most out of Toolbox. This is a quick process and I’ve detailed it here, one for memory, but also to detail what some of the features provide so this might be of more use to others.

The Toolbox Settings options are located by clicking on the gear icon when the application is opened up. This is the same across operating systems; Windows, Ubuntu, MacOS, or others. Find the gear, click it!

Once Settings are opened up the core 4 configurations include:

  1. If you’ve got an account, login. Everything is easier if you’re logged into your account.
  2. This second option around the theme is great on MacOS and Ubuntu. I’m not sure what it does on Windows exactly, but presume a similar effect. I myself set this to Auto since I always set the OS level theme to dark and love that almost all the apps that I use shift to that theme.
  1. I don’t set a shortcut for the toolbox, I simply use the Ctrl+Space to launch it from the spotlight on MacOS and use whatever option to issue apps from command on Windows and Linux OS installations of Toolbox.
  2. This section, I’ll detail further down, has a host of additional settings around the tools use itself.

When logging into the app, the Toolbox will launch a browser to complete the process. The ! is what I do, log in with a regular JetBrains username and password based account versus using one of the Oauth options like Github. I feel like, however, maybe I should check if I can switch it or add the Github auth to use that, I am a fan of using it as my general dev auth across systems.

Upon logging in and clicking Approve the prompt to open and then match the Toolbox extension for opening to the Toolbox application in the browser.

Once all that is setup, my next move is to get the Tools section updated and setup the update behaviors, reload setting, and shell scripts.

  1. I toggle the Update Toolbox App automatically option on.
  2. I also, cuz I’m such a nice person, send the anonymous usage statistics to JetBrains.
  3. For the Update all tools automatically I often toggle this on. As in the vast majority of scenarios I’m working in, I need to ensure I have the latest patches and updates.
  4. The Keep only the latest version is similar to #3 where as, I generally only want one version of the particular IDE, I don’t particularly need the EAP or previous versions, and I toggle this to keep only the latest version that is currently available.
  5. I leave the Reload Dock after update option toggled on.
  6. This last feature is one of the most important for me. I launch most of the IDEs, JetBrains or others, vai the terminal. My most used method is to issue the ide . so that the IDE opens the particular directory that the prompt is located in. This section, the Generate shell scripts enables this for all of the respective IDEs that are installed per the Toolbox App.
  1. This is diving into, once the Generate shell scripts is toggled on.
  2. The Shell scripts location, I’d argue, should be set to your /usr/local or some system directory so that it’s available specifically for you, or if multiple users use the machine that use all the apps, it’s available prospectively for everybody. The fact is you can set it to whatever path you want, I’ve had some issues managing that autonomously of a directory like /usr/local that one just tends to end up with as part of one’s path on a machine. With that, I’d wrap this up with a strong suggestion to set it to /usr/local and call it a day.

An important thing to note about this path, whatever is selected has to be the path and the permissions must allow the creation of the actual files once apply is clicked. Whichever IDEs are installed should show like this. If permissions or or something else prevents these from being created then another directory needs to be selected or the permissions changed or problems resolved.

At this point navigate to any directory and open the respective IDE by command or open the directory you’re located with ideaCmd . and the specific IDE will launch and open that particular directory.

That’s it for the Toolbox settings. I’ll end this article with a few suggestions on IDEs to install, pending you’re using an account that has the entire suite or you have multiple IDE subscriptions purchased. I would recommend, to install IntelliJ IDEA Ultimate regardless of what other IDEs you install. It’s a good option that has a little bit of every other IDE and has been the one (my understanding here) that was the original and thus, longest developed of all the options.

Then, if you’re focused on a particular language stack, then install the IDE that is available for that particular language. GoLand for Go, PyCharm for Python, Rider for .NET, and WebStorm for web related development. There are others, so choose as you develop. Of course, any of these can all be developed in the IntelliJ IDEA IDE but your mileage may vary if you go that route, I’d highly recommend using the IDE specific to the language stack.

Cheers, enjoy your thrashing code! 🤘🏻

Best Outcomes for My 3rd Places & Trips

NOTE 1: This is my POV on 3rd Places and very much YMMV. I’m NOT telling anybody this is how or what they need to do to be successful, it’s merely ideas you can borrow or steal! So enjoy!

NOTE 2: Yes, this is a long post, get ready for a long haul. However, if you’re looking for ideas about 3rd places or just curious then this post will be worth the read! 👍🏻

Recently I wrote about “My Lessons Learned on Learning“. One of the key parts of learning, but also getting things done for me, is to frequently visit 3rd places. What’s a 3rd place? I’ll elaborate.

3️⃣rd Place – (per Wikipedia) In community buildings, the third place is the social surroundings separate from the two usual social environments of home and the workplace. Examples of third places would be environments such as churches, cafes, clubs, public libraries, bookstores or parks.

Three Other Key Definitions

There are three other definitions that should be understood in detail. These definitions are necessary to get the full context of what I have to write about 3rd places, and also to have an accurate grasp of what I mean when I write workworkplace, and home in relation to 3rd places.

Work is activity that is done on behalf of staying alive. Work could be farming a field or going hunting. In my context it would mean creating some type of service or product, or partaking on some type of activity. One more caveat is that this activity would be related to getting paid.

Workplace is a place where poeple have traditionally gone to do work. However it is a place that is often associated with work where work often doesn’t get done. A workplace is what I call a designated place often paid for by an employer that a person goes to in order to work for that employer. That’s it, nothing more nothing less, that is the core definition of workplace for me.

NOTE: Workplace IMHO should not be, and I attempt to not conflate it with one’s personal workspacepersonal office, or home office. Very, very different places.

Home is where the heart is, it’s where you rest your head at night and get sleep. It’s where you may eat some of your meals. It’s where you hopefully feel safe and confortable and can relax! Everybody, I hope, knows their home to be this!

Effective 3rd Spaces

Now that I’ve dug into the nitty gritty of 3rd spaces, at least for my context in these articles, now the valuable part. How does one use 3rd spaces, and how does one make good use of the trips to and from 3rd spaces? There is so much context and value in the trips to, between, and from third spaces as much as use of the space while you’re visiting 3rd spaces.

The following details how I use 3rd spaces and how I utilize the trips between those spaces. This way I get, and YMMV, the most out of 3rd space use, but also, as extra I’ll detail how many of these practices I follow also work to help me and also not fall into the asshole problem person category for the 3rd places!

The following covered 3rd spaces are the most common 3rd spaces I use: coffee shops, passenger trains, city transit, Seattle & Portland parks, and my personal office.

Use Of Spaces

The space that one needs for doing work or even just projects for themselves to creatively problem solve, to learn, or otherwise work toward accomplishing a goal varies. Each of the spaces I use are usually pretty good for many of my projects, and all are exceptionally good for getting work done in various ways.

☕️ Coffee Shops (Tea Shops, Beer Halls, etc) 🍵 🍺

Coffee shops, probably the most frequent 3rd place I visit by an order of magnitude have several factors that dictate their usefulness. A few questions always dictates whether a coffee shop is going to be a good 3rd place;

  • Is the coffee (tea, beer, etc) good?
  • Do they have decent snacks and food?
  • Are the staff cool, friendly, and ok with loiterers?
  • Is there power that is readily available to plug into?
  • Is there good wifi amidst the volume of people?
  • What is the busy-ness of the business? Crowded?
  • Can I easily not fall into being an asshole? (see mitigation below)
  • What’s the combination of all the above?

With a good mix of the following, I have frequented multiple coffee shops each day to finish out a solid work day. But just working at coffee shops is one things, there is something else they’re exceptionally good for – meeting other folks! During the work day I routinely coordinate which coffee shop to be at, with who I might schedule a meeting with to discuss a wide range of things; software architecture, business ideas, or other prospects.

Asshole alert and mitigation practices! One thing about coffee shops is that they are businesses, usually local private businesses. In that sense they have to make money for staff, to keep the lights on and the wifi connected, and doing so means turning seats and selling product. Thus, don’t loiter and take up seats or defer the selling of products. If you do, you are indeed being one of those assholes that has led to the death of more than a few coffee shops! But it’s simple to not be an asshole. Simply insure you’re paying for product, and if things get extra busy and they’re hitting that stride at making some cash, don’t disturb that and prospectively move along. Thanks, much appreciated! 👍🏻

There are so many great ways to not be an asshole at a coffee shop, and yet reap great benefits from studying and working at a coffee shop I’ll have a complete stand alone post just on this topic in the near future. Especially post-pandemic since we’re all flooding back to 3rd places!

🚆 Passenger Trains 🚂 🚅

Next up is a favorite 3rd place which combines not only a 3rd place but also traveling to and from other 3rd places, passenger trains! I currently live in Seattle, for the second time of living in Seattle, but in the northwest have mostly lived in Portland. One of the beautiful aspects of living in either of these cities is the intercity rail service called the Amtrak Cascades.

Because of this service I have only ever driven between these cities in a car 6 times out of the 900+ trips I’ve made between these cities since I’ve lived in the Pacific Northwest!

Some of the strengths of passenger rail service like AmtrakSounderCaltrain, and others throughout the western United States include;

  • The trains range in being spacious to extremely spacious to work in. On most of the trains, even the commuter trains, there are seat back trays or pull out tables to work on combined with electrical sockets and wifi for some routes. The accomodations, depending on the train, range from coach seats, business & first class, roomettes, and bedrooms as regular options.
  • The cities connected are forward thinking, progressive, beautiful, livable, and if done right stunningly convenient cities. With the more innovative and advanced businesses of the United States, still to this day leading technical innovation in the world (maybe not for much longer, but for now it still holds). This provides a lot of reasons to take trips between these cities for work and for pleasure. The lagniappe is, the trains put you directly into the center of these cities!
  • Albeit the US doesn’t have trains that tend to be on time, these trains on the west coast are generally on time plus/minus a few minutes except for the Coast Starlight, and even that train isn’t that off schedule these days. So even though you can’t set your watch by modern US rail service like that of the previous centuries, you an at least expect to show up mostly on time! This makes connections and other related trips to 3rd places manageable and business friendly!

Asshole alert and mitigation practices! When taking the train there are a number of things that will put you in the asshole category and I can barely get to the top few here, so like coffee shops I’ll have a follow up article for a longer list. But there two, one that I’m going to put here and I know it’s Amtrak (and Caltrain, Sounder, & all others) supported.

Don’t disturb the staff running the train. Amtrak and other passenger trains may be late, some of the food might not be good, the cars might be warmer or colder than you like. You may want to drink so many beers (cuz you can technically) that you fall down in a drunken stupor and cause a medical emergency. You may get screamo and yell at the staff. Every single person on the train ceases to care about your problem then, and we all await your imminent detraining event when the police show up and remove your jack ass self. So please, do NOT turn into this asshole and delay the entire roster of folks trying to get from point A to point B!

This next one is a personal – and I know most people’s – peve about some folks that have a lack of situational awareness and a mouth breathing problem. If you talk loudly in the northwest it’s best to remove yourself from the passenger car and head off to the Bistro, Diner, or Lounge Car to talk. You’re epicly annoying and most northwesterners won’t tell you, I however am from the south and wasn’t taught to stand idly by while you mouth breath loud utterances around from a lack of situational aweareness like an asshole. Even more so when you’re falgrantly downing your beers, I will instigate getting you kicked off the train. Uplevel that situational awareness and don’t be that asshole while on the train. Thanks, much appreciated! 👍🏻

🚃 City Transit 🚌 ⛴

Ok, some city transit is horrible as a 3rd place. Most buses are a no go because combined with the poor state of most roads (like in Seattle) one can’t do all that much on them. Limiting their use. But other modes are spectacularly effective, for example;

Seattle Ferries are one of the most relaxing, wonderful, and convenient ways to travel across vast expanses of water while comfortably working or just relaxing. They are great for trips to 3rd places as well as being excellent 3rd places themselves. I’ve even gone and sat on a ferry, then gotten off (cuz they usually make ya at one end or the other) and then just reboarded, just to enjoy the trip while working.

Light Rail (MAXLINK, etc) is one of my favorites too for short hauls back and forth between areas but also as a mode that – when not too busy – is great to just get into a comfortable corner seat and watch the views go by while working on various things. There aren’t electrical sockets or wifi, but nothing a good charge and tethering won’t fix these days.

More on transit as a displacement vehicle between 3rd places below. Suffice to say though, some transit can indeed be the 3rd place itself!

Asshole alert and mitigation practices! The biggest thing with transit usage, when using it as a 3rd place, is similar to the above – if it’s busy just displace again. Don’t sit on a bus or tram or light rail vehicle or the ferries (which are never that packed fortunately) if it’s packed then move along. Don’t take up space by people trying to use the transit for its intended purpose of going from place A to place B. Thanks, much appreciated! 👍🏻

🏞 Seattle & Portland Parks 🌲 🌿

Almost every Seattle & Portland Park is most epic and enjoyable as a 3rd place to relax and work in. Again, with the advent of usable tethering and battery life in laptops, combined with a little wifi in some parks, these spaces can be some of the most enjoyable and amazing places to get some workdone while enjoying your best life!

Often there are benches or other amenities in parks that are good, but there are also park benches along with picnic tables that really multiply the usefulness of using a park as a place to work and think creatively. Combine that with more than a few natural characteristics, such as in Seattle there are rocks down along the shore. Albeit risky, a climb down across the rocks can lead to a comfortable and close to the water seat.

Recently I took a ride (more on this trip type below) to the waterfront in downtown Seattle. Spent a couple hours working right on the waters’ edge, and got a significant amount of work done along with enjoying that view and scenary extensively. I even cut together a narrative of that trip here, included for you to view at your convenience. 🤙🏻

Asshole alert and mitigation practices! I’m gonna just assume you’re smart enough not to litter, burn down, desecrate, graffiti, or otherwise mess up a park. So on to one of the lesser known asshole park activities. Take for example, if you’re working in a park that’s fairly occuppied then don’t take loud conference calls. This also, just like littering, desecration, and graffitying natural lands shouldn’t need to be mentioned, but it does sometimes escape us. Be aware, work on that situational awareness, and don’t wreck other people’s zen. Thanks, much appreciated! 👍🏻

🏣 My Personal Office 🏤

No asshole alert and mititgation practices for this one because of obvious reasons!

One of the things that I learned years ago while working remotely was that it is indeed really ideal to have a 99.99999% reliable location away from homethat can act as a workplace for work as well as projects or other things that might come up. If you get an office with public space for conferene rooms and such even better! Sometimes, one can even write off some of these costs or even charge it back to the employer if you’ve worked that out in your contract!

A personal office provides that space that isn’t at risk of being disturbed by assholes, you can ensure the wifi or internet connection is good, the door is open based upon your need at any time, and generally removes all of the risk of relying on other 3rd places! The downsides are almost always just the cost of having said 3rd place.

Displacing To & From

Almost all of us have spent inordinate amounts of time traveling back and forth – for Americans largely by driving – to 3rd places. That is one way that someone could get between places, but I opt not to drive places. So much so, I stopped owning a car from a lack of need over 11 years ago now. One of the beauties of the northwestern cities of Eugene, Salem, Portland, Seattle, Bellingham, and a few I’ve forgotten. These cities provide numerous opportunities to make the trips between 3rd places without a car. I’ve made great use of this amenity in the northwest. So why make use of this amenity? Here’s my list and of course YMMV.

Getting from 3rd place to 3rd place, with a toddler or grown ass adults, or all alone I make it enjoyable, work productive, and entertaining for myself. Whatever the modal option, I try to make it so that I get multiple uses out of the trip.

One method I use is combining multiple trips into one trip via trip chaining. An example would be; going to a park to work, stopping for a meeting, catching pizza with a team to discuss architecture, having a design meeting, and then getting groceries on the route home. This is a great example of trip chainingthat, in a place like Seattle or Portland is really easy with lots of options to mix and match however you like!

The other characteristic of the trip is while I’m moving toward the destination am I also getting something else accomplished? If I’m cycling am I getting some exercise? Am I runnig some additional errands on the way? Am I riding with some others? Am I going to be able to work on the modal option, such as taking the bus, tram, light rail, or ferry? Is the trip as much a 3rd place as the 3rd place I’m going to? I never like to take a trip that isn’t multipurpose in function. Since I don’t drive daily, those trips have all pretty much ceased to exist for me. It’s a great feeling to get things done, even when getting things done, to get evven more things done. It’s true multi-tasking like we wished our brains could enable us to do!

Overall, here are the modal option that I specifically use for my day to day trips to and from 3rd spaces…

Pedestrian Movement! This is simply walking. If there is a reasonable way to walk to most of the 3rd places and related activities I need to undertake then it is the option I’ll choose. It’s the cheapest, one of the healthiest, and generally convenient ways to move about the world. It’s spectacular that it is our default mode of transport on this fancy planet of ours.

Biking from place to place is great where the city is designed and developed well (if biking aint your thing, skip to the next modal option). This includes almost any city with reasonably urban and original city platting (i.e. the cities with grids) areas in the United States. Which for city specific things, if you live urban or in what are the old streetcar suburbs, is the fastest and likely the most efficient way from point A to point B. Parking is rarely a problem, owning several bikes for each trip type is cheap over time by comparison to other modal options. The only thing more environmentally friendly is walking, so you can rest easy in the ethical realm!

A few options to make things ridiculously easy, involves a few bikes and bike options I have.

  • Everyday hauler of things, Space Horse. This bike provides point to point travel with the possibility of over 100lbs of carry weight on frame via panniers. Adding my backpack and I easily get into the 140 lbs range if needed. The reasoning however is it provides the ability to carry more groceries than the average American buys at Costco (i.e. a LOT of food) all the while loaded up with laptop plus hammock and everything else I’d need to hang out in a 3rd place and get things done comfortably! Even with all that carry capacity, I can easily pop off the panniers while loaded and rack load onto a bus or light rail if need be for that “I got lazy now” trip home!
  • Zippy get there and back, Pop Rocket. This bike I use for quick trips, it’s real light and maneuverable, where I’ll just carry my backpack or I just need to show up and won’t really need to haul anything. Easy to also combine with transit if I wanted to say, skip a hill or just felt like watching videos, or need to whip out the laptop because heaven forbid I got paged while on pager duty!
  • Boldly Bendy Brompton Bike. This bike I use when I want to be able to bring it into and out of locations. It has been my go to bike when I record meetups like “Adam Dymitruk: Event Modeling & James Nugent: Events and Distributed Consensus”“Dave Remy, Event Sourcing Primer: Building source systems using the event sourcing pattern” and “Robin Moffatt, Apache Kafka and KSQL in Action: Let’s Build a Streaming Data Pipeline!”for example. I have a front mount bag and a back rack that is perfect for everything I need. All while being able to be folded up and brought into the meeting location or onto a bus or other mode if necessary. To boot, I’ve used this bike for it’s intended purpose too such as when I took the trip to DC for DataStax’s Accelerate user conference. Riding into and out of International in DC was a stellar experience and that continued everyday of the conference as I road across the Woodrow Wilson Memorial Bridge to the conference center from Alexandria, Virginia. An absolutely stellar experience traveling between 3rd places.
  • Surly Trailer. Ok, sometimes you have to go above and beyond a mere bike frame and need to haul some big stuff. This trailer I purchased years ago and, like the nerd that I am have kept track of various metrics. One of those metrics is the fact I’ve carried multiple metric tons over the lifespan of this trailer. From a multile hundred pound Ikea load to moving from house A to house B in Ballard, I’ve done a lot with this trailer. It attaches with a quick screw on and screwing off so I don’t need any special hardware.
  • Future Bike (i.e. that I don’t own yet). The Urban Arrow is great for carrying even more groceries than listed above, for carrying a child and groceries, or for carrying an adult and groceries with a child sitting on their lap. It’s all up to me! Yay for options! All with that extra electric power to get those multiple hundred pounds up and down the hills of Seattle.

All those bikes and gear combined add up to as many or more options than one generally has with an automobile in the city, at half the cost of a little Honda Fit, with the ability to routinely make better time to lcoations in the city than folks driving! I’ve literally decimated schedules in San Francisco, Seattle, Portland, Vancouver BC, New York City, Los Angeles, Oakland, and other cities with a transit + bike trip option. Easily getting 10-500% more out of a busy day with meetings in different parts of the city. Arguably, when in NYC, PDX, and SEA I have had days that literally would not have been possible to schedule if driving. But were no problem with a bike. Now of course you add the auto-dependent suburbs and you’ll be debilitated, unable to acheive anything like I’ve described here because of the poorly zoned layout of the space. So I just highly suggest avoiding the auto-dependent suburbs if you want 3rd spaces – and especially the trip between 3rd spaces – to work most efficiently for you.

Next up, passenger trains freakin’ rule for movement between 3rd spaces. In addition, they are a 3rd place unto themselves, and can provide extensive focus to get work done as well as to recharge. At least, for folks like me with that ADHD it’s one modal option that can serve multiple purposes like that.

One other thing that works great on trains, if one can manage to coordinate this, is to have meetings with other coders or cohort via the Bistro, Diner, or Lounge car. These are great spaces to have meetings, enjoy life at the same time, and really do that ideation thing I always hear about!

Ferries are a choice I’d really like to utilize more, albeit I don’t usually head off to the islands to get work done or have meetings. However, thanks to some creative minds there have been conferences in Bremerton, meetings in Bainbridge, and other organization work that gets done on some of the other islands. So combining the ferries with other modes, chainging the 3rd places together, can create some immensely useful, enjoyable, and productive worktime.

Summary

That’s my big list of ways to utilize 3rd places, and the travel to and from those 3rd places, to get things done for work. But not just work, I utilize this time to combinge rest, relaxation, and efficiency of modal splits to get things done for myself as well! I hope the list is somewhat useful to at minimum, light some ideas in mind in how to improve your own enjoyment while getting things done for work and for yourself. Cheers!

My Lessons Learned on Learning

NOTE: This is my experience and very much YMMV. I’m NOT telling anybody this is how or what they need to do to be successful learning, it’s merely ideas you can borrow or steal! Enjoy!

I had just, after a couple years of intense music studies, shifted into computer science at college and learned something very important about myself. I signed up for Computer Programming 1, the most beginner of beginner classes on computer programming.

The class started and very early in the first few weeks we’d studied control structures and variables. We were in the midst of writing our first program and I’d gone into my ADHD induced dozed off state, while mind you being wide awake with eyes wide open. However as I sat there, my eyes did start to shut. In a mere moment I relaxed and fell sideways. I awoke in the process of falling, grasped the desk with my hands, as if it was anchored to the ground. However it was too late, the energy of my fall exceeded the lack of weight in the desk, and I uprooted it with a screech of the metal desk feet on the lanoleum tile floor.

BANG, the desk hit the ground and I, now laying 90 degrees of sitting upright with my desk gripped in my hands and me riding it into the floor like a pilot in a plane. Fortunately, being a long haired metal head with plenty of meh I wasn’t embarrassed so much as confused. I announced, “I’m fine!” and got up to a few smirks and smiles from classmates. One of the students spouted, “that’s Adron for ya” as she turned to face to the front of the class again. The teacher asked if I was, “ok”. I responded, with the second free lesson of the day, “I’m fine just got a little bored and distracted.”

The teacher smirked and shook her head at me. She then contineud with the class as I set my desk upright and sat back down to continue too.

The Lessons

first and foremost ADHD will thrash me into boredom and I will entirely phase out when being “taught at” vs be “informed while I learn” or “learning together”. You see, I simply don’t do classroom style learning, I teach myself and then work with people to move past stumbling blocks. It’s a wonderful way to learn.

second lesson was that, one shouldn’t spout of that they’re bored in class. It’s just not cool. Be polite, state things constructively and people will help you.

Benefits of The Teacher

However amidst all of this fracas that I caused, the teacher noticed these things that I had yet to truly learn. She notified me after class that I needed to schedule a time to meet at my earliest convenience. I did and later the next week we met.

At this meeting she, in blunt directness said, “I know you’ve very likely got ADHD but you’re doing great with the class. I also bet you don’t do well with structured teachings, which is why I’m going to give you the rest of the semester’s assignments and let you have at them.”

I was blown away, confused, and impressed at her introspection and reading of me. She added to this though, the third and most valuable lesson of this entire class. This lesson was more valuable than anything I’d learned in college or life up to this point. It was something I knew, without knowing that it was something I could put into words. She said, “if you’re like me, and I suspect you are, I’m not going to hold you to attending every class. Make sure you come in for the tests though, and try to come most of the time, but mainly just get the work done. In addition, get up every hour or so and change the place you’re working, or just walk around. It’ll prevent dozing off.”

She added one more thing, “Oh, also, don’t be the accidental asshole, no need to say you’re bored in my class. Just keep that to yourself you already have fans and friends in the class regardless of you knowing it, no need to give me shit about your boredom.”

The Lesson Trio

Through this these three lessons were reinforced, I’ll call them:

  1. Learning Together Alone – My ability to learn, fast and effectively, is dictated by my ability to hone in on specifics, put those into memory while taking in the abstractions of the ideas at hand. If any questions come up, joining forces or asking a teacher complete this process for me. No classrooms, no needing to sit and be told things that I could easily read 2-10x faster, no need to have concepts pushed at me in a specific dogmatic path.
  2. Be Constructive – Again, just like traveling from point A to point B, we’re all just trying to go somewhere, and we’re all working at this learning thing. Work together, not at odds with each other, everything is better then!
  3. Take Breaks & 3rd Place Displace – When learning, especially with ADHD, you have to break your own super power of hyper-focus as much as you have to battle that of absolute, uncontrollable, and forced distraction. If you can get one under control, you can get them both to work in your favor! Using 3rd places to your advantage, like coffee shops or parks, to do work are extremely effective. Add in a break every 45 minutes or so and you can create an amazingly productive, powerful, and efficient workflow to learn and to simply get things done!

My respect for my teacher just shot through the roof. Not only was she no bullshit, she read me like a book, but she also just pointed out what I needed – these obvious things that I would have otherwise likely missed for many more years.

I took these lessons to heart and started what would become my frequent use and displacement from coffee shops. In addition it taught me that to be truly efficient and effective, I need chunks of time but also need to break up those time chunks with something more significant than looking away from the screen. I need the option to get up and walk away, take a hike, ride a loop around a lake. Something, anything more than merely sitting there and pondering that I’m taking a break.

That brings me to my next blog entry “Magic 3rd Places”, that I’ll have posted soon. I’ll delve into much deeper detail about how I use 3rd places, what 3rd places really are and how I keep my impact to others and myself to a minimum while making use of displacing around 3rd places frequently.