Problem Discovery: Finding pain points to help others

As a programmer I’m usually up to my ears in problems. Problem discovery is something I recently came upon as a technique to help build a business. Basically you find a problem that people have, then build something to address the problem.

But of course its not that simple, how do you even start with something like this? I’d like to share with you a recent experiment I did where I attempted to do some problem discovery on a pain point I was experiencing: Finding a master mind.

Define the problem (if you can)

I chose to go with a problem I was having of trying to find a mastermind. I had some resources on where to go get into one, but I had lots of questions.

Inspired by all of the tales of entrepreneurs “asking the people” I decided this would be a good time to test out Twitter Ads with a survey.  I put together a quick little survey on Google Docs, and then made a tweet with the link. A few minutes later I had a promoted tweet ready to go.

Now this approach was pretty focused: I had an idea of a problem, and with the twitter ads I was able to focus in on a very specific group of people (twitter users who are looking at the tweets of certain developers-turned-entrepreneurs). On one hand this is the definition of niche-ing down. On the other, I might have been able to widen the circle a little bit and get more people to see/take the survey.

In all this experiment cost $30 (the actual out of pocket expense was $0, I got a $50 credit for signing up with Twitter Ads), and it netted 4 email addresses and bunch of experience with problem discovery.

How can you do problem discovery if you have no ideas?

I was lucky with my experiment I had a pain point I could start with. If you don’t have one, you will have to go out and find one. The best way to do this is to talk to people.

And not just any people, but people who are doing things that either make money or cost money.

For example, if you try to do problem discovery with a bunch of college students you are going to find some problems. BUT… are these problems that people would be willing and able to pay to have solved? Not always.

A better path is to talk to business owners and find out where they are having issues. If you can address a problem that affects how much money they are making (e.g. solving that problem will make them more money or cost them less money) then you have found a great problem.

Another good idea is to solve the problem of people already spending money. iPhones are the perfect example of this. People pay several hundred dollars to get a fancy shiny iPhone. But what happens after a few weeks? The phone gets dirty and scuffed up. To prevent this people will protect their investment with a phone case. If you can provide an attractive alternative to damaging an expensive phone, people will beat a path to your door!

Get out there and find some problems!

These are just 2 approaches you can use when doing problem discovery. I like these because they are more active: you are getting out there and starting a conversation and that tends to directly and quickly get to the root issue.

There other more passive techniques such as watching forums or mining social media to see what people are complaining about. I’m not a fan of doing that though because people like to complain about a lot of things, but they don’t always like to pull out their wallet to make the complaints go away.

And that is what you are trying to do: Find the thing that people will pay to solve. Its not always easy, but it can be very worth it in the end!

What’s your biggest problem?

Announcing Developer Interviews

I’m super happy to announce that my first book, “Developer Interviews: How to land your dream job on your terms” has been released on Amazon!

Check it out:

Developer Interviews cover

Developer Interviews: How to land your dream job on your terms

In this book I give my tips on how software developers can interview better when it comes to the dreaded job hunt. Some of the things I talk about include:

  • What companies are looking for
  • What YOU should be looking for in a company
  • Warning signs that a company might be a bad fit for you
  • Why technical recruiters can be a great help
  • What to do if you make a mistake during the interview

The book is available for a very programmer friendly price of $1.28, or if you are a member of Amazon Prime you can borrow it for free on your Kindle! Also, if you are subscribed to Kindle Unlimited, this book can be yours for free!

I would really appreciate it if you check the book out and leave me a a rating and review on it.

Writing this took what seemed like forever, but it was a great exercise. I think I’m going to do a blog post about when “developers write books”. Its a great step in my entrepreneurial journey. But first, why did I write this book?

The motivation for Developer Interviews

Too often I feel that interviews “just happen” or are otherwise taken for granted. Especially by those who aren’t as intimidated by the whole process.

Additionally I’ve observed that while an interview might seem to go great, or the company might really want you to join them, there are warning signs that you should look out for. If you see one of those, then that might not be the job for you!

So if you are looking for advice on what you can do better when interviewing, please check this book out! If you have any questions or comments, please feel free to leave me a comment below.

The importance of taking a small break

Dawn breaking over a mountain range as a metaphor for a small break

A small break or a big one? Photo credit:

Recently I was struggling with a problem in Elastic Search. I was thrashing around all over the web trying to find documentation that could help me with my problems. In the end when I finally found the answer after several days of work, I discovered I had a tab open that talk about my answer. But for some reason I completely missed this the day before when I looked at it. Why is this?

There’s several factors that caused this:

  1. I was trying to “solve” multiple problems
  2. I was searching non-stop and not pausing to think about what I was reading.

Continue reading

Quick network troubleshooting tips

Network troubleshooting is an essential skill here in the age of the cloud. As systems become more and more distributed (hello microservices!) the network connection between them becomes more and more important. Let’s look at some quick and basic techniques you can use to try and understand what is going on with the network.

a network card for network troubleshooting

This was state of the art not too long ago. A whopping 2.5 Mbps! Credit

Linux: Your best friend/worst enemy

I have found that linux (or some other unix environment) is the best tool with which to do network troubleshooting. It has very powerful tools with installed by default, or they are only a quick “apt-get install” away. Windows does have good tools also, but it seemed to me that linux had the edge for many years. At any rate, I recommend using linux for anything development related.

One thing to be aware of: while the linux tools are powerful, the documentation around them can be a little bit… difficult. This is partly because the tools are being written and used by experts, and partly because its difficult to make some of these topics accessible in a quick manner.

Let’s dive in!

Continue reading

Essential desktop Linux productivity hack

Need a productivity hack? As a back end python programmer, I find that using Linux as my desktop makes my job easier: my development environment is very close to the deployment environment. Working on laptop can impose some limitations, but I have discovered some productivity hacks that make me very happy and very productive!

Productivity Hack #1: Tiling windows

Tiling your desk top windows means arranging them so that they don’t overlap. For example, here’s a screenshot of my editor and a terminal side-by-side:

productivity hack: emacs and terminal side by side

A favorite productivity hack: a terminal and emacs side-by-side

There are window managers that will do this automatically for you, but in this article I’m going to talk about some built-in keyboard shortcuts that will let you do almost the same thing. Let’s dive into how Ubuntu does this!

Continue reading

The ultimate python comprehensions guide

I came across this AMAZING guide on comprehensions in python the other day. Seriously, you should go check it out because it is great. It is Star Wars themed which makes it that much more awesome.

comprehensions are like card tricks

By ShahanB – who took the photo in 2012, CC BY-SA 3.0,

Comprehensions are one of my favorite things about python. They are so useful for making lists (and other things) in a very small amount of code. There is so much you can do with them, especially when combined with some of the other “power tools” that python as, especially the functools.

Having said that there are some downsides that should be taken into consideration. For example, there’s always the temptation to use our newest shiniest tools where ever we can. And with comprehensions that can lead to one of the biggest problems: nested comprehensions.

Comprehensions can backfire?

Continue reading

Working with branches and a requirements.txt

Recently I had an interesting situation: We had some new code, lets call it project A, that had not been merged into master, but it needed to used by another project (project B) to see if a certain bug had been fixed.

These projects are both python based, so they are using the normal tools. (pip and, etc.) Project B pip installs Project A, and in the requirements.txt it is listed like a normal git repository dependency.

But, we want test a different branch of Project A. Simply promoting the branch to master is not ideal; if there is a problem with the branch potentially all projects that depend on Project A could be affected. And lets be honest, what are the odds they will be “positively” affected? In my experience, its zero.

Can we install a pip branch?

So ideally we need to get Project B to load in that specific branch. The first thought we had was to modify the version of Project B that had been installed in the virtualenv for Project A. This could get… messy. Instead of manually changing files (or trying to cherry pick file from a git repo) we can just use pip to get that branch. But how do you get a pip branch?

Continue reading

Does Python packaging have a left-pad problem?

Is Python packaging a tower of babel?

Is Python packaging a tower of babel?

Recently an interesting problem happened. A small but critical piece of code was removed from the internet and in the process brought down many major JavaScript projects. This was quickly fixed and in the process many jokes were made at the expense of the JavaScript ecosystem. But to me it raised an important question: Could this happen with Python packaging?

How did this happen, and what is code reuse?

Continue reading

A big list of Flask resources

Flask web framework logo, flask resources

The Flask web framework, the best python web framework

Over the last year I have spent a lot of time with Flask which is a python web framework. It is commonly referred to as a micro-framework because it tends to be lightweight and make use of plugins (as opposed to having everything built in like Django).

These plugins are what makes Flask great, there is a great variety of common programming tasks that can be accomplished using these plugins. This helps you the programmer because now you don’t have to reinvent the wheel. Without these flask resources you would wind up recreating a lot of code.

So here are the Flask plugins and tools that I have found really helpful while  developing websites for my clients.

Continue reading

Teaching what you know

Aristotle on the vitures of teaching

Yet another thing Aristotle was right about.

Teaching. The best way to truly know something is to teach it to someone else.

I’ve heard this over the years, and I can testify that’s there’s a lot of truth to it. I have found that when I do a presentation or attempt to teach something that I am not very familiar with, my presentation suffers.

Me a teacher? I don’t know anything!

At it’s core teaching the transfer of knowledge between people. The best move for a teacher is to learn more about that topic then your students do.

This does not mean you have to become an expert, rather, you just need to know a little more than the people you are teaching. In fact, you can use this to your advantage: Find a spot in the topic (say Python Flask) and study it.

Continue reading