Call Your Old Friends: Four Reasons Why It’s Worth It

I’m horrible at keeping in touch with people who aren’t in my immediate daily life. If someone isn’t involved in my work or my local social circle, I generally won’t remember to give them a call. It’s easy for the busyness of life to eat away at the time available to keep in touch with old friends.

Old friendships are worth fighting for. Yes, it’s impossible to maintain all your old friendships, but it is possible to cultivate a intentional few.

For me, although the time is definitely a limiting factor, the real blocker is the fear of loss. To be frank, for me, time is just an excuse. It’s these questions and thoughts that create the real resistance:

What if the conversation isn’t as good as I remember it? We haven’t talked in a while, what if it’s awkward? What if they aren’t interesting in keeping in touch? I don’t feel like putting out to make this work, it’s easier just to give up.

This year I’m working on reconnecting with old relationships, even if it’s just for 15 minutes during a drive. Here’s what is motivating me:

They give you a fresh perspective. The majority of my old friends have spread out across the country, working in various industries, developing different hobbies, involved in different communities. They bring a unique perspective and help to interrogate your own thinking. They know you better than most, and can offer great advice. Old friends have a vantage point that is impossible to reconstruct with new relationships. They can offer advice that can cut through your bad thinking and enable you to make better decisions, faster. Networks create opportunity. The most successful people I know spend a large portion of their time just corresponding with people. The most valuable professionals are those who have a network they can tap into to get the job done. Keeping in touch with old friends keeps you connected to their networks in some capacity. It’s fun. My old buddies are some of the best people I know. I’d be a fool not to continue to share life when them, even if it’s just over a phone call.

Continue Reading

How to Tackle an Overwhelming List of Tasks

This last week I didn’t keep up with my task list. Some work with a client required all of my attention and the notification badges on my email, todo list, and Slack messages kept growing.

When Saturday rolled around I was buried. After dumping everything in my mind and organizing tasks into logical contexts I realized that there was no way I was going to get through everything. The glowing red double digit notification badges didn’t give me any hope or encouragement either.

I’m not in the clear, but here’s what helped me gain momentum and dig my way out of the hole:

Split tasks up – even if they are small. It’s helpful to break up tasks, even if they should take less than 30min, and schedule the pieces sequentially through the week. Defining the different steps will assist you in tackling them with the slices of spare time you may have throughout the week. Give yourself permissions to punt. In my case, there was no way I was going to get everything done. I scheduled some tasks for later in the week and notified anyone who was waiting on the task that it was going to be delayed. Prioritize. Give all of the items on your list of a priority, this helps give you some additional context about how to start attacking the list. Todoist has some great prioritization functions. Start outsourcing. There were a bunch of tasks that I could send to a VA Look at tasks as an opportunity, not a burden. All of the items on my list are things I’ve chosen to do, chosen to commit to. No one else has put these on my plate, which means they are opportunities that I’ve decided are worth the pain. This is a gift, not a burden!

Continue Reading

Workaround for Heroku Run Log Truncation

Many applications I host on Heroku have small utility or debugging scripts that are triggered via heroku run. Some of the scripts are used to debug issues with an external API, and copying the API request and response is often very helpful in determining what exactly is going wrong. For instance, if I’m debugging a NetSuite SuiteTalk SOAP request, I can pull out the XML and re-run it using curl.

However, heroku run will truncate data STDOUT randomly. This issue has been reported and only seems to happen when writes to STDOUT hit a certain threshold.

The work around to this problem is starting up an interactive shell using heroku run bash and then running your script inside that shell heroku run bundle exec ruby scripts/the_script.rb

Continue Reading

Working on Your Life vs In Your Life

I’m reading the E-Myth Revisited. One of the key concepts is the idea of working on your business instead of in your business. In other words, working on streamlining the process that you or your employees use to create the product or execute the service rather than actually performing the service or creating the product.

Without improving the system you can’t scale the outcome. You’ll be a slave to an undefined process that you can’t delegate.

The same principal applies to my personal life. I need to work on improving the systems an processes that I use to run my life. Working on my life, not just living it.

Here are a couple examples:

Where am I wasting time? What tasks or processes are time consuming but necessary? Automating the purchase of recurring consumables (like toothpaste) was one that fell into the category for me. Where is there a lack of a clear process? For me, my morning routine needed tweaking. Writing down an explicit morning routine has helped bring clarity and focus to what I want my mornings to look like. Is there a lack of focus? Define your goals. Create your own personal “job description” to give yourself the permission to say no to what doesn’t align with your personal mission.

Continue Reading

Results Follow Clarity

Clarity is hard. It takes effort to defined what you are looking for, why you are looking for it, and what you are going to do to get it.

Clarity creates results. It creates momentum. Opportunities appear with knowledge of exactly what you are looking for. Without precise goals you can’t adjust your time and energy to seek out opportunities that align with that vision.

Without a framework to interpret opportunities or situations from it’s hard to say no. It’s hard to choose between opportunities when all the opportunities are better-than-great.

Driving results requires saying no. It requires cutting out the good to make room for the great.

And, sometimes, it means cutting out the nearly-great for the extremely-great.

Create a plan: put pen to paper and create a written description of where you want to go and why in all aspects of your life.

Continue Reading

How to Get Clarity When Your Mind is Scattered or Distracted

When I have a week that is concentrated on a single project I often feel as though I loose focus. My mind can forget other projects or important tasks that were not contained within the context of the project I was working on.

If I don’t catch myself, there is the opportunity for things to fall through the cracks. I forget to respond to important emails, to close the loop on an important task, or push the ball forward on an important project.

Here’s a practice I use to recalibrate myself:

Organize all the paper with ideas or tasks in a single stack. Get a blank legal pad. When my mind seems scattered a blank piece of paper brings clarity. It’s important to get some distance from your phone or computer during this process – even if it’s just for five minutes. Write down everything that comes to mind. Don’t filter ideas or tasks. Don’t worry if you already have them written down. “Brain dump” everything onto paper. For me, it’s important that I write everything down and then move all of the items onto the computer. Open up Todoist, or favorite cloud based task management system. Review new written notes in addition to older notes from the week. Convert all notes into actionable tasks, then throw out all the paper notes. Important: ensure that all notes are translated into action items. If you leave ‘just a couple’ notes or abstract thoughts on paper it will clutter your mind and you’ll feel weighted down.

Continue Reading

NetSuite SuiteTalk User & Role Edits Are Delayed

If you work with NetSuite’s SuiteTalk API, you know that:

You must access the API via employee/user record in NetSuite API calls specify the user role to use You will get different results based on which user and which user role you are accessing the API with. For instance, if the employee record has the “Sales Rep” option checked, all Sales Orders created using that employee/user credentials will have the “Sales Rep” field assigned to the user’s record. Each role has a different set of permissions. You will get different fatal error messages depending on which user role you are operating under.

Often, when developing a NetSuite integration, you’ll need to make edits to the SuiteTalk user/employee record or the role.

Changes to the role or user do not take effect immediately. They can take anywhere from a couple minutes to a couple hours to take effect. This destroys the developer feedback loop and makes it exponentially harder to track down the source of specific NetSuite SuiteTalk errors.

This means that if you make a change in your sandbox or production account relating to either employee or user records there is no way to know if the change fixed the issue you were debugging aside from waiting a couple hours and retrying the operation.

Often, what I’ve done, is write a failing feature test for my NetSuite integration issue I’m encountering and then rerun the test in the morning after making user or role tweaks.

If you have access to the private NetSuite forums, you can read this post for more information.

Continue Reading

Install PHP with PNG Support on Apache in Yosemite

Yosemite comes with Apache + PHP out of the box, but its PHP binary is a bit handicapped. It doesn’t come with built in PNG support.

This causes issues if you are developing WordPress sites: resizing PNG images will silently fail. If you have custom image sizes set in your WordPress theme, they will not be created at all if PHP is not compiled with PNG support.

Here’s how to recompile PHP on Yosemite via Brew:

brew tap homebrew/dupes brew tap homebrew/versions brew tap homebrew/homebrew-php brew install freetype jpeg libpng gd brew install php56

You’ll have to edit your Apache configuration to use the new PHP installation:

nano /etc/apache2/httpd.conf # add the following line to the above file LoadModule php5_module /usr/local/opt/php56/libexec/apache2/ # then save, exit nano, and run this command sudo apachectl restart

There are also some additional WordPress & PHP tools you can install via brew.

Continue Reading

Why You Should Blog and How to Get Started Quickly

I’m a strong believer that everyone should start a blog. I understand the resistance to committing to it, to getting out there in the conversation, to possibly failing or feeling like you have nothing to say.

I was talking to a close friend the other day who was giving me a hard time for my more technical blog posts:

Everyone has something to say: it hasn’t all been said before!

Here are three reasons you should start blogging now:

It clarifies your thinking. I’ve found that since I’ve started blogging on productivity I’ve implemented more of the principals I’ve blogged about because I’ve created clarity around those principals or thoughts in my own mind. It puts you in the conversation. You’ve heard it said that 80% of success is showing up: your online presence is “showing up” in the digital world. It allows others to easily vet you. Your writing, thinking, personal branding, etc is all present with a blog. When a business partner or employer is evaluating whether or not to partner/hire you, a online presence eliminates some of unknowns. It’s essentially “open sourcing” your brain.

Here’s how to get started:

Signup for an account on, start a self-hosted WordPress blog for more customization, or get a service to setup everything for you. Signup for a buffer account. Connect your LinkedIn, Facebook, and Twitter account. Connect Buffer to your WordPress account. You now have a poor-man’s social media manager. Get the WordPress iOS app and start blogging when you find 10-15 minutes opportunities in your day. Blogging is all about capturing your thoughts as they come to mind and turning them into full blown posts later. Don’t be a perfectionist. In most cases, shipped is better. Be ok with mistakes, get the post out and improve it later. Ship it!

Continue Reading

Split Shipment Fulfillment with NetSuite

NetSuite natively supports partially fulfilling a SalesOrder. However, updating an ItemFulfillment record (NetSuite’s equivalent to a ‘package’ or ‘shipment’ in other systems nomenclature) after it’s been created comes with some unique edge cases in NetSuite.

Here’s the NetSuite state that I was operating in:

Sales Order is created. order_status = _partiallyFulfilled An ItemFulfillment exists with ship_status = _picked A CustomerDeposit representing the payment coming from an external system is associated with the SalesOrder The contents of the created ItemFulfillment need to be adjusted and a second ItemFulfillment needs to be created.

Here is some key information on how NetSuite’s ItemFulfillments work:

The order_line field is not set on an ItemFulfillments item list elements if the item is a “member” of another item in the item list. In other words, if you are fulfilling a KitItem or AssemblyItem the components of those items will appear on the ItemFulfillment’s item list but will not have a key (unique ID to reference them on the sub lisT) and thus cannot be updated. The item_receive flag is equivalent to the “Fulfill” column in the GUI. The replace_all flag on item_list must be set to false when updating an item list containing KitItems or AssemblyItems. Also, all items without an order line must be removed from the item_list. If they are not removed, the following fatal error will be thrown: “Adding new line to sublist item is not allowed.”

Using the NetSuite SuiteTalk ruby gem, here’s how to remove items from an existing ItemFulfillment:

item_fulfillment.item_list.item.each do |i| i.item_receive = false i.quantity = 0 end item_fulfillment.item_list.replace_all = false item_fulfillment.item_list.items.reject! { |i| i.order_line.blank? } item_fulfillment.update(item_list: item_fulfillment.item_list)

Continue Reading