An Experiment with Obsidian

Three years ago, when I first returned to Oracle, one the SEs I managed complained to me that we didn’t have a good way of sharing information as a team. While I agreed with him, I also didn’t have a good solution. And thus began an epic saga that took three years and resulted in a crazy, distributed Obsidian.

But first, how did we get there?

Just do this… uh…

The problem seemed easy. Just share create a shared knowledge base, let people have access, and they’ll contribute. Yay!

Well, not quite. We created a shared knowledge base in Confluence, gave the team access, and spent a few weeks contributing articles. We got 20 or 30 decent pages and then no one contributed any more. The confluence site required us to be on VPN, which most of the team wasn’t on a regular basis. It was also outside of our normal workflow and it didn’t have any of the documents we used regularly.

So it withered and died.

A few months later we had the grand idea to “just collect the good stuff” and proceeded on a quest to get all the best content from our team, put it in a shared repository, and let everyone have access. Awesome – a knowledge base!

Except that again, it was outside the normal workflow and mistakes were made easily. More importantly, the folder structures were messy. Was that document for a B2B company or B2C? What if they’re both? Do we categorize according to product, industry, presenter, time, or something else?

It ended up the only person who could find anything was the person who put the repository together. And thus, it stopped being used except as a place we pointed brand new people.

But, Oracle’s internal document sharing product (Oracle Content and the internal version is OraDocs) also comes with a web page builder that can access the files. Awesome! We’ll build a portal!

And thus, yet another epic quest and a few months of work by a few people. It resulted in a nicely curated site with links to past work done in different categories. Except that it was again outside of our day to day workflow, wasn’t regularly updated, and could only be updated by a few people. It died with the exception of being a nice place to send brand new people. No one used it and it got out of date in six months.

Now what? Notes?

Eventually I realized the core issue was that our knowledge base had to be part of our day to day work or it would never be used. If something isn’t part of the workflow and there isn’t a clear trigger for when to update it, nothing will happen.

I eventually settled on the idea that we needed to be sharing everything, not just our best stuff. We could always cull and curate, but it’s hard to point to great things if you don’t have the item in the first place.

So I started down the path of creating a shared note taking space. I explored OneNote (unable to use on Mac due to security risks Oracle didn’t like), TiddlyWiki, RoamResearch (not encrypted at the time, not Oracle approved), Logseq, and eventually Obsidian. The process took a long time and – though I personally use RoamResearch for most of my daily notes – we also had the constraint of a locally hosted, non-SaaS solution in order to get through Oracle’s security controls.

Interestingly, as I made my way into shared notes, I came to realize that most notes don’t need to be shared or don’t really need to be shared in the same format. They just need to exist in a place people can find them.

The Solution

The team’s final solution was a combination of Oracle Content (on OraDocs, the internal version) and Obsidian. With Obsidian being locally hosted, we could control most of the security vulnerabilities without relying on third party hosting of secure data. Additionally, the whole team was already using OraDocs to store many of our files.

Oracle Content
By focusing on creating shared folders for every one of our projects in a similar format (thank you Post Haste), we had a consistent structure that made it easy to find work in progress. It also became easy for the team to move their work off of their local machines and push it to Oracle’s cloud storage. With Oracle Content, they had both a local working copy and a copy in the cloud shared with the team. So the team started doing all of their work in the shared folders.

Immediately, the process simplified collaboration across the team. Anyone on the team could just share a link, the other person could jump in and get a read on the project so far, and then could contribute immediately. It sped up our ability to work together immensely.

Previously, we would share files through Slack or email, send different versions of the documents back and forth, and constantly try to figure out who had which version. It was a mess. Plus, when people left the company, most of their files left with them. It’s really hard to go back to see what was presented to a client last year when the person who did the presentation is no longer at the company.

Obsidian for Context
However, we still had two problems – the folders lacked context and we didn’t have a good way to share information that should be in a knowledge base.

That’s where Obsidian was brilliant. It creates markdown files that sit inside of a vault. Those files are indexed and easily searchable, interlinked, and referenced from other documents.

By setting up our vault correctly, we could get the context we needed out of the CRM, reference the shared folders, and create a knowledge base the team was working in on a daily basis.

Additionally, by using good tagging, we could easily writing Dataviews to surface different deals and related files across the vault.

Version One
The first version of our knowledge base put the Obsidian markdown files directly inside of the folders for each opportunity. That made linking to folders very easy and was simple to just Slack someone an obsidian link to get them both the background and the link to the folder the other documents (Excel, PPT, etc) were in.

The problem was that Oracle Content didn’t allow us to selectively sync folders. So everyone had the same .obsidian folder and were constantly overwriting each others preferences. It was untenable.

Instead, we used Syncthing to share the files and created a server that was always online as a relay in case people weren’t online to get the files (we work across timezones and people travel). It worked great, but wasn’t really within the standards of Oracle so we kept it small.

Version Two
Recently, Oracle updated Oracle Content to allow the selective syncing of folders. That let the team choose to sync our core folder, but unsync the .obsidian folder so everyone could have their own preferences. It worked great.

Well, it was great until everyone started really using it. Then suddenly we were blowing up hard drives. When the shared folder starts being 30-50GB, a lot of people ran out of space really fast. And then deleted TONS of files from the shared drive. Oops.

I was able to recover the files – Content has a good trash management system – but we had to solve the scale issue. And thus, pointer files.

Instead of having the markdown files for each opportunity in the shared folder, we put them in a separate file called ‘Index’. Our build process then queried the Oracle Content API to search for any folders with the Opportunity ID in the name and linked those folders as a list in the Index markdown file. That way the team could easily access the index without destroying their machine and selectively download the folders they were working on at the time.

Build Process?

Yes, I wrote a few thousand lines of python to make this whole contraption work. Fundamentally, it was just taking a few reports from our CRM, breaking them into markdown files, and ensuring they were properly tagged/linked together using obsidian links.

The underlying vault ended up with reference files for Deals, Accounts, People, Industries, Partners, Competitors, and Products. Each of the reference files used Dataview to create tables listing the deals a particular person, competitor, product, etc was involved in with a link the file.

The ultimate result was really fast. You could navigate across the markdown CRM, find what you needed, and then end up in the folder with the related assets in a few seconds. Deals were either “Active” (currently being worked) or “Past” (closed). Need background information on a deal? Go look at all the deals we’ve worked on that account in the past (Past -> [account folder] -> deal 1, deal 2, etc). Looking for a deal we’re actively working on? Go to Active -> [account name] -> [deal name] and you’ll find everything you need.

For a few weeks, the process was working great across about 40 people. It had worked the previous year with my team of 6 exceptionally well – allowing us to collaborate, have shared notes, and understand everyone’s weekly work more easily. The larger team was just starting to get the process going before our group was radically reduced in size. The team that is left continues to use it, though in a smaller scope now.

Caveats

There are a few issues with using Obsidian in a widely distributed manner.

Concurrency and overwriting
First, there is almost always lag time in the file updates. That creates clash issues. Either your sync mechanism is unaware of the clashes and simply overwrites constantly or you have an issue with diff merges. We started by trying to automate diff merges and then realize there was a better way.

In larger files where multiple people were likely to be editing concurrently, we broke up the index page into smaller pages that were instead referenced from the index. For example, in our weekly progress updates, instead of having everyone edit the same page, we used the “Weekly Update” to reference a page each person updated. By using the ! sign, we could hot load the file into the index page (ie, ![[Cody Boyte Update – 08/09/2022]]). That let each person create updates and the updates would show up as soon as the sync happened without breaking the content anyone else edited in the meantime.

Private information
The only way we could get the process to work was to make the entire folder structure public to our team. Otherwise Obsidian can’t properly index the files to ensure consistent naming without duplicates. While there are some solutions for semi-private data like encrypting some of the content with a key, that wouldn’t really work for our team.

Instead, we just kept secret things elsewhere (see: password managers, other note systems, etc). It’s a shared folder for the team, not a place for things that shouldn’t be seen by others.

Likely scale issues
I’m not sure that this process would be scalable much beyond 30-50 people. It certainly wouldn’t scale to hundreds of people using it concurrently. The number of files being synced could get crazy fast and duplicate naming issues would abound.

I’ll return to this post a little later to add some of the stats on the size of the vault (~5k markdown files, 40GB+ of shared files, etc), but let’s just say it was big with a lot of people using it at the same time.

Would I Do This Again?

Yes, in a heartbeat. It’s the first system I’ve used that made it easy to navigate our CRM for the solutions engineers. We didn’t need to add info, we just needed to see it. All of our files were at our fingertips and easily shared. Plus, we were able to quickly share weekly updates, reference deals, send links to the team with all the context they needed to help, etc. It was a lot of work to make it function correctly, but when it did the process was a bit magical.

It’s My Fault

I’m incredibly proud of my wife. She’s an amazing physician, a fantastic mother, and a wonderful wife. I am always trying to live up to the example she sets but honestly have no chance. She’s just better than I am.

One of the concepts she uses to be amazing is taking responsibility for everything. It’s always her fault. No matter what went wrong or why, she tries to understand what she did wrong. What happened, why did it happen, and how can she make sure it doesn’t happen again?

The concept seems aggressive – there are many things that aren’t our fault. Sometimes we have bad luck. Sometimes we failed because of the actions of someone else. Sometimes we made a mistake. There are always excuses available to shrug off the sting of the failure. But my wife doesn’t do that. She owns it.

If she made a mistake, she figures out all of the failure modes. Did she fail because she didn’t know something? She’ll dig in to understand how to learn what she needs immediately so she never makes that mistake again. Did she fail because she was missing a tool, ran into trouble, or didn’t have a resource she needed? She’ll figure out exactly what resources, tools, or setup are necessary and will ensure they’re always available if she needs it in the future. But these are common. We all do something similar when we fail. We look at the situation and try not to make the same mistake again when it’s obviously our fault.

What makes my wife special is that even when she could easily blame someone else for the failure, she doesn’t. Did one of her colleagues fail to book a patient correctly? She thinks it’s her fault that she didn’t communicate the context of those situations correctly, so the other person didn’t know how to act. Did a specialist miss the proper diagnosis for one of her patients? She’ll understand why and the next time she calls the physician personally to ensure the proper context is set. Did her husband fail to take care of a chore around the house? She’ll figure out how I can create the right setup so it doesn’t happen again. Everything she needs done is her fault. If someone else fails, then she thinks about all the ways she can ensure it doesn’t happen again.

That level of ownership is rare. Most people are incredibly happy to pass the ownership of a failure on to another party. It’s much easier to sit back, point out the problem, and ask why the other person isn’t solving it. Not my fault.

Owning failures that you didn’t do personally is hard. Owning the failure takes work. Owning the failure hurts. It hurts because you can’t always stop it and becuase failure happens a lot when you own the failures of the people around you.

But it makes you better. A lot better.

Owning the failures changes the scope of how you can be successful. Thinking about all of the ways your actions can fail – your own actions, the actions of people around you, and the actions of your organization – means you start understanding how your work impacts other people. It forces you to create context for other people. It forces you to think about how the work you do makes life harder or easier on others. It forces you to think about success as much larger than your own inputs and outputs. It makes everything you do better.

An interesting, related part of this idea is that my wife has become incredibly successful not by trying to find success but instead by finding out how to mitigate every way she can fail. By looking at all of the ways her patients might end up with bad outcomes and bad treatment, she is able to get ahead of the issues before they happen. She anticipates the way her office or organization or other doctors might not give the right treatment and adjusts for it. It’s hard. It’s a lot of work. But it’s exceptionally effective and resulted in her being one of the best doctors in her region.

As I’ve personally adopted the practice, I’ve found my influence on the people around me and my wider organization has grown significantly. The actions I focus on changed dramatically. It’s my job to create the conditions that allow the people on my team to be successful as often as possible. When someone on my team fails, it’s not their fault. It’s my fault for not helping them find the conditions to be successful. I look at what happened and try to understand the systemic issues I’ve created that led to the failure. What could I do to change improve the odds of a successful outcome in the future?

Often that means using the Five Whys to figure out root causes. If someone on my team failed in a particular meeting – what created the failure? Did I put the wrong person in the meeting or on the project? Did I provide the right context? Have I helped them develop the skills to do what was needed or helped them understand frameworks that would have helped them get there? Have I created the right relationship with the other group to ensure everyone has the right expectations? Or, at the end of all of the questions, is the person on my team in the right place for their skill set and motivations?

If I have the wrong person on my team then how did they get there? How can I understand them well enough to help them find the right work on my team, the right team at my company or the right place where they can excel? If I was the one who hired them then how can I modify my hiring process to ensure I don’t hire the wrong person in the future? Hiring the wrong person isn’t fair to you or the person you hire.

Fundamentally both my wife and I know that not everything is our fault. At a certain point you have to let things go. You did your best and it didn’t work out. The ball bounced the wrong way this time. It happens. But choosing to own the outcome gives you power. It opens your mind to all of the ways you could have influenced – or could influence in the future if you do the work – the outcome you got.

One key: none of what I wrote was “be better next time” or “just try harder” or any other version of grind culture. The answer is rarely “more work” when you fail. It’s almost always finding ways to better understand the system and building in conditional checks that help you avoid known issues.

Own your outcomes. Ask what you could have done differently. And go do it.

Reading $50k in Books Before Kindergarten

Yes, I know – the title sounds absurd or an extravagant waste of money. I promise it’s both true and completely affordable. But first I’ll tell you a story about how we got there and what it did for our son.

The Backstory

The epic journey began when my son was 1 and my wife stumbled on the 1000 Books Before Kindergarten program at our local library. She came home excitedly and let me know we were going to do it. I liked the idea, but thought “wow – is that even possible? That’s a big number!”

It turns out the program is easy to do. 1000 books is just 3 books a day for a year. One book at nap time and two books before bed and you’re golden. You can even record each time you read a book again. Read the same book to your kid 3 times tonight because she wanted to hear it again? That’s 3 books down on your way to the 1000 books goal.

Well, it would have been according to the way the 1000 Books program works. But that wasn’t good enough for my wife. She decided that each book only counted once. We were going to read 1000 unique books to our son before kindergarten.

I was up for the challenge but it sounded really expensive. If the average board book or picture book cost about $10 and we were going to read 1000 unique books, then someone was going to be spending $10k or more on books. Diapers are expensive enough. No way I was spending that much money on books for a toddler.

Getting to 1000

The only realistic way for us to get to 1000 unique books was to go where they give you the books for free – to our local library. It was especially good for us since we were reading a ton of books once and giving them back.

At first we went to the library the way everyone else does. We would go in, walk around to look at some of the featured books, then dig through the stacks a bit to find some of the books we wanted. We looked up “lists of best kids books” to figure out books we wanted to read our precious little one. I’d make lists of books, look them all up, and then go search for them all to get just the right ones.

That got us to ~300 unique books but it was incredibly time consuming. I was spending hours looking for the right books and an hour or more at the library trying to find them all. Eventually I stumbled on a completely different, way more sustainable strategy.

We now read in one of two ways depending on where our kid was in their development: alphabetical order (the default) or by ‘special labels’ on the book spines.

Reading the Library in Alphabetical Order

Just writing the title to this section sounds crazy, but yes – we currently go to the library and pull out whole sections in alphabetical order. We’re doing this again for our second child right now and I have a whole stack of books with ‘G’ authors sitting on our bookshelf. It baffles the librarians when they first see us do it (new ones join from time to time), but eventually they just laugh with us and thank us for finding books they haven’t seen in years.

Here’s the trick – you go in alphabetical order but use a few filters:

  • Does my child have the attention span for this book yet? Some books are too long for young ones or too short for older readers.
  • Does this book match what I want my kid to read? If you have a certain set of religious beliefs, it may dictate what books you pull (no Christmas books or no books about monsters or something).

That’s basically it. Outside of those filters, you start with the letter A and grab an entire section every week or two. I used to check out ~40 books a week for my son before he went to daycare. After he started preschool our reading was around 40-50 books every two weeks since he wasn’t at home for nap time as often.

The process makes trips to the library incredibly time efficient. I walk in, drop off this week’s books, look for the section you decimated last time, and take the next section. I’m usually back to the desk to check out 40 new books before the librarian is done checking in the books I returned. In fact, a few weeks ago, I showed up 10 minutes before closing time and walked out with 40 new books. The new librarian had warned me they were about to close and was a bit stunned by how many books I checked out.

The other advantage we’ve noticed is that it exposes our kids to all kinds of things we wouldn’t have intentionally thought to focus on. We’ve read books about Eid, about gardens growing in cities, about making apple cider, and women flying to outer space among hundreds of other topics. Some deal with grief or loss, some are about friends and fun, and some – like How Are You Peeling – are absurd. We regularly stumble across amazing books the librarians have forgotten about that we love. We also find books we’d never read again and return them without having paid tons of money for them. It’s amazing.

Additionally, because man similar topics show up across a lot of different books, our kids seem to get a very rich understanding of the world. Seeing different families shown across cultures, stories and situations gives them breadth. Understanding sadness or that being mean doesn’t work across a dozen stories gives texture to their thought processes. It’s both reinforces what they’re learning and helps them get different views of it. It’s a bit like trying to train a machine learning model – they’re seeing different views of the same concepts over and over which helps them build their own mental models.

Reading the Library by Book Tag

There is an exception to the process above that we have used for both of our kids – the specific training process for numbers and letters or, during different holidays, a focus on one specific topic for a week. We’ve found that our libraries have a special tag for ‘ABC’ and ‘123’ books to denote books about the letters or numbers. They’re incredibly valuable books for kids learning numbers around 2 years old and letters at 3 or 4.

Our process is very similar to the ‘reading in alphabetical order’ above, just filtered to the appropriate special tag. Right now we’re working on letters with our 3 year old son. My next visit to the library will be to do our typical alphabetical order process above, but I’m only going to pull ABC tags. I’ll come home with 40 books just about letters. I’ll do that for the next few times I visit the library.

The incredible thing we found with our older son is that after reading ~100-150 different books about letters, suddenly he started to know them all really well. And, because we didn’t just repeat the same book over and over, he wasn’t just memorizing the book. He was starting to pick up on the pattern of which visual representation was each letter.

But what about the $50k?

As I promised earlier, the $50k number sounds absurd but it’s entirely true. In our case, once we started with the crazy idea of reading 1000 unique books we ended up going a bit nuts. We used the 1000 Books iOS app to record our progress because it allows you to scan barcodes which makes the process much faster. At around 3000 books we stopped recording and started estimating instead.

Based on records from our library plus a few rough estimates of our nightly reading, we averaged around 3-4 books a day for the 5 years from 1-6 before my son started kindergarten. We read him around 4-5k unique books from the library (roughly 2/3 of the picture books in our library) and out of our own purchased book collection.

4000 or 5000 books at $10 a book is $40-50k. Many picture books are $17-25 so the amount could easily be in the $75-100k range if we were liberal with the ‘average cost per book’. Either way it’s a ridiculous amount of money invested in my child before kindergarten. Nearly all of it was free.

More than anything, this post is just a reminder that “hey, libraries are free and massively underutilized.” Go get some books from the library and read them to your kids. They’ll thank you later. My son is in kindergarten and reads at a 3rd grade level already. I’m not saying that’s what will happen for your kid, but I’m quite certain it helped ours.

Query Variables into Form Fields

Occasionally I run across the situation where I need to grab query variables on a page load and stuff them into hidden fields on a form. It’s most common in marketing, particularly in either social or ad tracking.

Every now and then I’ll tell someone about it and they get excited. It’s only a single line of code you drop on your site and it works for every form. And yet, I somehow keep forgetting to save the code. So I end up rewriting it each time.

Well, I’m done with that. Here’s the code:

<script>
    var qs=function(e){if(""==e)return{};for(var t={},o=0;o<e.length;++o){var n=e[o].split("=",2);1==n.length?t[n[0]]="":t[n[0]]=decodeURIComponent(n[1].replace(/\+/g," "))}return t}(window.location.search.substr(1).split("&")),f=document.forms;for(x in f)for(item in qs)this.form.elements[item].value=qs[item],console.log(item);
</script>

All you have to do is drop that code in the footer of your page and it’ll work it’s magic. Do be aware that it will attempt to apply the query variables to every form on the page – main form, newsletter subscribe form, etc – if the query variable is equal to the name of a form field.

A few notes:

  • If the form field name equals the query variable, the field will be updated with the query variable value.
  • Make sure the script runs after the forms you want filled.

The Stories We Tell Ourselves

I find it interesting how very small things we overlook have a huge impact on our performance. One small thing that has a huge impact on my world are the stories I tell. My stories define my world.

The stories I tell myself affect the way I interpret the events around me. I tell myself how my day went, why we won or lost deals, or why I love or hate my job. Every situation is a story I retell myself, my wife or my friends.

The interesting thing is understanding the power of the stories we tell ourselves. Especially when you think about being internally or externally oriented.

Psychologists call the concept a person’s locus of control. Do you ascribe things to be your fault or an external problem? People with an internal focus believe they control their environment. People with an external focus think their environment controls them. Each orientation has an advantage and disadvantage. An internal orientation leads to feeling in control but can lead to lower emotional awareness. People with an external orientation are very aware of other people’s feelings but often feel powerless over situations.

I’ve found the internal/external question fascinating. In particular, how I explain what has happened in my life changes how much agency I have to affect it.

Awhile back I lost a deal to a competitor. At first, I used a self-serving story to tell myself I couldn’t have won the deal. We got to the deal too late, the salesperson didn’t do his job, or the company didn’t pick us for a reason outside of my control. Those are the easy stories to tell. It externalizes the failure and allows me to move on without much emotional distress. But it also doesn’t help me much. It doesn’t give me a way forward or help me win similar deals in the future.

The exact inverse doesn’t help much either. We didn’t lose because I’m bad at my job, messed up the deal or that I lose every deal. Those stories aren’t true and would only serve to make me unsure of myself.

The reality is somewhere in the middle.

It’s true that we got to the deal late and may not have had a shot anyway. But there were things we could have done better. The deal wasn’t out of my control. And losing deals like this in the future didn’t have to be the story we have every time.

After I told myself the self-serving stories, I stepped back and reconsidered. I thought the conversation with the customer wasn’t set up right. It was my fault that I didn’t lock down the talking points and framing with the rep before we walked in the door. It was my fault we didn’t nail the presentation and the follow up afterwards. We could have pushed the odds of winning much further in our direction.

Even more importantly, the problem wasn’t isolated this deal. The real reason we lost was because everything was haphazard. We didn’t have a consistent system driving a process across the organization. The solution was actually to fix the company’s sales process. But knowing a solution and complaining that it wasn’t done right doesn’t solve the problem. It only gives me a story to make myself feel better. My college lacrosse coach always used to say “excuses only satisfy the person making them.”

If the story I told myself was that my job is to focus only on my deals, I don’t have much control. Every new deal with a different rep would likely end similarly. If instead I tell myself the story that it’s my job to make the company better every day then I had a lot of work to do. I could change a lot in the wider context of how our team approaches deals.

Over the last year and a half, I’ve spent a tremendous amount of time training my team to get better. I’ve worked with sales managers, salespeople and the people on my team to lock down processes that work. And it’s working. We’re on target to hit our goals for the year. It’s not all my work, but by widening my scope and my story I’ve been able to have a bigger impact that I would have if I told myself a different story.

The lesson is simple – be very careful about the stories you’re telling yourself. Be careful about how you define wins and losses. It’s very easy to shape the world to feel like everything good is your fault and everything bad has an explanation. If you step back and reframe your story does it change?

How can you widen your view? What could you be taking responsibility to fix?

The Difference Between Ambition and Desire

One of the things that I see people mess up a lot, especially around their careers, is the difference between ambition and desire. We all have desire, but few people have ambition.

I’m reminded of the difference every time I ask people where they want to be 5 or 10 years from now. It’s the same question that gets asked in pretty much every interview – and yes, I’m the weird guy who asks people that in real life. I ask it because it helps me understand how people prioritize their decisions and think about their lives.

Desire is simple. It’s the easy answer to where someone wants to be in 5 years. It’s saying “I just want a good job with a better commute” or “ someday I want to be a manager” or, like one of my friends told me recently, “I just want to make a ton of money, I don’t care how.” Everyone has desires. Desire is all about consuming. It’s the money you need to buy a better couch or live in a better neighborhood or go out more often. It’s the job promotion you want because it will stroke your ego and make you feel like you’re doing well in your career. It’s winning the Powerball. It’s short term happiness.

Ambition is a lot different. Ambition is about creating something. It’s about having a point of view and an understanding of the future version of yourself. It’s about understanding where you want to be eventually. I love it when I ask someone where they want to be in 5 years and they talk through their vision of how they’re going to impact the world. One of my colleagues runs a non-profit on the side and wants to be able to turn it into something that has a huge impact in her local area. She realizes that she doesn’t yet have the skills she needs to have that impact, so she’s focused on finding her way there. Everything for her is either a stepping stone or an obstacle towards her true goal. Ambition is focusing on long term happiness.

Or, in simpler terms, desire is looking at the mountain and dreaming about what it would feel like to be on top. Ambition is making a plan to get to the top and then taking the steps to get yourself there. A few years ago, Auren Hoffman, wrote a wonderful piece about the difference between creating and consuming that had a huge impact on how I’ve thought about ambition. His main point is that any time we’re consuming, we don’t have time to create. But value comes from the people who create and we’re all happier when we’re being creators. Watch little kids – they love to make things and they’re super happy. Ambition is treating your career as a creation, as something you’re building. It’s about shifting your career from asking “how can I get more money so I can consume things” or “how do I get a better job to stroke my ego” into a question of “which sets of options will help me towards what I’m building” or “who do I need to be to accomplish the great thing I want to accomplish?” Creating can be hard though. It takes work and energy. It takes hustle. It takes the time to decide what you’re going to build.

In my experience, ambition requires three things:

  • An understanding of the world around you – in particular the niche where your career is focused
  • Deciding where you can create true, long term value in that world
  • Understanding what you need in order to be the person who can offer that value

I’m not saying that being ambitious is easy. It’s not. And it can take awhile to really figure out what you’re going to build.

Through most of my 20s I struggled to both understand which part of the world I wanted to impact and how I could add value. I jumped between jobs a bunch while I searched for the place where I was incredibly valuable. However, I kept searching and eventually found a niche where I can have an incredible impact. Having a solid view of how I’m going to be impacting that part of the world over the next 15-20 years has made my decision making a lot easier. Everything I’m doing now is a stepping stone to get to the world I’m creating.

What are you creating? What do you want to build with your career?

Waiting for Your Boss to Give You Responsibility is a Mistake

“…whatever you’ve done, whatever you’ve been, is all, totally, one hundred percent, your own fault. All.”

Dr. Richard Colin Campbell Ames, The Cat Who Walks Through Walls By Robert Heinlein

The quote isn’t actually true, entirely. There is a lot of argument for luck in everyone’s career. But thinking that everything is your fault gives you a more agency in how you think about your career. In fact, I’d argue it’s the secret to getting ahead.

Lately, I’ve been having a lot of conversations about careers. It seems to be trending with the people around me. This weekend, I read both You’re Only 23. Stop Rushing Life. and a fantastic response Do Your Job First. Both articles talk a lot about career progress and the manager/employee relationship. In both, a young employee was looking to the boss to give them responsibility.

That thinking is exactly the wrong way around. If you want more responsibility, it’s your job to take it.

Here’s the secret no one tells you: Your boss is busy. They’re dealing with the needs of 3 or 6 or 10 or 50 other people. They’re trying to hit their targets for the quarter. They’re dealing with their own boss. And often they’re fighting internal political battles to get the resources they need to make you successful. They aren’t watching your every move. They don’t have that much time.

Lesson 1: Be fantastically good at something.

Before you do anything else, focus on your job. The one you got hired to do. Your boss has to trust that when they give you a job, you’ll get it done at least as well as they expect. If you can’t do that, nothing else matters. Focus on being exceptional at your job. Odds are, no matter how fast of a learner you are, you can get better. A lot better.

An unfortunate truth is that it’s unlikely your boss is one of the best in the country at your chosen skill. Maybe he or she is, maybe not. But even if your boss is, it’s unlikely they have the time to teach you everything you need. There are, however, dozens of experts out there you can read about, follow and mimic. I bet you can start learning on your own, without needing your boss to tell you want to do next. By looking at how other people do your job, you’ll get new ideas. Combining those new ideas with what you’re learning from your current job is where the magic happens.

Let’s say your job is to write a daily blog post for your company. Start reading about how other people do the job and your performance will get better. If you go the path of getting good at SEO, say by watching Whiteboard Fridays by Moz, you’re likely to get better traffic to your posts. If instead you spent time reading The Art of the Interview, you’ll get ideas about who to interview in your industry and what to ask them.

Bringing your new skills to work will make you more valuable to your boss. Keep doing that and pretty soon you’ll be so good that your boss won’t be able to ignore you.

Lesson 2: Take responsibility. Don’t wait for it.

I guarantee, no matter how big your company is, there is always something else to do. There are problems to solve. There are processes to optimize. There are things you could be doing if you just looked around. The secret is simple: make things better around you.

If you want more responsibility, you have to take the initiative to find the problems and fix them. Too many people believe that the can only start doing a particular job if they’re given a title for that job. It rarely works that way. Inside of companies, it almost always works the other way around. Your boss doesn’t want to tell you what to do all the time. They want people who do what needs to be done before they’re told to do it.

Titles are a lagging indicator inside of companies – they’re given to people who have already proven they can do the job.

Let’s say you want to be a manager in the future. Great, so does everyone else. So how does your boss figure out who is the best candidate to promote? They look for who the “natural leaders” are. That’s secret code for “who is already leading people.” The boss notices the people fixing problems around them or training other people. The people who act like they own the place and make it better.

Most people hear that they need experience managing before they can get a particular job. Maybe they are only willing to hire someone to write a particular set of code who has written that code before. Or they only want writers who have written before. How do you get that experience?

You just do it. A little bit at a time. Sometimes at night or on the weekend or in the spaces everyone else wastes on Friday afternoons.

If you want to manage people in the future, start by mentoring the next new hire who comes to your company. Start by taking responsibility for a new project. Or start by learning a new skill and then start teaching other people how to do it. Work on open source projects. Get management experience at a volunteer organization like Taproot or Catchafire.

Don’t wait for someone else to tell you it’s okay to do what you want to do. Find a way to just do it.

How it Works in Real Life

At one of the companies I worked at while back, I watched one of my coworkers ace these two steps. He started off as a regular, run of the mill hire. Nothing special about him. In fact, he was pretty young. While we thought he would be good, he didn’t come with a lot of experience or accolades.

The first thing he did was identify the best person at his role in the company and became his best friend. He mimicked his process, took him out to lunch or coffee whenever he could, and generally tried to figure out why it worked. Within a couple of months, my colleague was the second best person at the company in his role.

At that point, he turned his focus. He kept getting better at his individual job but started thinking about other people. He started taking every new hire under his wing. He would teach them what he knew, give them feedback on how to get better, and take them to coffee or lunch. He started helping them through the process he went through.

No one gave him this responsibility. There wasn’t an HR meeting or some committee that anointed him the onboarding specialist. His boss didn’t tell him to do it. He just did it. He made the world around him better without asking for it. When a position came up for a manager, he got the position. Everyone wanted to work for him. He’d made them all better at their jobs. And, because he’d continued getting better, he was the best at the company.

Today he manages more than 50 people and has accelerated his career. Within 5 years, he will have gone from a no-name hire to a VP at his pick of companies. Follow his lead.

Become fantastic at your job, make the people around you better, and take responsibility before it’s given to you.

As one of my previous bosses, the brilliant Sam Jacobs, aptly put a couple weeks ago:

Your career is your biggest investment. Don’t leave the investment to other people. It’s not their fault or responsibility. It’s not up to your boss to give you direction.

This is all you. What are you going to do?

The Real Reason B Players Hire C Players

While I was home for Thanksgiving, I went to the gym with my father and played a couple of games of pickup basketball. I had the same experience I always have when I show up at a new gym and it caused me to realize the real reason why B players hire C players.

I’m a short white guy. Every time I show up at a new gym, I get picked last, end up on a terrible team, or have to wait a few games. To be fair, when I see short white guys show up at my gym, we usually treat them the same way. In some cases, it works in my favor. I’ll end up on what appears to be even teams and I’m matched up against the worst player on the other team. That’s fun – to turn the tables on them. Other times it means I have to play a game or two on bad teams before a few of the other players realize I can play. Then I’ll get picked up on good teams.

In basketball we have a saying for this – game recognizes game. Good players like to play with good players. So, within the confines of how teams are set up, we’ll do whatever we can to get on the right teams. Sometimes that means that players will sit an extra game longer than they need to sit to avoid bad players. Other times they’ll stretch the rules to stack their teams with good players or pick a player they have good chemistry with first. The regulars judge a new player as someone to avoid or someone to pick up immediately.

On my way home after the game I thought about the old saying “A players hire A players and B players hire C players.” I used to think that B players hired C players because they were insecure. They were afraid that they couldn’t control A players or wanted to feel like they were better. But that’s not the case.

The reason that B players hire C players is because those are the only people they can attract and hire. A players seek out other A players.

Think about it from a hiring perspective. Most A players are never on the formal job market. Recruiters reach out to them constantly. They have a lot of connections in their industry. And, when they’re getting ready to leave a position they start putting out feelers. If they’re A players, they’ll have job offers waiting.

A players know who the other A players are in their industry. They know which companies are good and which are failing. They know where the talent is and know when the best talent is looking for a new opportunity. They find ways to stack the teams in their favor. A players rarely hire a candidate who filled out an application unsolicited. They have a deep bench of A players or B players who just need the right role to be amazing.

B players don’t get that option. They have to set up job listings and hope someone good replies. They work with recruiters hoping they can uncover the perfect candidate. And then, once they’ve found a couple of candidates, they have to try to convince good ones to work for them. It’s not easy.

Awhile back, I was chatting with a friend of mine who is a fantastic developer in NYC. Recruiters call him constantly. In a recent interview he could tell, within about 10 minutes, that he would never work at the company. It wasn’t about him passing their tests. It wasn’t about him being good enough for them. He knew immediately he wasn’t in the right place. They were the wrong people.

The reason B players hire C players is because that’s the best they can do. A players aren’t even available for them. And when they do stumble across an A player, the A players select themselves out. The only time they do get A players, it’s for a very short time while the A player builds the reputation they need to move on.

Game recognizes game.

The Curse of the Full Stack Marketer

Hi. I’m a full stack marketer. And I’ve mostly worked my way out of a job.

I knew this day was coming, don’t get me wrong. But some people don’t see it. They think being ‘full stack’ makes them better. It does, but only for a short time. As a company grows, functions get specialized. Without a clear specialty, your talent for being able to put together all the pieces has a tendency to get overlooked by your boss. Especially when you get a new boss.

They’ll tell you that you don’t have enough years of experience doing any of the things they want done. Or that you should learn one single skill set so they can compare you to other people on the market. It’s their job to put the pieces together, not yours any more.

Being a full stack marketer puts you in a tricky position. You learn everything in marketing, understand how it all fits together, and know when do use each strategy. But the only place you fit nicely, while executing, is at a smaller company. You’re training yourself well to be a VP of Marketing, but there’s a valley most people don’t tell you about when you start down the path of learning full stack marketing. The valley is the period when you don’t have one, single skill – you’ve been training to be full stack after all – but you also don’t have enough history to be hired as a VP of Marketing.

Let me explain what I mean. I’ve been a marketer for seven years. In that time, I’ve taught myself most of the full stack of marketing. I’ve learned SEO, SEM, web development (php/python/js), analytics, content, direct marketing, marketing automation, salesforce, ad buying, building presentations, events, press, social media, and I’ve sat on panels at both industry and non-industry events. I co-ran marketing for two years. But, I’m not a “world class” anything, except maybe full stack marketer.

Do you know who hires full stack marketers? Small businesses. Startups.

I learned the full stack at a startup. I had to figure out each piece in order to be successful. But now we’re not so much of a startup any more. Pieces of what I do are being pulled off my plate little by little. And that’s how it should be.

Someone should own marketing automation. A full-time developer should be running our website and backend technology stack to build out awesome features. Someone should own our content and social media presence. Someone else should be talking to the press and someone else still should be optimizing ad campaigns. Slowly, what I’m best at – integrating everything – is being take away from me piece by piece. That’s the curse of the full stack marketer. Over time, if we’re successful, we put ourselves out of a job.

Update

This post apparently blew up this week, first on GrowthHackers and then on HackerNews. There are interesting discussions about the post in both places.

Also, thank you a ton for all of the comments. I wrote this as a bit of a rant for myself and mostly a response to a bunch of articles I’ve read recently about becoming a full stack marketer. It’s a good thing to aspire towards, but just wanted to comment on the time where I’ve experienced being full stack works against you. It’s not bad for my career in the long run, and not even in the short run, just something I was reflecting on. I’m glad it stirred up a couple of discussions and hope it made a few people think.

Thanks again for the responses and comments.