How I make decisions

Quick Disclaimer, this post is solely my personal process that I’ve used to determine and explain what my goals are. I only want you to have goals that work for you. It doesn’t matter what I think.

“Dreams are the touchstones of our characters,” –Thoreau

Decision Making Principles

How rigorously do you make decisions?

There are many ways in which people make decisions. It seems to me that more often than not the reasons for decision making are born out of short term considerations that are not sustainable. This phenomenon is so disturbingly widespread that there is now an entire cult of personality around the ‘mid-life crisis’.

With each of these decisions comes a set of “debt” with respect to your true values. Kind of like when you throw your laundry on the floor at night because you’re too lazy to fold it, eventually there’s laundry everywhere.

After a series of these poorly considered decisions, this “debt” reaches levels that overcome the amount of time you have left to actually pay back the debt to achieve whatever success you want in life. In other words, a mid-life crisis is a bankruptcy of commitment to your own values.

First, let’s start with a few axioms and make some fundamental assumptions based on them.

Everyone has values of some kind.

I believe this to be the case even if not explicitly stated or understood. This is because they make decisions, whatever they are.

This is mostly because there must be decisions that are made in order to avoid the true path of least resistance, death. In principle, our framing does mean it’s possible to live a de-facto value-less, decision-less life.

Everyone has things that they desire.

In my experience people either don’t have what they want, or they don’t know what they want.

If you are truly content with everything you have in your life right now, you have no need for this blog post.

Given our assumptions, that people have values and desires it follows naturally that you will have goals that manifest your desires that’s in line with your values. When it comes to making decisions, each of those decisions should then be in furtherance of your goals. What do I mean by that? Well, we can be somewhat analytical about it.

Imagine some attributes that you think could describe a person in general terms. For example, let’s say some things like wisdom, kindness, patience, physical strength, being fun, etc.

If you imagine each of these things on a multi-dimensional plane each person as a point falls somewhere in that grid, whoever they are (and any point you could ever want to reach exists here too). Maybe they’re exceedingly kind and they’re not so patient, or vice versa.

Let’s say that you want to be much smarter, or be much more fun, whatever that person looks like, is also a point on this coordinate plane.

Let’s visualize it for a moment then.

If you’re anything like me, this graph resembles you, and will always resemble you. You have a person you want to be, and there’s always a new goal on the horizon that’s in line with your values.

The nice thing about this graph is that you determine the axes. Let’s say that the red dot is who you are now, and that yellow dot up there is who you wish to be.

That yellow dot, the point that you wish to reach, is the north star. Once you know where the north star is, then you should orient all of your decisions around reducing the euclidean distance between you and that point. It’s easier than you think!

Building Analytically Verifiable and Interesting Goals

Determining what your goals are is going to be one of the hardest things you ever do.

Computer Scientists would consider this problem NP-Hard. It takes an unknown amount of time to come up with an answer, and we don’t know how to evaluate an answer even if we had one. Making matters worse, we also can only ever run the experiment once.

Unfortunately, any goal worth reaching requires a serious commitment over a long stretch of time, and while there are many opportunities to change course, the opportunities to reflect on such a decision are rarely taken, resulting in wasted time.

While I certainly can’t tell you what goals you should pick, I will say that there are certain goals that are going to be more effective for you than others. Your goals should reflect an accurate understanding of the reality in which you live, and their purpose is to be realistic, exciting and achievable within a specified time frame.

Committing yourself to learn a new skill by the end of the year or do something special for your wife is a more useful goal than trying to change the minimum wage or change the standard for accredited investors.

I don’t know anyone who’s worked on bettering themselves who has a worse life now than what they started with. However, I know a lot of people who have worked on bettering society who have a worse life now than what they started with.

Now when it comes to how you’ll better yourself and structure the goals mechanically; I think the OKR method is a good method.

An OKR is just an objective that is inspiring, and has a time limit.

Objective: “We’re going to put a man on the moon by the end of the decade”.

Great, now let’s define some key results:

  • KR 1: Run 30 tests of our mission control software
  • KR 2: Reach a test-flight distance of 300, 000 miles (to demonstrate we can make it to the moon)

What you can do today

Pick a set of goals. Write a document outlining the details of what you will improve and what goals you will seek this year. Refer to that document every two weeks and grade yourself honestly.

If you accomplish everything by the end of the year, you’re probably not being ambitious enough. If you get around 70-80% you’re doing great.

Just remember; as with all things in life there is a tyranny of the quantifiable; that which we can measure always takes precedence over what we can’t.

Even if you don’t accomplish all of your goals exactly as you set them, that doesn’t always mean you were not successful. Only you can tell if you’re still on track with your own mission in life. As with all matters of the heart, you know it when you see it.

If you set your goals right, you can be incredibly successful; but at the same time, there’s no pressure as it’s just a piece of paper that you can change as you grow.

Find your north star and follow it always, and with the quest will come a lifetime of joy.

P.S. I have a serious interest in scalable software solutions to maintaining abstract quantifiable goals as well as tools that enable people to scale the number of social relationships they have and track meaningful events related to them such as birthdays, holidays, and especially kids birthday parties.

If you know of such tools, please do share them with me.

The Grid was generated with the CPM 3D Plotter


I’ve finally completed my Master’s in computer science.

If you’ve never heard of the OMSCS, it’s Georgia Insitute of Technology’s Online Master’s program done in collaboration with AT&T. It’s exactly the same degree as the on-campus Master’s. You can find more information about the program here

There’s been a trend of students sharing their perspectives about what it was like doing a master’s online. Here are some of the courses I took and the direction I went in for my degree.


I completed the computing systems specialization, which required a total of 10 courses for the degree.

  • Intro to Information Security
  • Network Security
  • Software Development Process
  • Graduate Introduction to Operating Systems
  • Advanced Operating Systems
  • Machine Learning for Trading
  • Educational Technology
  • Cyber Physical Systems
  • Intro to Health Informatics
  • Graduate Algorithms

I had to implement MapReduce in C++ basically from scratch, memory buffer and socket management in C, learn about cognitive neuroscience to build usable react apps for my research, PLC Programming, virtual machine monitoring, virus detection, java decompilers -the list goes on. It was a difficult and rigorous experience and required a lot of special things in the program to be going well in order for students to succeed.

There’s a few specific principles I think are crucial for this kind of education to work generally. I’ll first define them broadly.

  • Materials
  • Community
  • Time Investment


The materials in this program vary in quality from course to course. Certain courses have much higher quality materials than others.

There is a student tool created called OMSCentral that gathered informal reviews from students anonymously that has been crucial for the program as well.

It was just so clear how to find out which courses were worth doing and which were not.

I found more value on average in courses that had more project work than less.


Community is what separates a course from a solitary positive experience to a community with shared purpose in pursuit of a common goal. It can be incredibly rewarding and positive for students to have the ability to share their experiences in the program with peers as they work through the projects.

Other online institutions should take note that is is this very thing that makes this program work at all. In the case of OMSCS, the facilitator of community is without a doubt our slack community. It’s enabled a completely different and so much more engaging way to experience online education than anything I’ve experienced with Coursera, Codecademy, or even Udacity.

It’s entirely student controlled, and though there are TA’s and Instructors on it, the students drive the conversation in all kinds of different directions. The amazing thingis that so many students are from so many different areas of industry and the world. My group in IHI consisted of myself from New Jersey, and three colleagues from Tunisia, Kanya, and Australia (a timezone nightmare for scheduling team meetings).

Time investment

The biggest thing about this program, and perhaps these kinds of programs in general is that they take a LOT of time.

Each course has it’s own structure and projects that are all different from each other and require a lot of time to follow along with changes on Piazza and keep up with emails to make sure you understand and have accurately mapped out what is due when.

I fortunately only had to pull one all-nighter throughout the program as I had two different assignments for two different classes due at the same time.

Final Thoughts

This is a challenging and rewarding program, there are some difficult classes that really do help you grow in your knowledge. The ones I recommend the most are Intro to Information Security, Educational Technology, Intro to Operating Systems, Advanced Operating Systems, and Graduate Algorithms. Looking back, I’m thankful for the opportunity to have paid my way through school and come out on the other side ready for something new. I also owe a special thanks to my family and friends who have supported me along the way.

After ranting about a project in one of our group chats, my friends changed my display nickname to “gradstudent.exe has crashed” and I didn’t realize for two months.

At the end of the day; being a good engineer requires integrity and decication, two things Georgia Tech has in spades.

This program has made me a hell of an engineer.

Shell tools are incredibly useful

So this is a small post on something pretty cool I was able to do that I thought was worth sharing.

This summer I’ll be doing research on speedreading as well as taking a course for school called Cyber Physical Systems.

I got interested in the question of whether I’d be able to speedread the course materials. So I downloaded the transcripts and took a look.

The transcripts all come in the form of .srt files which are a little inconvenient to work with, and there was a LOT of them, 302 to be specific.

$ ls -la ./transcripts/*
-rw-------  1.2K 89 - Intro to Industrial Networks -
-rw-------  2.8K 9 - Class Structure -
-rw-------  3.0K 90 - Industrial Control System -
-rw-------  2.1K 91 - Industrial Protocols -
-rw-------  3.8K 92 - Routable Networks -
-rw-------  2.8K 93 - Enterprise or Business Network -
-rw-------  1.8K 94 - Zones and Enclaves -
$ cat ./transcripts/* | wc -l

# here's a random file in the corpus for an example of what we're dealing with.
$ cat 93\ -\ Enterprise\ or\ Business\ Network\ -\
00:00:00,360 --> 00:00:03,340
An ICS is really an isolated network.

00:00:03,340 --> 00:00:08,270
For every factory floor, electric
generator, petroleum refinery or

00:00:08,270 --> 00:00:11,450
pipeline, theres a corporation or
organization that owns and

00:00:11,450 --> 00:00:12,850
operates the facility.

. . .

So as you can see there’s a lot of space being wasted and a lot of cleaning we can do here.

# let's concat all the transcript files in numerical order into one file
for i in {1..302}; do cat $i\ * >> OUTPUT; done

# then I'll use vim to open the massive file and start carving it up
$ vim OUTPUT

# delete all empty lines

# delete all lines containing only numbers

# remove all lines with timestamps

# removed all <i> tags and removed all </i> tags

These steps together trimmed over 12000 lines of needless text.

I then converted from windows to unix line endings :

tr -d '\15\32' < windows.txt > unix.txt

To remove the &gt;s I highlighted the entire corpus and just cleared them out.

:s/&gt; //g

Text all looks like this :

And we earnestly
hope that it will

prepare you to secure
the next generation

of cyber-physical systems.

We're eager to hear what
you end up doing next.

The fate of the world
is in your hands.

To clean this up a bit I replaced all \n\n with a single \n.

Now it looks something like this :

the low voltage looks like. We can add to the lower terminal power a
little power supply to the low or common terminal, connected the high terminal of
the power supply to the input switches. That's all it took to
simulate our system.
So now we know how
the system was set up. So how's the PLC actually programmed? For this project, we programmed the PLC using which is
a graphical programming language that is based on the old practice of
programming logic with hardware relays. The programming environment that we
. . .

It’s not perfect but very usable for my purposes, as I wanted the filtered raw text to put into another platform.

There were a few other cleanups like removing [INAUDIBLE] from the corpus.

My original input size of 38744 lines was down to just 7000 lines.

That’s just 18% of text content that actually needed to be there!! Fun stuff.

The lesson here? Learn the shell tools. They are so great and will come in handy all the time.

Now it remains to be seen whether I can speedread the entire course in an hour. Wish me luck!