PIT Score

Starting a new project and not finishing it can be quite a discouraging experience. If it ends up becoming something you tend to do often, you lose the motivation to pursue new ideas and that can be bad.

How many times have you started a project and felt like you should’ve picked another one? What if you have a technique to figure out which idea/project to pick next? You should pick the one that you’re more inclined towards. But, how do you get clarity around this inclination?

It’s extremely important to have clarity on why you want to work on a project, how interested you are, and which technology you want to use. I’ve come up with a technique that I use myself for getting this clarity. It’s simple really.

PIT Score

PIT stands for Purpose Interest Technology. I consider these three as the key factors that provide clarity on which idea to pick next. I’ve tried this technique with a few ideas/projects now and I’m pleased to inform you that it has worked really well.

Who is it for?

  1. Do you enjoy working on side projects in your spare time?
  2. Do you have a lot of ideas that you want to work on, but never get around to?
  3. Do you have trouble prioritizing your ideas?

If you’ve answered “Yes” to the above questions, this technique is for you. Although, it is not entirely just for people that fall in to this category.

How does it work?

The technique itself is fairly straight forward. You assign a certain inclination value for each of the key factors, for each of your ideas and calculate the PIT score of each idea and sort them by the score. Here’s how it is done.

I’ll be using the following list of ideas to explain and demonstrate the technique:

  1. Learn Machine learning
  2. Build a web UI for a CLI tool
  3. Write a fun new game

Step 0: Define inclination values for each factor and assign scores

Each of the key factors i.e. Purpose, Interest, and Technology, need a pre-defined set of values that denote your inclination towards the corresponding idea.

Even though you can update these later, it will be rare.

For Purpose, your inclination values could be:

  • Personal use
  • Learning new technology
  • Help solve a problem for others

For Interest, your inclination values could be:

  • Very interested
  • Interested
  • May be with some external motivation

For Technology, your inclination values could be:

  • Very familiar
  • Sort-of familiar
  • Unfamiliar

These are some examples that I’ve come up with. They can be customized and changed per your needs.

Assign a score to each of these inclination values. You need to be careful with assigning scores since they make or break this technique. You can set up a scale for yourself and assign a score from that scale. In the current example, I’ve used a scale from 1 to 10.

Some example scores are –

Purpose:

NameScore
Personal use10
Acquire new skill5
Help solve a problem for others1

Interest:

NameScore
Very interested10
Interested7
May be with some external motivation2

Technology:

NameScore
Very familiar9
Sort-of familiar6
Unfamiliar2

These are just values that I’ve come up with. These are extremely subjective. So, you’d have to define these values appropriately, according to you. For instance, the scores you’d assign to “Unfamiliar” technology or “Acquire new skill” purpose, might be completely different from the scores I’d assign myself. As you’ll see, these scores play a crucial role in computing the PIT score.

Step 1: Apply PIT values to your ideas

For each of your idea, populate the Purpose inclination, Interest inclination, and Technology inclination values.

IdeaPurposeInterestTechnology
Learn Machine learningAcquire new skillInterestedSort-of familiar
Build a web UI for a CLI toolHelp solve a problem for othersVery interestedUnfamiliar
Write a fun new gamePersonal useInterestedVery familiar

Step 2: Calculate

This is by far the easiest part. You substitute the scores for each of the values and calculate the PIT score of each of your ideas using the following formula:

PITscore = Pscore + Iscore + Tscore

Here’s how the table would look like –

IdeaP scoreI scoreT scorePIT score
Learn Machine learning57618
Build a web UI for a CLI tool110213
Write a fun new game107926

Step 3: Sort

Sort the ideas by the PIT score in descending order. Voila! Your projects are now sorted by a score that provides clarity on which idea you’re most likely to finish once you start. This is due to the inclination you have towards the project or the idea.

IdeaP scoreI scoreT scorePIT score
Write a fun new game107926
Learn Machine learning57618
Build a web UI for a CLI tool110213

This sorted list provides clarity around the friction you’d face in order to start a project.

Higher the PIT score, lower the friction.

As you have probably noticed, even though the interest level is “Very interested” for the project “Build a web UI for a CLI tool”, the PIT score ended up being pretty low. This is due to the fact that the technology is “Unfamiliar” and the purpose is “Help solve a problem for others”, the scores of which are pretty low in the given example. Just by looking at the original list and assuming that you would want to start with that project would’ve been a mistake. On the other hand, “Write a fun new game” has the highest PIT score, even though the interest level is only “Interested”.

A spreadsheet can be a convenient option to maintain this list and the scores. Bonus, use spreadsheet functions to automate the calculation and sorting process. This is what I currently do. Building a simple web page to handle this would be really easy, but, it had a very low PIT score 😉 and so I avoided it.

Important

In order for this technique to work, you need to be careful while picking the scores for the inclination values.

Extensibility

You can extend this technique to add more factors to your ideas, finer-grained inclination values, and better scoring.

Applying this technique to my personal list of projects surfaced a lot more information about my projects. I was happy with the outcome.

Magic Compiler

Innovation in today’s technology is mostly around Artificial Intelligence (AI) and its sub topics such as Machine Learning (ML) and Natural Language Processing (NLP). There is a primary focus on NLP and ML among all the tech companies. This is for a good reason. Tech companies are using NLP and ML in various aspects of their offerings and trying to stay ahead of their respective competitors.

A Magic Compiler

With all of this going on, I feel like NLP & ML will greatly impact the future of programming and programming languages. It could be possible to create a programming language out of pure English (or any language for that matter) grammar. Alright, stay with me here for a second; the way it could work is:

  • The programmer would write what they want to achieve in EnglishStore user data such as name, age, sex, address and favorites in the database and create an endpoint that exposes this data securely
  • Using NLP, the compiler parses this information and creates or uses the existing User class and stores the user attributes such as name, age, sex, address and favorites
  • The compiler keeps correcting itself over the extended usage of the programming language using ML. The compiler figures out the datatype of the attribute. For ex: name is a String. age is an Integer. Since the attribute is named favorites, it figures that it’s a collection of Strings. Since the programmer instructed the compiler to expose an endpoint with the data securely, we get an https endpoint to access the resource.

The programmer can then do something like –
Every user has many photos. Store those photos in Amazon's S3 (maybe) bucket

A programming language like this could become a reality. Of course, this is a massive over-simplification of things, but, it could be possible. I mean, if human beings are capable of making computers perform intellectual tasks, this could totally be possible.

This can also be taken one step further and use speech to text conversion. Programmers can then just speak what they want to build and have the compiler write the code for them.

The advantage to creating something like this is extensibility. Imagine if every person who can speak a language can write code? Any person that can read/write a language, ends up being able to write plugins/extensions/modules in their language and contribute. There’s a lot of smart people out there and this programming model extends their creativity. Right now, it’s just a missed opportunity. It would be amazing to see what people do with their “newly acquired” skill.

Domain-specific languages (DSL)

Today, one can do something remotely similar by using Domain-specific languages (DSLs). But, DSLs are very restricted and don’t offer much in terms of flexibility in their usage. Hence, a proper implementation to support the above mentioned features would be required.

This would be a very interesting project to work on. I will continue research around this subject and see if I can come up with a trivial implementation of this.