Category Archives: Uncategorized

Day 8: Oktoberfest and Fleeing Munich

This was just one of the eight or so large beer tents. They're all decorated differently.

This was just one of the eight or so large beer tents. They’re all decorated differently.

Oktoberfest is a three week festival. You start drinking beer by the liter at noon and you don’t stop until… well, actually, that’s unclear.

I attended this festivities on Saturday. It was raining but many people still went to der Wiesn early on Saturday morning. I had made friends with a Naval Police Officer from California who is currently living in Spain. We went together and found seats at a medium sized tent called Zum Stiftl.

Making new friends at the Zum Stiftl tent at Oktoberfest 2016.

Making new friends at the Zum Stiftl tent at Oktoberfest 2016.

In total I spent about €100 on food, drink, and entertainment on Day One. Oktoberfest is a massive festival with many delicious treats to try and carnival rides to jump on. So, you could spend a little less or a lot more.

I was supposed to be in München for 7 days and go to Oktoberfest for two of them. Unfortunately on the Friday before Oktoberfest started, it began to rain a lot.

I was staying at a wonderful campground called The Tent. The Tent is a cheap hostel and campground where you can camp for €99  for a whole week. There was only three problems:

  1. The Tent is extremely busy during Oktoberfest. My inner introvert was screaming for alone time by Sunday morning.
  2. The rain didn’t let up by Sunday morning and it negatively impacted everyone’s mood.
  3. Everybody was drunk and or hungover by Sunday morning. This further darkened the mood.

For these reasons. I decided not to attend Oktoberfest on Sunday. Furthermore, I had a good friend in Utrecht invite me to stay at their place.

I got a refund on my last two nights at The Tent (€28, thanks!) and bought a bus ticket to Utrecht.

I arrived in the Netherlands early Monday morning, and was glad to be greeted with clear weather:

There is water everywhere.

There is water everywhere.

 

Primer’s browser tab notification UI got me to opt in

If I had a list of top ten blogs for startup entrepreneurs, First Round Review would be near the top. They caught my eye with an article on designing mobile apps for explosive growth featuring Kamo AsatryanOf course I had to check out his latest project so I navigate over to http://goprimer.com

I’m met with a…

Primer-landing-page
primer-notification

 

Here’s a closer look at the tab:

primer-notification-closeup

First of all, I was so impressed by this conversion tactic that I immediately went back to the page and signed up. Sure, I probably would have signed up anyway given the fact that I help startups build apps for a living. But maybe not? It’s certainly not uncommon for me to just kill every tab for sake of killing tabs. This little UI feature reminded me that this tab is important.

Now, I’m on Primer’s wait list and I sent the product to several of my colleagues. All because of a red dot on a browser tab.

Good job Primer 😀

 

My Idea of Fun on a Friday Night is Writing this Blog Post

I wrote the following on a Friday night in March of this year:

There is a live band playing in the ballroom.

The Beacon Hill Friend’s House is a Beacon Hill mansion that houses a diverse community of twenty adults. I eat, sleep, and commune here when I’m not working at Pavlok(which is, by the way, not often because these things are shipping in May!).

I’m actually a little bit wiped out from work. Writing is how I decompress from a day of writing software and talking to customers.

Introverted as I’m feeling tonight, I can hear the music from my room and it sounds wonderful.

Funny how a few notes scrawled before bed at night can tell you a lot about a person, especially in the context of other records.

According to my timesheets, I worked on Pavlok 175 hours in March. That’s a lot of if you consider full-time is 160 hours, I took off sick one day, and was home visiting family for two days as well. The next month, I worked a record high 272 hours. Then I fell back down to 171 last month. The first two weeks of June have been a light 40 hours weeks. There haven’t been any fires.

Why am I paying such close attention to my working hours? Why am I writing about it here?

I believe that doing excellent work requires good work/life balance.

In the last two weeks, I’ve picked up sailing and will be spending my Saturday on the Charles River. I’ve spent time in the sun, enjoyed Boston’s beautiful parks and public spaces. I’ve listened to 90% of Nassim Nicholas Taleb‘s Antifragile and am burning through 100 Years of Solitude by Gabriel Garcia Marquez.

On Tuesday, I go to Huatusco Mexico to teach sustainable agriculture with a mentor. While I’m there, I’ll contribute to the Pavlok product remotely. It’ll go smoothly because Pavlok’s software operations have been crafted with an eye for adaptable self-improvement (or as Taleb says: antifragility).

When I return, the team will have learned from my absence. We will have become more versatile, more adaptive to unpredictable changes.

Every now and then, an organism has to struggle to thrive. Some months we’ll crack a couple hundred hours. That’s ok, the job has to get done and 50 hours a week isn’t going to kill us.

Today, there was another concert at the Beacon Hill Friend’s House. I missed it because I was at the office, doing one-on-ones with my team and coding. That’s ok.

Pavlok’s mission is important and deserves at least 1/3 of my waking life. The non-profits I work for (B.H.F.H., Resilient Coders, fsharex, etc) also have important missions and should command the attention of another 1/3 of my waking life. Finally, my own health and wellbeing is important, and deserves the final third.

This is why I’ve resorted to such measures as giving up a cellphone or only checking email once per week.

I want balance for my team and I want it for my clients and hope to lead by example. Achieving that balance is very much within the reach of most young professionals. I would urge all my peers to join companies and organizations that help you advance your life purpose. Don’t waste a single moment on something insubstantial or impersonal.

I’m always looking for a good cause. For-profit or non-profit, if you think you bring great value to the world, email me.

Bad Habits: How to Quit Cowboy Coding using Pre-commitment

One of the core principles of habit modification is pre-commitment: Success is more likely if you plan for it.

Remember elementary school? My mother would pack my bag the night before school, when there was no hurry. This allowed me to walk out the door in the morning without forgetting anything in a hurried bustle.

Today,  pack my bag before I go to bed. This serves two functions:

  1. I go to work prepared, consistently.
  2. It’s a fixed moment in time after which I cannot attend to work concerns.

Today, I’m learning to apply these principles to Pavlok’s development sprints.

I have had a bad habit of cowboy coding features in the interest of saving time. I’ve been working on this habit more than a year now and I think I’ve hit the tipping point.

Here’s what worked:

A Recovering Cowboy Coding Addict

I spend some time on Sundays planning out my week. I know I will spend Monday prepping for the week’s sprint.

This means putting our stories into trello cards and writing SAFE tests.

The user stories are quick-n-dirty Trello cards that become more detailed as more information becomes available. Pavlok is a lean start up, so we have to ship features every week.

I spend mornings heads down. This morning (Monday), I’ve moved three cards into the “Current” column on Trello. We have five columns: Icebox, Backlog, Current, Doing, Done.

These are pretty self-explanatory. Right now I have about a dozen trello boards with those five columns. In this newest board. I have 0 cards ice boxed, 4 cards backlogged, 2 cards in my current sprint, and one card that I’m working on now.

This morning I am writing SAFE tests for all of the cards in my current an doing columns.

SAFE tests are integration tests that cover the ideal user experience, what some people call the happy path. This idea is adapted from a talk I saw at BostonRB by Justin Searls.

Today if I have time, I will flesh those tests out to include some exceptions and edge cases. I will write as many as I can, then go into feature development tomorrow no matter what.

This plan depends on limiting the amount of time I dedicate tests, but STILL DEDICATING TIME.

At Pavlok we alternate weekly design and development sprints. Like I said, we’re lean. So realistically this dedicates two days a month to writing tests. That’s 10% of my time coding.

Our design sprint process is borrowed/adapted from Google Ventures.

In order to achieve a desired result, you need to build the output mechanism into your existing institutional routines.

How else do we use pre-commitment and planning to undermine our bad habits?

Coming Next Week:

How I convinced my boss to buy the whole team bells and whistles.

Good Habits: Making Your Bed

madebed

Honestly, this is one I’m horrible at. I want to write about it today because I just picked it up and a particular effect is stuck in my mind.

This morning, somewhat accidentally, I made my bed. I don’t normally make my bed. It is not a habit I was actively trying to build. I just did it.

It didn’t interrupt my morning routine. I did my morning pages and had my green tea. I’ve been intermittently fasting, so there was no breakfast.

After my tea, I made my bed. I didn’t try too hard. I just threw it together. It took all of fifteen seconds.

Now, it’s 4:45 pm. I just returned from work and was pleasantly surprised by my made bed. I didn’t expect my bed to be made. It normally isn’t. But today it was. Like I left it in someone else’s hands.

I recently got out of a relationship that involved loving acts like making the bed. Maybe I took it for granted. Today, I had the experience of giving that act of love to myself.

Maybe we have to know how to really love ourselves before we can know how to love others. Somehow this tiny step is going to change my life. Love yourself now, right in this moment. And love yourself in the future.

Think about the habits you do in the morning as little gifts you give to yourself later in the day. If you write in the morning, your afternoon-writer feels good about himself. If you code in morning, your afternoon-coder feels good about himself.

If you make your bed in the morning, your tired and willpower-depleted self will feel a little loved at the end of a hard day.

That’s a good thing. That’s a good habit.

Peace,

Justus

Sleep Wars: A New Hope

Over the years I’ve struggled with falling asleep at night. I used to lie awake for hours with my brain chugging away a mile a minute. I would sleep 3-4 hours a night and nap during the day. It was an unhealthy existence.

I’d like to say there was a single thing that fixed my insomnia, but there wasn’t. It took many lead bullets to take down the beast and I’m constantly refining my formula.

Today, I usually get to sleep before midnight and usually get between 8 and 9 hours of sleep per night.

That’s great, my productivity and health have been immensely improved. I have won the battle against insomnia.

Unfortunately, the war for excellence wages on. One side-effect of my lengthy sleep habit is a tendency to wake up late. This is no good for someone who is most efficient in the morning.

I’ve decided that waking up earlier is a priority for me, so I’m participating in a challenge:

Every night I will set my alarm for 6 am (I normally sleep without an alarm, wake between 8 and 9). Every morning I will write down the time I turn off my alarm.

Afterwards, I can go back to sleep if I like, or I can begin my morning routine.

Sunday was day one. I woke up, wrote the time (6:06) and went right back to sleep.

Monday, I woke up, wrote the time (6:11) and meditated for almost an hour. Then I went back to sleep.

Today, I woke up, wrote the time (6:00am exactly) and I conducted my entire morning routine. That means meditation and a protein shake. I even finished some laundry and was at my office before 7:30.

To be honest, I almost failed today’s challenge.

When I woke, my journal was in a different part of the house. I was totally wiped from yesterday, and it was still dark. I actually turned off my alarm and lie in bed for a moment debating (groggily) whether or not to wake up

Luckily, I had a little personal coach to jolt me into action.

My Pavlok Beta prototype was right next to my bed. So when I laid back down after checking (but not writing) the time, I was able to self administer a few shocks.

The experience was incredible. We’ve all conducted the timeless internal negotiation: To snooze or not to snooze? This time, my Pavlok device negotiated on my behalf: “If you don’t get out of bed, you’re just gonna keep shocking yourself until you do.”

It didn’t take long for me to make a decision. I got out of bed, found my journal, wrote down the time I woke up and settled into a blissful meditation.

Everyday we’re finding new uses for micro-aversion therapy. I’ve used it to quit wasting time on social media, beer, and now I’m using it to wake up on time.

We’ve helped users quit life-long addictions like smoking cigarettes and pick up (hopefully) life-long hobbies like painting. Our CEO is using the device to hack his dietary habits and even keep his apartment cleaner.

And these examples are only the beginning. I can’t wait to see all the uses people find for this elegant little device.

I hope you’ll be one of them. Preorder a Pavlok today 🙂

Adding a Contact to Infusionsoft in a Ruby on Rails App ( or: Why I’ll Never do Business with “Confusionsoft” Again)

Infusionsoft is a popular CRM and that is unfortunate.

I had a specification that required new user’s emails to get sent to an Infusionsoft list.

This appears to be a relatively easy task, right? They even have a Ruby gem, which I added to my Gemfile:

gem 'infusionsoft'

Then I performed the required config:

# Added to your config\initializers file
Infusionsoft.configure do |config|
  config.api_url = ENV['INFUSIONSOFT_URL'] # example infused.infusionsoft.com
  config.api_key = ENV['INFUSIONSOFT_API_KEY']
  config.api_logger = Logger.new("#{Rails.root}/log/infusionsoft_api.log") # optional logger file
end

And to test, I ran the recommended scripts in my rails console:

# Add a new Contact
Infusionsoft.contact_add({:FirstName => 'first_name', :LastName => 'last_name', :Email => 'test@test.com'})

No dice. I get this error:

SocketError: getaddrinfo: nodename nor servname provided, or not known
from /Users/Justus/.rbenv/versions/2.1.2/lib/ruby/2.1.0/net/http.rb:879:in `initialize'

Hmm. I wonder why? I do a bit of research. Let’s check the API docs for infusionsoft:

Infusionsoft API Getting Started Documentation

 

Hmm. The ruby gem’s documentation make’s no mention of client_id or redirect_uri. Maybe they mean API key?

I continue digging and find that Infusionsoft has a “developer portal” that requires a separate registration. Maybe I’ll get what I need from there…

Nope. I register my application and receive an “application key” and a “secret”.

What is a secret? Nobody’s mentioned a secret. Why do I need a separate account to use the API? Will be able to access my original account’s campaign and how?

I have a lot of questions, so I call Infusionsoft’s technical support:

“Hi Infusionsoft, I’d like to speak with someone about integrating your API with an existing Rails App.”

“Please hold.”*

*intolerably long hold*

“I’m sorry sir, we don’t have technical support services, please checkout our community forum for assistance with the API.”

Oh, ok then.

Let’s talk about their community forums.

I register for an account. I confirm my email…

I should be able to create a thread, no?

No.

I have to wait for a moderator to confirm my registration.

Fast-forward 24 hours.

I have a deadline and need to get this card completed. My forum registration is still restricted. StackOverflow and GitHub issues have yielded no useful responses.

I make a simple email form in the infusionsoft campaign builder and examine the HTML it provides:

Webform” />

Email *

Time for a hack.

Let’s dissect this HTML. We have form data being passed via POST request. Here are the pertinent key- value pairs:

inf_form_xid : SUPER_SECRET_NUMBER

inf_form_name : ‘Webform’

infusionsoft_version : ‘1.34.0.35’

inf_field_Email : “#{user.email}”

Ah now we’re getting somewhere. I test the POST request in Postman and receive HTML responses. If the email is invalid or a duplicate, the response is a form with error alerts. I already validate those in the rails app so I shouldn’t have to worry.

I use HTTParty to facilitate the request in a Rails service object called AddContactToInfusionsoft.rb

class AddContactToInfusionsoft
 def self.call(user)
   HTTParty.post("https://ns166.infusionsoft.com/app/form/process/961b755cc1de68e2d549824cf11890d5",
     query: 
     {
       inf_form_xid: '961b755cc1de68e2d549824cf11890d5',
       inf_form_name: 'Webform in Content App',
       infusionsoft_version: '1.34.0.35',
       inf_field_Email: '#{user.email}'
     }
   )
 end
end

I test the code in my rails console and it works fine. Push it and you should be all set.

*Paraphrasing obviously.

Will Auto Suggest Change the Way We Speak?

Tonight I was text messaging my girlfriend on an iOS device using SwiftKey. The autosuggestion mechanism was smart enough to predict simple phrases like: “I just got home” or “I’ll talk to you later”.

I thought: I can get used to this.

Then I thought about what life would be like if I always accepted the suggested message.

What if I had been intending to write: “I just got back” instead?

What if autosuggestion convinced enough people to specify “home” over “back”? Apple has an enormous user-base. Constantly altering their lexicon would certainly have an impact on popular communication and the larger english-speaking world.

What if auto-suggest recommended “tomorrow” over “later”? If you accidentally accept the additional specificity then in a sense you commit to it. Are we legally responsible for auto-correct? Some people text rapidly and are quick to hit the send button. There are innumerable examples of people sending ridiculous messages thanks to auto-correct.

I think intelligent language-learning interfaces are the future of technology.

And just like any other advancement in technology, there will be unintended consequences. Auto suggestion is only the beginning.

In the future you will dictate to smart transcribers which remove your ineloquent “uhs” and “likes” and channel your message to the other party, or onto paper.

Have you tried the voice-to-text feature on your phone lately? It’s only a matter of time before that technology is accounting for your regional dialect.

It might be happening already.

We’re in a renaissance of User Experience. Wearable technology is enabling interactional innovation and data collection unlike anything attempted before. Computing power isn’t going anywhere but our auditory and visual recognition capabilities are constantly growing. Trends in machine learning are only empowering these trends.

There is open source technology in voice recognition (CMU Sphinx, with a Ruby wrapper, just out this month!!!), open source facial recognition, and open source pattern recognition. A Boston start up called Indico is making Machine Learning Environments that could empower developers all over the world.

These are tools that anybody can pick up and start building off of.

I can’t wait to see what happens next.

 

Justus: Excellence as a Religion

Germany stomps Brazil
This was originally posted on Medium on July 21st

Learning to code? Perhaps an aspiring entrepreneur? Maybe you’re just trying to be a healthy, well-rounded individual.

Whatever your deal, you probably spend nearly half your day engaged in totally automatic behaviors. These can range from anything to waking up at a certain time, preparing the same meals, cosmetic rituals, or exercise routines.

Our entire existence on this earth is simply the culmination of mostly repeated behaviors.

At Pavlok, we’re building technology to help you out with the automatic half of your life. We also want to educate people on behavior modification and how they can use it to reach their long-term goals.

Personally, I’m just one web developer on an incredibly diverse and talented team. One thing we all have in common is our commitment to excellence and our commitment to self-creation. We all have our own creeds, but it’s science which informs our methodology.

That said, here’s my list of the ten commandments of good habit-hacking, inscribed upon digital medium, informed by science and experience:

  1. Thou shalt use create clear, measurable goals. No “Do TDD”. Try “Write one integration test for each use case.”
  2. Thou shalt start small. Use “microhabits” to ease into new behaviors. If you don’t refactor enough, commit to refactoring just one method every day.
  3. Speaking of, thou shalt refactor! RED, GREEN, REFACTOR. LIKE A STOP LIGHT. BUT REFACTOR.
  4. Thou shalt identify bad habits and their triggers. Do you, like me, occasionally tend to cowboy code at the end of the day because it feels like time is running out? Try writing all your tests in the morning, and making them green at night.
  5. Speaking of, THOU SHALT WRITE TESTS. (Sorry DHH, TDD isn’t dead. Not even close.)
  6. Thou shalt diversify. Be full-stack. Learn all the things. Nourish your body and soul like you nourish your mind. Take a lot of walks. Do push ups. Call your mother.
  7. Thou shalt leverage “keystone habits” as triggers for other good habits. Try waking up half an hour early and using your alarm as a trigger to do ten push ups, or write down your dreams, or floss!
  8. Thou shalt “trigger flip”! After identifying stimuli that trigger bad habits, use them instead on a good “microhabit”. Do you normally smoke cigarettes after a meal? Try doing three (or less!) push-ups instead. You can even still smoke if you want . But maybe you’ll decide to stick around for more push ups. Or maybe you’ve already programmed yourself to want to code after doing push ups.
  9. Thou shalt take good metrics. Identify what you need to measure and do so diligently. If you’re bad at writing things down, try turning it into a microhabit: Take one note every day! Make a chart! Use any number of different tracking technologies. Or better, write a custom tracking program! Then tweet at me (@justuseapen), cause I want in on the beta!
  10. Thou shalt reward (and punish) thyself. Pre-commit, using a referee or technology like Pavlok, to your goals. If you reach them, reward yourself. If you fail, enact consequences. If I hit my weekly step-count goal, I get myself a pretty luxurious foot massage (don’t hate). When I find myself judging other people, I deliver a shock to my wrist using a Pavlok device.

Nobody’s perfect, me especially. And we all have the capacity for self-improvement. I challenge you to use this list and tell me about it.Tweet at me, or shoot me an email with your habit-hacking story.

Peace,

Justus

P.S. This post was loosely inspired by a short talk I gave at Launch Academy which I’ve posted the notes for here.

P.P.S.(Also, thanks to @maneesh, @enthusiastick, and @dnyecarter for their feedback on drafts of this essay)