Wednesday, November 14, 2018

We Are Our Habits

We are our habits. Per James Clear our habits are a vote for who we are. Each time we do something we are reinforcing an ideal of ourselves.

James even mentioned that if identify with being someone who is fit, if one day we really failed to prioritize a workout, it would be worthwhile to do just 5 push-ups. Not because this would be enough to make us physically stronger. But because it would reinforce the habit of who we are. We are voting ourselves into the office of fitness.

A good side effect of this strategy is that because starting is the hardest part, once we get started we will probably end of continuing. Those 5 push-ups could lead to an entire sweaty workout.

Monday, November 12, 2018

Perfect Code is the Enemy of Code

I'm trying to add a feature for CustomJournal prompts that auto expand and de-expand. This would come in handy when I do my daily review of 3 amazing things that happened today. I'll come up with 4 or 5 things and then just add them all in on the 3rd line. But it would be nice if a new line could be created instead.

So I'm trying to figure out how to write the code and I'm stuck because I have multiple ideas pulling me each way. I could get the feature done easily but the solution would be quite messy (because my previous architecture did not account for this) or I could do a whole bunch of cleanup and refactoring.

Which led me to think about the tradeoff of FaceBook's famous move fast and break things/Done is better than perfect motto. The idea is that speed and shipping is a feature too and if you take too long to ship you are depriving the customer of using that feature (even while not perfect) and also depriving yourself of getting valuable feedback.

As FaceBook grew, of course, they realized that they could no longer break as many things and move as fast. User's would complain and they had much more to risk than they had to gain. Thus the value of perfect (or near perfect) became more valuable than the value of getting a feature out faster.

I of course have an app that a small amount of user's love (but not many total users: ~150 monthly active to date). Its also making me about a sale a week which is pretty negligible (doesn't impact my life at all) for me.

So move fast and (but hopefully not) break things it is. Refactor when I need to

Sunday, November 11, 2018

Malaysia Restaurants are not Thread Safe

One of my favorite software related posts is Starbucks Does Not Use Two-Phase Commit. Its amazing because it boils down a technical topic into real world terms. Its much more easy for us to grasp when we see it in some form that we can relate to (we all are familiar with Starbucks). And just seeing it in a different form helps our understanding.

I noticed one so far over my trip in Malaysia. I'll sit down in a restaurant and a server will take my drink order. After that server has left, another one might notice that I have no drink and ask for my order. I simply tell them that I have already ordered and they go on their way.

This system is much different than what you get in almost every restaurant in the United States. In the US the waiters synchronize between themselves. Usually one is assigned per table. In Malaysia, its anything goes. If there is a person that looks like they haven't ordered yet. Then take their order.

If you think about this in terms of worker threads. In the US the waiters keep the state and coordinate between each other (using various other protocols) but in Malaysia they rely on the customer to keep state and filter out duplicate requests.

The downside to this is that my experience is a negligibly worse as I get redundant requests and have to explain that I already ordered. However, there are some good benefits to this as well.

1) Its more efficient and faster. I get my order in from the waiter that notices first.

2) Its simple for the waiters. They really don't have to communicate with each other


I only noticed this because I very infrequently have seen it back at home but now it seems to happen to me all the time. There's nothing wrong with this strategy for me as I'm not annoyed with the second request. I just think its interesting how regional this system design seems to be.


Friday, November 9, 2018

These Cities are Built for Cars


I love exploring a city by foot. It's an excellent way to experience a city. But particularly in Penang and Malacca, I noticed something interesting: I'm the only one doing it. For example, in Malacca I took a walk from Jonker street to the Melaka Straights Mosque. It was less than an hour each way which is a not bad at all; an excellent way to get a sense of the city. But once I got off the main tourist area I really didn't see any other tourists the entire way.

What I did see were a bunch of buses, big and small dropping off the tourists.I think there's 2 main reasons for this.

The first is that there is a general culture of not walking. Many of the tourists are Chinese. I remember I was hiking in ZhangJiaJie which is the beautiful national park where Avatar was based off of. There were millions of Chinese tourists in that park that it felt like a single file line through the park. However, once I got to the more strenuous climbs, there were only foreigners like myself. It was comical to me to see that all the foreigners had chose to do this medium difficulty hike where the sea of Chinese tourists had passed (and the reward at the end was amazing)

Which leads to the second: these cities are made for cars, not people walking. I was having a discussion with friends (some local) in Penang and were talking about how terrible the traffic was and how hard it was to walk in the city. In Penang in many places there is no sidewalk. You just walk on the side of the street and hope a car doesn't clip you. There are so many cars, sometimes crossing the street gets tricky: And as there become more and more cars on the road it becomes harder to invest in public transporation and non-car infrastructure. "The Malaysian government doesn't want to invest in these things, they just want to sell more cars!". "It's ok"  I reply "This isn't a problem just in developing countries, even back at home in the San Francisco Bay Area we have the same problem." The infrastructure worked when there weren't as many cars are on the road. But now that there are a magnitude more cars on the road than what was originally planned for, we end up with severe traffic jams every day and not a good way to change things.


These 2 feed each other as well. If walking and biking is not an option at all then we lean towards cars, which leads to a car culture, which leads to more cars and more developing the city towards cars (more lanes, more parking lots).

Its sad for me because walking such a fun and healthy (and environmentally friendly) way to see the city. But as I suck in more fumes from from buses passing by, I might have to give it up.

Understanding Your Customers (Lottery Edition)

A billion dollar lottery recently happened and there was a lot of talk about buying lottery tickets. What would you do if you win?

But I want to point on one specific argument that I heard regarding buying lottery tickets. It comes from the guy who thinks he is a bit more clever then the rest. They might say something like "The lottery is a tax on people who are bad at math" or "Playing the lottery is for suckers because it is -EV (expected value)".

If you don't like math, just skip this paragraph. Its not absolutely necessary you understand this to get the picture. Let me explain first what the person is trying to point out. EV stand for expected value and it is the amount of gain or loss you are expected based on real probabilities. So for example if you and your friend flipped quarters, and the loser paid the winner money after each flip, then your expected value would be 0. Since we know that the probability of a coin flip landing heads or tails is 50%. Then you could expect to win half the time and lose half the time. You would be expected to net out. Note that although your EV is 0, what actually happens may be drastically different than the expected value. Your friend may win 5 coin-flips in a row and take all your money. However, based on the law of large numbers, the more you play, the more likely the results will be close to the EV.



The true expected value of the lottery is actually tricky because it depends on the number of people playing and factoring in taxes. There are cases where the lottery can actually be +EV (but due to game theory this usually doesn't last for long). So in general, your friend is correct in saying that it is a losing proposition to buy lottery tickets. For each dollar you put in you are expected to get much less back.

And we could leave it there. But that's not the point. What that person is really missing is the reason why people by lottery tickets. And it isn't to make money. That's right, most people do not buy lottery tickets to make money. If you asked them about their odds of winning or at least if they believe they will make money, I'd think that nearly all of them would understand that they will likely lose money. So why do they buy? They are buying the experience of owning a lottery ticket. To be in the game. To dream and talk to their friends about all the things they will do and buy and how their life will change. They are happy to be in the game rather than be left out. There are a so many reasons for buying a lottery ticket, "making money" is probably one of the least common reasons.

And I'm certain The Lottery (the company) understands this well as their commercials are perfectly aligned. They show a couple frolicking in their newly bought mansion next to the beach and ask "What would you do if you won?"

Another lesson in understanding why customers buy a product and those who say "People are stupid, playing the lottery is -EV" just don't get it. 






Wednesday, November 7, 2018

Opportunity Cost

I'm writing this right before catching my bus from Ipoh to Malacca. I have 30 minutes so I will spend 30 minutes. If I had more time I'd probably waste it. So this is perfect. Just enough time to quickly touch on the concept of opportunity cost.

When I was quitting my job. I was explaining to my friend about how, even though I had cut down my expenses drastically, it was really expensive for me. The reason is that quitting your job has another cost associated to it which is opportunity cost: the cost of the salary that you aren't receiving anymore. So I was giving up quite a good amount of money to pursue something else.

However, it wasn't until much later after that conversation that I realized opportunity cost cuts both ways. If I was still at my job working, I'd be thinking about the opportunity cost I was giving up (my time as I was getting older, the different experience) by continuing to stay at my job. There is cost of missed opportunity to everything we do.

There's definitely a grass is always greener mentality to this as well. We fall into the trap of thinking that the other opportunity is better than the one we are in.

And there's one last observation that I want to point out. Its easy for use to be trapped by the opportunity cost. For example, if you were to only think about maximizing money, and if you were making a fairly good salary like I was at my engineering job, then if you wanted to maximize it then the rational decision would be to work in that job for as long as possible. And this is the decision that traps many of us. As we get paid ever more and rise in the ranks, we find the decision to change harder and harder. There is so much sunk cost it would be crazy to give that up, even if we notice that our path might not be the right one. "Oh well, we are already this far and it isn't that bad, might as well keep going"
Its easy to hold on to that idea of maximizing profit and we end up with a life that we are unhappy with.

The Green Shark

I was sitting on a plane once and two kids were playing on the seats next to me. One of them, couldn't be more than 5, was being pestered by his older brother. The younger kid had a little plush blue shark that he was quite fond of. The older brother kept calling the shark green on purpose which the little one would cry out "No its not! Its blue!!" in an annoyed tone. But the brother kept on insisting it was green, trolling the younger kid.

After hearing her younger son scream "no its blue!" angrily a couple times the mother got annoyed and asked the child. "What color is the shark?"

"It's blue" replied the child.

"Ok you know the shark is blue, stop worrying about what your brother thinks" she instructed.

It was comical to witness the entire scene and particularly the behavior of the young child. Why did it matter to him what color his brother thought the shark was? Why did he get so angry and annoyed about it (being teased in itself)?

Some thoughts:

1) The child doesn't know how to deal with a trolling situation, he understands he is getting teased, and gets angry about it

2) "Someone on the internet is wrong!" syndrome. Some people can't let it go and need to make sure the person who is seeing things differently changes their mind or at least understands. The child is angry that his brother is wrong

3)  Maybe its the fact that it is his brother and not some random person on the internet. Maybe the brother is respected by the younger brother and part of his tribe. Thus it is important that someone so close to him understands and sees things the same.


It was an interesting situation and the more I think about it, the more I lean towards 1 as it is the simplest (Occam's Razor!).

Do we have our own green sharks?

Could there be some takeaway from this situation? Maybe we all have experienced our own green sharks: when someone tells us something is different then what we clearly see.

I think the mom's advice is good in most situations: ignore it. Let them have their opinion and move on.

but... what if they are wrong? Which is why it is so situational dependent because in some cases it is the responsible thing to inform and educate. Dialog is good for both parties, but when it crosses that, let them have their opinion. Don't forget.. what if it is YOU who is wrong?

As our communities grow and opinions spread, our goal should not be to convince everyone to see things the way we, or our tribe, sees things. Instead it is more important that we learn to co-exist with the with other's opinions.








Monday, November 5, 2018

Blogging is Not for Other People

I was listening to Seth Godin on the 1% better podcast and although Seth is not big on giving specific tactics (like what his morning ritual is or what his habits are). He did relent and give what he thinks is the single most valuable, actional thing someone can do to improve themselves: blog every day for 1 month. Every day, make a prediction or give some advice. That way, you will notice things in the world and make better predictions and give better advice over time. When facing the argument "the world doesn't need the another blog", he brilliantly agreed and pointed out that the blog is not for other people. It doesn't matter if you share it with anyone. It doesn't matter if you use a pseudonym. "The world doesn't need more people to run the Boston marathon. But you should run anyhow".

My advice for today is passing on the one from Seth: blog everyday. Not because you will get rich or famous. Not because anyone will actually read your blog. But, similar to running, because it will have a profound impact on yourself.

Training our Minds

We go to the gym to train our bodies. We sign up for CrossFit or do Yoga at the gym. Regular practice keeps our bodies in tip top shape. But what do we do for our minds?

In this information age our attention is bombarded with more signals and information than ever. It's only going to increase. We are mentally strained when we come home from work. Then we go on Facebook, or watch TV, or do a million other things on the internet, each soaking up another drop of our attention.


I'd argue in the future, that training our minds will be just as important as training our bodies. It won't be uncommon for people to sign up for mental "gyms" as it isn't uncommon for people to sign up for gym membership.



What are some of the things we can do to train our mind?

The first step is to disconnect. Anything that gives us a break from the information stream. That means turning off our devices and making sure we silence those buzzes and beeps. It might mean getting away from the noise, like going on a hike in nature or just staying home and sitting in silence. Mediation has become a big one. So many well accomplished people have attributed their success to their daily meditation habits.


Then there's training our thoughts. This means thinking about the things that we want to be thinking about. It might be practicing affirmations, reflection on past events, reviewing your goals and commitments. Maybe stoicism appeals to you and you practice worst case scenarios so that you are prepared for anything. Practicing gratitude, being grateful for what we do have vs what we do not, is a great way to stay positive and happy.

There are many ways we can train our bodies and it is similar for the mind. Choose whatever appeals to you, just know that it is just as important. If you looked at your body and saw some unappealing curves or if you lacked energy, you would probably go to the gym. The same should be true for the mind. If you feel a lack of energy (there is a lot of synergy between mind and body) or you feel overwhelmed, or you see yourself unable to focus and easily distracted, then join a local "mental gym" near you!

*shameless plug: I am the creator of CustomJournal which is an Android journal that allows you to tailor your mental workout. You can use it for gratitude, goal planning, review, and more.

Saturday, November 3, 2018

You are the Average

Everything is contagious. As human beings, we naturally draw our worldviews from around us. We become the average of the 5 people we are around the most. If they are fat, we will be. If they are rich, we will be. If they are sad, we will be too. The opposite is true as well.

In order for us to change our state, we can focus on changing ourselves or our environment. If we just focus on ourselves, we need to take into consideration this rule of averages. If all 5 people (for whatever metric you chose) are below you. Then they could be pulling you down and you would be fighting significant resistance. Its possible that you are strong enough to pull them up, but more likely than not you will be unable to overcome the resistance.

Instead if you find the group of people you aspire to be like, they would pull you up to their level. Its more likely you get pulled up to them vs the opposite because you want to be there.


The real world is much more messy than this. I'm not saying to find new friends but I am saying to think about how the people around you are affecting you and which way the gravitational forces are pulling. Who in your group is the stubborn one, unwilling to change their ways, having a negative impact on the rest? Who is the high achiever spreading positivity and encouraging others? Who outside your group, who is someone or has something you want, might you want to spend more time with?

Assume Failure

We all make mistakes. It happens to the best of us. We break our diet and eat a bunch of sweets until we feel sick. Or we set a resolution to write everyday but our calendar says we haven't written in our blog in a month. 

If we assume that we are not perfect and build imperfection into the model itself, we would do better.

So if I plan on going on a diet I should assume that I will have times where I will be peer pressured into enjoying deserts out with friends or have a late night pizza craving once in a while. That means my rules should allow cheat days. Or, maybe the real metric I should be tracking is how many days it takes me to get back on track after a miss.

That might be the most important thing. Psychologically, one day of breaking the diet might make us feel like we failed. We are incapable of staying on the diet. That might cause us to give up. But challenging ourselves to correct course after veering off keeps us in the game.

In my days of software development, almost every engineer will write code where the main way of using the feature will work. We call this the happy path. However, the excellent engineers are the ones who are able to see and plan for the failure cases ahead of time: "System A is supposed to get data from system B. But what should the user expect to see if system B unexpectedly goes down?"

When setting up a goal. The same thing should apply. Don't just think about the happy case. But consider what you plan to do when things don't go right.

Wednesday, October 31, 2018

Having More Time May Not Be the Answer

There's a new drug that doubles the life of worms. There is potential that it might one day be used to prevent aging in humans. Amazing. We would double the amount of things we could accomplish right?

Probably not. I have to think though that this might not change things for the average human.

Let me give an example. The retirement age today is 65. Why is it 65? Well it's really just made up. What happens if we double a humans lifespan (let's say average is 80 and now it's 160 years). Will we still retire at 65 and then have so much extra time to enjoy our retirement? Probably not because we won't feel like we have the money to do so.

So we would probably push retirement to 130 years. My guess is that we live longer, but probably wouldn't live differently than we do now. Also since we have more time to do things, most people would value their time less. We have plenty of time to get to it we'd tell ourselves that middle period where we work probably just expands to fill the gap.
 
Retirement is just one example. But think of that book you want to write, or the language you want to learn, or that trip you want to take across the world. Is it living in "someday"? If it is it probably still will be regardless of how much time is given.

Things expand to fill the gap. If we give ourselves X time to accomplish something we will probably take that long.




But there would be a group of people whose lives this would significantly change. Its likely that those people are the ones who are doing things now, the ones who are not filling the gap waiting, but rather acting boldly.

Tuesday, October 23, 2018

Release an Embarrasing Product


"If You're Not Embarrassed By The First Version Of Your Product, You’ve Launched Too Late" - Reid Hoffman

Well.. at least I don't have this problem. Not since I started doing the 12 projects in 12 months challenge which almost guarantees that the product will not be full featured.

One of my projects, ShareMyWorkout.today , was supposed to be a Progressive Web App that works on all devices. Except, I don't have an iPhone so I neglected to test on Safari. "If it works on Chrome it should work on Safari right?" Sure I thought and hit the launch button on Product Hunt anyway.

With no prior marketing and no name for myself it actually did better than I expected with the up votes (although this isn't usually a very good indicator of product market fit).

When I finally had a friend test it on his iPhone (yes, I launched without testing this), I was quite embarrassed.

But now that I think back on it. Maybe it was perfect. I'm kind of glad that I launched as soon as possible and didn't spend too much time getting it to work in every case. If people actually wanted it then I'd probably still see some Android users using it. Or maybe I'd get an email saying "hey, I'd really like to use this product can you please put more work into it?". You think I'm kidding that someone would actually write this but that's the feedback that I got on my current project.

It was good enough to solve my basic needs (I still use it to track my workouts as an alternative to Google sheets which sluggish terrible on mobile). Although would be nice to have my friend on board. I told him I'd fix it eventually but decided it wasn't worth the effort for now.

That's how it goes with product market fit. People are usually willing to tolerate many issues with the product as long as it solves their problem. Think about Twitter in its early days when it was "fail whaling" all the time. But it didn't lose any users because people needed it, people loved it anyway.

Sunday, October 21, 2018

Positive Triggers

Haven't written in ages. I think the reason is perfection is the enemy of doing anything. I want to write, but I want to write something brilliant. Thus, I end up doing nothing because the combination of those two things is hard and that causes stagnation. However, writing itself is easy. Sometimes what comes out is good. Sometimes its terrible. But I don't even have a chance at the brilliant if I don't do it at all. So here I go again.

I just read a blog on triggers and cycles by Seth Godin. To summarize: a trigger prompts us into action and causes cycles that last much longer


If you want to go deep into triggers, cycles and habits check out this book

But this should work in reverse as well. Setting up a positive trigger should set off a positive cycle. Maybe you do a pull up every time you walk through a doorway. Maybe you write a blog post first thing in the morning.

We know that the hardest part is starting but once we get past that part we usually do more. The cycle continues on its own momentum. That pull up might lead to more. And then some push-ups and squats. That single blog post and trigger the start of a sequence of posts, or maybe the start to a short story or book.

Eliminate negative triggers (remove Twitter from your homescreen, hide the remote). Set up positive triggers (put that guitar in between you and the couch, setup your homepage to your blog).

Monday, August 6, 2018

ShareMyWorkout.today (Project 4 of 12)

I’m excited to introduce project 4 of my 12 projects in 12 months challenge: ShareMyWorkout.today

I’ve never been very athletic but I keep myself in good shape. I keep a tally of my body fat and weight each month. Ever since 2011, it’s never migrated over 5 lbs of where it needs to be. I do this through consistency. My friends have wondered how I have been able to keep it up through all these years. One of the key reasons for my prolonged fitness: Social Accountability and habits. But it wasn’t always that way.

6 years ago at my previous job I met a friend who was an amateur body builder. I was looking for fitness advice so I asked him about his workout routine. He showed me his routine in a calendar that he created in Google sheets.

He and a friend had been logging their workouts in this shared document. They would use it to keep track of their own workouts as well as each others. If one of them failed to track a workout in a short while they would be sure to receive an encouraging inquiry.

My original workout log. Or you might say its version 0.01 of ShareMyWorkout.today

I soon joined them and was given my own tab in the spreadsheet. Since then I’ve been consistently logging my workouts for years.

Why did this work?


They say what gets measured gets managed. I 100% believe this. If you don’t write anything down, you avoid accountability. This goes for workouts just as much as starting a business. If you don’t keep track, you look back and have no clue why you haven’t made progress. But if you write things down, you are accountable for your actions. You can see right then and there if you did the work or not.

Jerry Seinfeld famously had a system that he credits for him being such a great comedian. He would make a big X on the calendar whenever he would write a joke. Pretty soon he had a week or so of X’s lined up. Once you have a a chain of X’s lined up, it looks pretty nice on the calendar. The next goal is to not mess it up. Don’t break the chain! Consistent daily action builds extraordinary outcomes.

This “don’t break the chain” strategy might be just as strong as the social accountability. I like seeing my “X’s” and that alone might keep me going. However the synergy of the two strategies makes it even more powerful.

So why create ShareMyWorkout.today?


The spreadsheet works but it has its shortcomings because its not tailored for workout tracking.
  • On mobile, Google spreadsheets opens extremely slow and entering data is a chore because it is not formatted well for mobile. 
  • Google sheets on mobile does not work offline. You can view it offline but in order to edit, you need to have a connection. This does not work for me as I do not have unlimited data and the gym does not have wifi (nor does it have reliable 4G). 
  • Tracking is a chore in the spreadsheet. Each month we need to recreate the month template and assign the proper dates. 
  • Pictures. My friend specifically asked for this feature to visually track his gains. 
Also, since my accountability partner has an iPhone and I have an Android, I needed it to work across all devices. I’m solving my own problem after all.

And that’s why I decided to create ShareMyWorkout.today as a progressive web app (PWA). It is basically a webapp that acts like an Android / iPhone app. You can add it like a native app to your phone as you would a native app by just going to the website. It works offline, it caches things and loads fast.



How’s the 12 projects in 12 months going?


The projects that I am doing are small and fun. They are scratch my own itch projects that solve my own problems. Thus, I know that I will have a user base of at least 1 if no one else likes them (although I really hope you do!). My goal is to start with small wins and learn the ropes of building and selling while I progressively work on more ambitious projects.

I’ve been learning about ways to spread the word. I did my first Product Hunt launch https://www.producthunt.com/posts/customjournal and have been engaging on Twitter, IndieHackers, and writing medium articles!

I was asked to chime in on whether I thought the 12 products in 12 month challenge.

Is success in 12 products in 12 month challenges a statistical outlier?

I’ll repost my response here:
In my article I talk about how I think the challenge solves 2 major problems:
Not getting started
Spend too long building product
https://www.indiehackers.com/@JustStart/why-i-took-on-the-12-projects-in-12-months-challenge-f690412077
I like to think of it as all the challenge does is put in constraints to help about with those. Like training wheels for newbie starters like myself. For some people it can definitely help them become more successful. Don’t think its necessary, especially if you know what you are doing. Definitely times where it could hinder you and you might want to break the rules. In fact, you might say the goal of this challenge is NOT to complete the challenge (like Peter Levels).
For myself I feel pretty good about the challenge so far. I think its helped me with problem 1 because.. well before it I’ve never shipped anything. And now I’ve shipped something.
I had a pretty low bar to start. My real goal this year was just to make $1 and I just made my first sale ever ($2!) last week with my 3rd project and I’m really excited about it. Definitely a small win but I thought I’d start small with mostly fun/scratch my own itch projects and try to learn from those and work myself up to more ambitious projects.

Yes! I did actually get my first sale ever with my Android journaling app (www.customjournal.com). It’s just a couple bucks but it’s so meaningful for me and proves to me that yes, I can do this if I put in the work. I’m hooked.

And still looking forward to September when I will be doing my first digital nomading experience as I attempt to complete the challenge in a foreign country.

Exciting things to come.

Monday, July 23, 2018

Enterprise vs. Indie Software Development

Back in my enterprise development days. The company that I was working at acquired another company. One of the senior engineers that was inheriting the new code base remarked how ugly the code was.

Another time as a junior engineer for a different company, I was required to dig into some legacy code from the founding days of the company. I couldn’t believe how poor the code was as I struggled to understand it.

I’m convinced that Mark Zuckerberg’s original code for Facebook had to be terrible and I’m sure that if he showed it to enterprise developers he would be laughed at. However, I’m also convinced that both the enterprise developers and the solo founders are doing the correct thing.

And that’s what I’d like to talk about today; the difference between enterprise software development and Indie software development. I’ve recently switched from the enterprise world to the indie world so it’s been something on my mind. Both require you to sit down and crank out code. You drink coffee. Sit in front of a computer and code away. But they are far from the same and if you neglect the differences, it can really hinder you.

What does enterprise development look like?


In the enterprise development world, even before any code is written there is bunch of stuff that needs to happen first. You might start with working with Product Managers to flush through the project details and then come up with a technical design document. This should address all the use cases. Then you’d present this to the product managers as well as other technical stakeholders on other teams. This document may go through some iterations. Many different use cases and error conditions get flushed out here. Then the work gets chunked up into pieces, estimated, and prioritized. Finally they are assigned to the developers.

The technologies that are chosen are well known in the industry to be the most reliable and can scale well under load.

The result is code that is clear and readable. Code is written for readability so that other engineers stumbling over it could easily understand it. Methods that are too large are broken down into smaller methods. Code is never allowed to be copy and pasted. Common code is refactored into a common library that can be shared. Unit tests and integration tests are written. It is important to have proper code coverage so that the team can quickly detect if future changes break it. There is a mandatory code review where other engineers scrutinized the changes.

What does indie development look like?


For indie hacking, I come up with an idea and nail down an mvp with just a couple sentences. I come up with a sketch of what the UI is supposed to look like. I get started on it as soon as possible. The code works but is not polished at all. I ship before some of the features are complete and while there are still known bugs in some parts of the code.

Why is this so?


In the enterprise development world you work on a much larger team so much of the code you read is optimized to be readable. The code is expected to live a long time and other people will be working in the same code base. As a technical lead, often the main effort is on the communication side of making sure stakeholders are on the same page. The company has been around for awhile, the business has already been validated. Maybe the specific feature you are working on might get killed but the company is invested in getting it out right and still has money to pay you even if it doesn’t. This means that although you are expected to work fast, speed is not the most important priority. In fact for many (arguably poorly led) enterprise companies, it becomes more about writing code than the product since the engineers can be far removed from the customers. You get paid for the code. Your bonuses may depend on how good your code is in code reviews and if your code

On the flip side, indie developer has so many unknowns. You often have no idea if the business is even viable when you write your first line of code. The more validation you do the better but you run into the chicken and the egg problem. The customer doesn’t really know what they want until they see it. Or people say they want a certain product but in reality won’t end up paying for it. Thus you want to get something out as soon as possible so you start getting feedback. Sometimes that just means throwing up a landing page without having a real product to get signups. If you can do things without writing any code, even better. But don’t do what a ton of developers starting out do and write code for a year and then end up finding out that noone wants their product. That means fast feedback loops are a top priority. You need to take shortcuts in order to get something in front of someone so you can start . This means the code is working but not super polished and not refactored a million times. For indie developers, it becomes all about the product. The code takes a backseat.

Don’t Confuse The Two


Both enterprise and indie developers are acting rationally. If you don’t have any customers it would be a major mistake to spend so much effort polishing up the code and spending too much time working on useless features that the customer doesn’t care about. There is probably a high likelihood that you will end up throwing all of that MVP code away.

On the flip side if you are an enterprise developer, you probably have a large number of customer and a large number of developers. Thus the code you are expected to write will likely need to be scalable, robust, and well written right out of the gate.

As Peter Levels mentions, the rules are different. Enterprise has its set of rules and solo making has its set of rules. Mistakes are made when the wrong rules are applied to the wrong game; the indie developer that spends too much time to make the codebase perfect and never ships or the enterprise developer that writes working code quickly but unreadable by his teammates. In the end it’s all about figuring out what is important for the game you are playing and optimizing for that.

Monday, July 16, 2018

How I decided to quit my job


I mentioned in my last article that I quit my job to become an solo maker. There’s likely a lot of people who dream of doing so. So I wanted to go a little more in depth in this decision and explain the reasons behind it and why it made sense for me.

WHY QUIT YOUR JOB?


I remember not long ago I was working a pretty stressful job. After I got home and had dinner it was already pretty dark. Its not like I had too much energy to do anything even if I could. My mind was already mush from the workday and I was exhausted. Looking back if I really had put my mind to it I could probably have overcome and gotten work done on my side project. Many entrepreneurs do this. But I didn’t have the discipline. Poor discipline and a poor environment means no progress. Instead most of my activities (reading, drinking with friends, relaxing) were to enjoy a momentary escape and recover from the workday.

In addition, the tides were changing at the company. There was a change in management, the community broke down and the people who I shed blood and sweat with started leaving. My rate of growth slowed down a lot. Although I made good money there I realized that it would be really dangerous to stay. What do I mean by dangerous?

DANGEROUS VS SCARY


On NPR’s How I Built This Podcast, Jim Koch, the founder of Sam Adams talks about the difference between scary vs. dangerous. Many things that are scary to us are not dangerous. Oppositely, many things that are dangerous are not scary.

He gives the example that repelling off of a cliff is scary but you are held by a belay rope which could hold up a car. Therefore it is not really dangerous. Things like walking near a snow mountain when the weather heats up probably isn’t scary, but is really dangerous as it could cause an avalanche. Not wearing sunscreen out to the beach may not be scary, but dangerous.

Jim then explains that him staying at Boston Consulting Group would not be scary but would be very dangerous as one day when he is 65 he’d look back at his life and see that he wasted it by not doing something that made him happy.

And I felt the same way. I looked at the other people further down the path that I was on. I didn’t like what I saw. Sure, if I kept the path, I might get promoted a few times and make a pretty decent salary and have a cushy job. Others might call it successful, but I would know that it wasn’t. It was a safe choice but one of regrets for me. I came to the conclusion that although staying at my job didn’t look scary, it was dangerous.

Whenever something is scary, we should also ask if it is dangerous. If not, then don’t be afraid to take the leap. Quitting my job sure looked scary, but was it really dangerous? I truly believe that it is not dangerous.

I should clarify. This is not universal advice to quit your job. I’m saying that for me at that time, it was right. Why do I say that? Because I had started to build up the discipline. I actually took a couple weeks off using my holiday hours in order to test this theory. I wanted to see how I would respond. Would I sit around and watch NetFlix or would I be productive. The result is actually not as important as the work ethic. All I wanted to see was myself actively taking steps towards my goal. I actually surprised myself on how focused I was. I loved the freedom. So that’s how I knew it was time to go.
"At 29, walking away from data processing, I was terrified. [...] 6 years at a job I felt stuck in. Maybe I was afraid of change.
The world might say you are not allowed to yet. I waited a long time out in the world before I gave myself permission to fail. Please, don’t even bother asking, don’t bother telling the world you are ready. Show it. Do it." — Peter Dinklage, Game of Thrones actor.
The most successful people in life are able to take calculated risks. They are great at capping the downsides. What are the downsides here? That I’ll never get a job again? I’m sure I’d struggle in the competitive market, but I do already have 10 years of software development experience including management, plus I’d have a papertrail of a bunch of projects that I worked on and unique skillet that would set me apart. I’d argue that I’d be MORE antifragile than my peers. Lost opportunity cost and income? The real risk would be to NOT pursue a dream lifestyle of mine. The money is nice but what would I want to spend it on? I’d want to spend it on quitting my job.

In the end I believe if you have the discipline to work, and you have the drive to learn, and you have the confidence to get back up after hitting obstacles. You’ll end up accomplishing your goal.
But that’s not all. There’s another very important thing you need before you quit your job.

MONEY IS YOUR LIFELINE


What is the thing that you want do most in life? Its probably not your job. But we spend most of our time at our job? Why is that? Well its probably so we can have enough money to pay for basic things that we need as well as little luxuries. There’s nothing wrong with that. But if instead you dream of something else. And you want the freedom to pursue it, then you need to think of money in a different way.
“We buy things we don’t need with money we don’t have to impress people we don’t like.” — Dave Ramsey
Thus if your priority is to pursue something else, you may need to adjust how you spend your money(life energy) to optimize for that. Sometimes we fail to see the connection between us having to work to pay for our expenses; if we could limit our expenses we could limit the work. The more runway you can build for yourself the higher your chance of success. You will be less stressed and give yourself more at bats and learning opportunities. Good luck!

---

I want to point out that this is not the norm for entrepreneurs wanting to do a startup. I am speaking more to those who are on the fence. If you aren’t mentally committed to your dream, don’t do it. If you have a family or mortgage and don’t have the runway yet, don’t do it. It can take time to create the right situation for you. If you carefully examine your situation and find fear but not true danger, then don’t be afraid to take a leap.

Wednesday, July 4, 2018

Tip: Manage Label Specific Gmail Notifications on Your Android Mobile

Ok here's the situation. I get a decent amount of email. We all get a decent amount of email. Most of it is not worth being distracted by. We want to be doing deep, valuable work and not get interrupted every 5 minutes from some company trying to sell you something. Other times its things that are important, but not urgent and it can wait for later. Our attention is valuable and others should not have a direct line of communication to interrupt us as they please. But some of the email is very important. Some of it is very beneficial to us. In this case, we choose to be notified.

That's what I wanted. I wanted to only get notified for specific emails. Other emails should not beep, buzz, or blink my phone. Also, I want this to be configurable on just my mobile phone.

So how do I do this? The first time I checked it wasn't possible. I have an Android phone and use the Inbox app.. Inbox does have a way to manage filters Inbox doesn't have a way to customize messages based on label.

I was actually planning on building something specifically for this. Maybe it would be my next project in my 12 projects in 12 months challenge. However, I found a way to do this without needing to write any code. Here's how you do it.

You need to use a combination of Gmail AND Inbox.

 So let's say that I am looking for a travel deal and sign up for Scott's Cheap Flights. Scott sends out an email whenever there is a travel deal. Since these are time sensitive, its best to get notified right away so I can quickly check if it is to a place of my liking and book.

So the first thing to do is for me to create a label for Scott's Cheap Flights. For this I need to use Inbox.


Pull up an existing email from Scott and there will be a pulldown on the top right. Select "Create new..."






It will ask you if you always want to add any future emails from Scott to this label. Hit confirm


You can configure this label here:



Settings > Email > Label settings and notifications
I would recommend having "Skip the inbox" on. Its time sensitive but not really something you want to see again in your inbox if you miss out.

Ok. So you are done creating the label. How do you get notified?

The Gmail app has the ability to to set messaging specific to a label.



 Settings > (email address) > Manage labels > (label name). From here you can check label notifications. You can even set a label specific Sound.

For this to be useful, I would also recommend going to your Inbox label (in Gmail app under the Manage labels setting) and disabling label notifications as well as notifications in your Inbox app. Otherwise you would still be notified for all incoming email.

That's it. And all of this can be done on the fly with your mobile phone.

So I decided to not build the app myself and just went with this solution. It is a bit annoying to have both Gmail and Inbox installed but I can live with it. Also, it would be lovely if Inbox supported editing filters to get a little more drill down into labels. For example you can use your filter to detect keywords so you can have a scotts cheap flights + for Bali label. You can still do this via the Gmail web interface but it would probably require you to get on your laptop.

Hope this helps anyone else out there who prefers to not be distracted by every single email and only on the good stuff ;)

Sunday, July 1, 2018

New Linux Mint + Xfce install

I got a new laptop. A 12 inch Lenovo Thinkpad x240. Specs? i7, 256 ssd, 8gb ram.  It was used off eBay but it is pretty spotless. I love these machines, the build quality is so nice. I recently even discovered that all X and T series are mil-spec. Perfect size and durability for my upcoming travels. All this was $180+$20 shipping. I don't think there is really anything that is comparable (12 inch ultrabook) at a similar price point in the market today. You can't compare those cheap plastic Acers to this. The major downside is the screen as it is 768p. However, I've already ordered a new FHD screen replacement for $84.

I just did a complete OS install and I kept track of most of what I did.

Install OS

Linux Mint 18.3 "Sarah" + Xfce. Downloaded from main page, used USB Image Writer from another Linux install to create a bootable USB drive.

disable Touchpoint - I don't use it at all.
Touchpad disable when typing.

ZSH

install zsh:  sudo apt-get install zsh
install oh my zsh: run curl command in https://github.com/robbyrussell/oh-my-zsh

create new .zshrc
---
export JAVA_HOME=/usr/local/android-studio/jre/
export PATH="$JAVA_HOME/bin/:$PATH"
export VISUAL=vim.tiny
export EDITOR="$VISUAL"
---


Setup the hosts file:
-------
# alias my git server
192.168.0.111 raspberrypi

#   block some sites that I waste time on such as
0.0.0.0 espn.com www.espn.com

# Take the hosts file from this url and append it to the bottom. This blocks a lot of mal/tracking sites
#http://winhelp2002.mvps.org/hosts.htm
-------

install chrome and login. Install various chrome plugins like LastPass.

install git
create sandbox directory,
   clone what you need...
   git clone git@raspberrypi:/home/git/custom-morning-journal.git

Configure git:
git config --global user.email
git config --global user.name
git config --global push.default simple

sudo chown username:username -R /usr/local

install sublime text 3
http://docs.sublimetext.info/en/latest/getting_started/install.html#ubuntu
(follow the commands there but sometimes the version isn't the latest so go to the main page and use the latest version)

install PackageControl
install Material Theme (and add recommended settings)

{
"always_show_minimap_viewport": true,
"auto_complete_selector": "source, text",
"auto_match_enabled": false,
"bold_folder_labels": true,
"color_scheme": "Packages/Material Theme/schemes/Material-Theme-Darker.tmTheme",
"font_face": "Fira Code",
"font_options":
[
"gray_antialias",
"subpixel_antialias"
],
"font_size": 9,
"ignored_packages":
[
"Vintage"
],
"indent_guide_options":
[
"draw_normal",
"draw_active"
],
"line_padding_bottom": 3,
"line_padding_top": 3,
"margin": 0,
"overlay_scroll_bars": "enabled",
"tab_size": 2,
"theme": "Material-Theme-Darker.sublime-theme",
"translate_tabs_to_spaces": true,
"update_check": false
}

Other SublimeText packages to install

Package Control
GitGutter
HTML-CSS-JS Prettify
SidebarEnhancements
SublimeCodeIntel
SublimeLinter

requires node js: https://nodejs.org/en/download/package-manager/

SublimeLinter-jshint

// SublimeLinter Settings - User
{
   "paths": {
        "linux": [ "/usr/local/node_modules/jshint/bin/"],
        "osx": [],
        "windows": []
    },
}

Install Android Studio. Don't forget to bump up the xmx

Install java jdk 8

SSD compatibility. Run through steps in:
   https://sites.google.com/site/easylinuxtipsproject/ssd

Xfce Theme


https://github.com/horst3180/arc-theme
Manually build.
Once built go to these menus to set to the correct theme
Appearance
Window manager
Lightdm greeter settings

Xfce config:
install docky for xfce
Set to autohide, use glass appearance
Add Chrome, Sublime, Thunar to dock.

install sensors plugin: xfce4-sensors-plugin
install network monitor plugin: xfce-netload-plugin

Dropbox

Install dropbox, fix icon:
https://www.dropboxforum.com/t5/Installation-and-desktop-app/in-linux-mint-xfce-dropbox-doesn-t-show-system-tray/td-p/155775
go to sesson and startup through menu and delete existing dropbox startup option.
Create a new startup option with command:

dbus-launch dropbox start

Google Pinyin

fcitx
fcitx-config-gtk
fcitx-frontend-gtk2
fcitx-frontend-gtk3
fcitx-googlepinyin
fcitx-ui-classic

From Input Method menu install Traditional Chinese
Then add Google Pinyin in Fctix Configuration menu.

Its a lot of work to get everything installed but a lot of fun. And as I use it for my main laptop I'm sure I'll find so many apps and settings that I'm forgetting.

Here's the result so far:


Wednesday, June 27, 2018

Why I Built CustomJournal — Project #3 of 12 in 12 months


I didn't write about my previous projects so I'll catch you up on how I got here before I talk about CustomJournal.

I quit my job over a year ago. I knew it was time to leave. Towards the end the winds changed. There was a change in management, the community broke down and the people who I shed blood and sweat with started leaving. My rate of growth slowed down a lot. Although I made good money there I realized that it would be really dangerous to stay.

I started with long term travel, something I always had wanted to do but never had time to do because of work. I had seen how things were shifting at work ahead of time and cut down my expenses so that I would have ample runway to take whatever path I chose next. I gave as much time as I needed in my travels to destress and think. I traveled for 6 months total. When I got back, I decided that I would once and for all, focus on a dream of mine of starting a business. But I didn't know where to start.

Challenge Accepted

Luckily, I stumbled onto this podcast episode by Peter Levels which was so inspirational. When he was stuck and depressed after a failed venture, his Dad told him the best thing to do is to take a big pile of dirt and start moving the dirt from one pile to another. When you are stuck, especially if you are starting to spiral down, the worst thing you can do is to stand still. You have to get moving. Action leads to .. well more action. But with the previous experience, the new action will likely be better. I'm sure you could literally move dirt and that would itself be beneficial. But the message here is you need to stop dwelling and start doing.

Which led him down the path of his 12 startups / 12 months challenge. Why is this idea so brilliant? Because it puts in just the right amount of constraint and prevents 2 major mistakes that new entrepreneurs often make:
 
 1) Not getting started - So many people never do anything. They talk about starting a business, they read books about starting a business. I'm guilty of both. When I was working my job 4 years ago, the company I was working at acquired a startup. I took the founder out to lunch to ask him about the experience. I was so pumped about it and then… I did nothing. FOR 4 YEARS! During that time I also read at least 10 books on startups and business. Its to easy to dream and talk, its hard to get started. This challenge forces you to get started right away.

2) Spend too long building product - the almost too common story is the one where the entrepreneur comes up with a brilliant idea, then proceeds to spend a year building it out. Some never really ship it because it is never "done", others ship and then quickly find that no one wants their product. By putting the 1 month constraint on your project, you are forced to think critically about what the true MVP is. You are also less likely to build useless feature that your users don't care about. The sooner you can ship the sooner you can get feedback and adjust.

If You're Not Embarrassed By The First Version Of Your Product, You've Launched Too Late" - Reid Hoffman

And those are the reasons for why I am taking on this challenge. To make sure I get enough at bats and that I am actually moving. Do. Ship. Get Feedback. Learn. Repeat.

So how did I decide to build this app?

When I had quit my job and was traveling through Asia I used a standard structured journaling template that I found online and just started to fill it in each day in a single Google Keep note. Each day I copied the template over, dated it and filled in the journal. After some time I realized that I wanted to change the questions that I asked myself. I found a few other questions that I wanted to reflect on each day. The specific one was to reflect on a how I pushed or challenged my self that day. I wanted to make sure I was thinking about growth. So my template slowly adapted. After doing this for awhile, I got a little bit annoyed of the copy and pasting on a mobile phone, so I was looking around for a structured journal app that I could use to replace my journal. But none of them really support customizing the prompts. So thats how I got my idea.

This leads back to the idea of doing. If you are having trouble thinking about an idea, you should also consider moving dirt. If you keep an entrepeneureal mindset, ideas will pop up from your action.

If you are someone like me who has been wanted to ship a product for the longest time, but has never taken action, consider taking up a challenge like this one.

Upcoming

Of course my next product. But I have another twist to this challenge. I’ll be doing it from abroad! I’m digital nomad-ing in a couple months and have already bought my plane tickets. Will let you know where when it gets closer.

Interested in supporting me? I’d love feedback on my app


Originally posted on Medium here

Wednesday, June 20, 2018

Introducing CustomJournal

I'm excited to share with you all my 3rd project in my 12 projects/12 months plan. Speaking of which I'm a bit behind, this one went 6 weeks :(

I know, I know, I'm supposed to do a once month max project for the challenge. The reason for it is to not spend too much time producing a product that noone will want. You always want to validate as quickly as possible. However, I had my reasons.

This project was a scratch my own itch thing: I've been journaling for some time and I built it with myself as a user in mind, so I know I'll have at least one user (but of course I hope you will enjoy it too!) . Also, I actually really really enjoyed learning how to code Android. The general advice for developers on IndieHackers is to get out of developer mode as quickly as possible and go into marketing, however, I really enjoy the product development aspect and hey, this is all about enjoyment at the end of the day.

Anyway here it is: https://www.customjournalapp.com/
And this is what it looks like:



Now let me tell you my story. I've been listening to the Tim Ferris podcast for quite some time now and he talked about his journaling along with other guests who journal. A couple common themes were that they have common things that they think and write about each morning. Gratitude is one of them. I think this is huge. Today we live in a world where we are pushed to constantly excel and achieve and push ourselves. We look around and feel anxious that we might not be doing as well as our coworker or maybe that one guy launched his successful company at 13 but we are already approaching 30. Especially with the spread of social media, all sorts of mental ailments such as anxiety and depression have come about. The cure for this is gratitude. Shifting the focus from what we don't have to what we do. We are all pretty lucky, but we generally don't take time to consider this. 

So thats the reason I took up journaling. I wanted to stay grounded as well as work towards my goals. So I started with a simple "5 minute" journal that consisted of:

  • 3 things that I am grateful for
  • 1 affirmation.
  • 3 amazing things that happened today
  • how could I have made things better.
Its very simple but the effects are profound. You have to take time to reflect on things or else things stay the same. Structured journaling was great because it forced me to ask myself specific things. So I journaled away for a few months.

After some time I realized that I wanted to change the questions that I asked myself. I found a few other questions that I wanted to reflect on each day. The specific one was to reflect on a how I pushed or challenged my self that day. I wanted to make sure I was thinking about growth. The app that I was using didn't offer that option. Why can't I ask myself whatever I want? And that's where I got the idea to create an app that was flexible enough to handle this. As your focus changes you can change the structure of your journal to focus on what you want. Maybe its personal relationships, maybe its fitness and exercise. Whatever it is, you can put it in your journal.


This is what the manage template page looks like
So my current journal as of now looks like this:

  • 3 things that I am grateful for
  • 1 affirmation.
  • 3 amazing things that happened today
  • Today would be great if..
  • what is something out of your control that you should stop worrying about?
  • Notes (for random thoughts during the day and a quick note about what I did)
  • checkboxes for keeping track of habits (meditate, study mandarin, code, exercise, write)
At the end of the day I complete this section:
  • 3 amazing things that happened today
  • how could I have made it better
  • name 1 challenged that you pushed through
That's it. But of course I'll adapt it as I go. That's the whole point.


Thursday, May 31, 2018

Month Of Blogging Complete

Here it is, my last blog post for this month. Completing a goal I had of writing every single day of the month (and most of last month). Well, technically I didn't write every single day since I missed one day and made it up. But at least I have one post for every day of the month.

This Wednesday's episode (the final of season 1 QA - its so good go listen) of Akimbo by Seth Godin summarized my motivations perfectly. Someone asked Godin how he gets his ideas. His response was that all famous creator's early work wasn't really that good. The secret is to begin. By doing so you change your state. You get better by putting in the work. The early work won't be good but the process of iterating, putting in mindshare, makes it better. And it starts with deciding you will do it, even in the face of the risk that it won't work.

The second part of it was fighting the resistance (originally coined in The War Of Art, Steve Pressfield). When you decide to do the work over and over, the resistance gets out of the way.

That second part is my primary motivation. The type of person I want to be. The being tired of procrastinating on my goals. I don't want to be a famous writer or even have a large audience. But I do choose to develop my thoughts and insights of how I want to view the world. And I certainly want to get shit done and achieve my dreams. So I'll keep writing, keep working, keep getting better. Everyday I'll be writing, but I'll probably work on more long form posts so I might not be posting every day. But trust that I'll be putting in the work.

Start Small

There's a story (I think its from Zen and The Art of Motorcycle Maintenence), about a student getting a writing assignment to write about his city. He starts thinking and thinking about the topic and after 20 minutes doesn't know what to write about. His instructor sees that he is stuck and gives him some advice: start by describing a specific brick of this building. From there the student starts typing away, describing the texture, look and feel of that brick. Then he moves on to the other bricks and how that brick fits in with the others and then the school and so on and on the words and ideas flow until he completes his essay.

I came back to this story for a couple reasons. Well for one, I was thinking about what I would write myself today. There is a world of things to write about so there is no excuse that there are no good ideas left. And we also know that there is no such thing as writers block. So I decided I would narrow my focus to something small. And when I started that process I realized that I heard a story like this before.

So that's what I wanted to share today. In order to get started, you have to get started. It helps if you get out of the abstract and down the specific. And, oh I just remembered the other lesson from that story, it was that the reason we are stuck when writing is that we are trying to do 2 things at once. We are trying to get our thoughts out AND organize them at the same time. That's too hard. Instead its better to get the ideas out first and then later organize them. That might be a brainstorm or a shitty first draft. Whatever you want to call it, you need to start before you can make it better.

Wednesday, May 30, 2018

24 Hours

Each day we are given 24 hours of time. No more, no less. We can spend it however we please. You can use it productively or waste it. Its up to you. In fact that's really the only thing we can decide about ourselves: how we choose to spend our time.

But even if you waste your time for a day, all is not lost. The beautiful nature of time is that you cannot waste time in advance. Its not like money where you can spend all of it on a buying binge, possibly to the point in which you owe money. You can't do that with time. If you waste your 24 hours today, you will get a fresh 24 hours to work with tomorrow. You can't waste 48 hours today.

You can however have the perception of owing time. Like when you end up spending the day on YouTube instead of doing the work you had planned. Then you may think you are one day behind your expectations. But thats just perception (and a dangerous one). In reality you still give your time going forward.

Its a dangerous perception to feel like you are always behind. That you owe time. Its funny that when I quit my job, I thought that I would be relaxed and carefree to work on my projects, away from all the aggressive work deadlines. But it turns out that I still struggle to keep up with my own arbitrarily made deadlines. I've been reading a bit on stoicism and working on changing my views. Where I am right now is where I need to be. I'm working on truly believing that I am on the right path. Its easy to look at peers who have built great companies already. The ones who are doing what I am doing but are 10 years younger. We look at others and believe that maybe we should be there and not here.

In a world where we are always looking ahead, knowing that we are where we are and being happy about it is becoming more and more rare. A couple things that help are practicing being grateful: appreciating where you are where you came from appreciating the things you already have. The other one is meditation: learning to be in the moment. Not in the past or the future but in the present. Is it possible to be striving, pushing for high achievement in life yet still happy and relaxed? I think so but probably with time and practice. I don't think it comes naturally to most people.

Tuesday, May 29, 2018

Addition By Subtraction

There's a popular quote: "Perfection is achieved not where there is nothing more to add, but when there is nothing more to take away" - Antoine de Saint Exupéry. I've heard it referenced many times in the software engineering (enterprise) world. We think a lot of adding new features, however, good code has little extra fluff. No code that is overly complex, everything doing what it needs to do, no more no less. This keeps the code base trim, easy to understand and easy to adapt.

The same is true for ourselves. Sometimes we focus too much on adding by addition. However, there is often truth in addition by subtraction. For example, minimalism. All those antiques in your closest and sporting equipment that you haven't used in 5 years. You might be better off selling them, turning them into cash or items that you actually use. Instead that extra stuff is actually weighing you down.

This is not true just for stuff. What about the people in your lives? Do you have friends that might be weighing you down? Possibly negative people who don't put wind in your sails but rather fill your life with drama? This is a tough decision, but maybe its time to cut them loose.

What about your habits? Do you do things because you've always been doing them? Maybe there's a tv show you follow that has run its course but you still watch it anyway because it used to be good and so its just a habit to watch it every Wednesday. What about those extra snacks that aren't so good for you.

A lot of times we look to become better by adding something. Some knowledge, some trick, some item. However sometimes the change is staring us right in the face. Its the things we already have, its who we already are that we need to change.

Monday, May 28, 2018

Startup Basics


Really great video. Back to startup basics. Instead of getting VCs on board and building the next Facebook, focus on making something that people actually want and sell it for money. That's how people have been running businesses from the beginning of time. Also, nothing wrong with a lifestyle business. A billion dollars is awfully nice I'm sure. But the money doesn't solve all your problems. Instead of building a product to be bought up, maybe create it so you can keep enjoying solving people's problems and make money at it along the way, buying yourself a bit of freedom along the way.

Sunday, May 27, 2018

Understanding the Meaning of Shoulds

People will give you advice all the time. Usually it comes in the form "you should...". I call this "giving a should". The first thing to remember is that if someone gives you a should, even if it is not for you, you should be grateful. Why? Because they are sharing a part of themselves. You see that idea didn't come out of nowhere. Instead it came from their thoughts, their dreams, their desires, their fears. It is less about you and more about themselves. This means that if someone gives you a should you should never criticize it too harshly. Feel free to explore more on why they are giving you that should. Feel free to test the assumptions. But be cognizant that it came from that person so an "oh that idea is dumb," would be almost an attack on that person. There are some percentage of people who are able to distance themselves from their ideas; they might respond "oh, why do you think it is dumb?" But I think a majority of people would be offended because they are attached to their ideas, as if the idea is part of themselves, and thus an attack on the idea is a personal attack.

I'd actually recommend that when you receive a should, you might want to use that as an opportunity to learn more about the person giving you the should. Try to understand deeply where that came from. Where did that should originate from? Is it a childhood dream that they have been yearning to fulfill? Fear of upsetting a parent? Pressure from society? A pleasant experience that they had themselves and want you to have the same experience? If someone offers you a should, they are usually willing to share they reasons behind it as well.

Once you know the reasons behind the should you can make a better decision on if you should keep that should or not. You are not required to. Its not yours to begin with after all. If you decide to not keep it, at least you will have a better understanding of the person behind the gift.

Saturday, May 26, 2018

Be The Man in the Arena

“It is not the critic who counts; not the man who points out how the strong man stumbles, or where the doer of deeds could have done them better. The credit belongs to the man who is actually in the arena, whose face is marred by dust and sweat and blood; who strives valiantly; who errs, who comes short again and again, because there is no effort without error and shortcoming; but who does actually strive to do the deeds; who knows great enthusiasms, the great devotions; who spends himself in a worthy cause; who at the best knows in the end the triumph of high achievement, and who at the worst, if he fails, at least fails while daring greatly, so that his place shall never be with those cold and timid souls who neither know victory nor defeat.”
- Theodore Roosevelt, The Man in the Arena

Was watching the NBA semifinals yesterday and LeBron had "The Man in the Arena" written on his shoes. Its true we sit on the couch and criticize players when they are less than perfect. In real life we love hearing about failure stories about those around us. Maybe it makes us feel better about ourselves, not doing anything.

Less criticizing. More doing. And less sports watching for me...

Friday, May 25, 2018

My Mobile Service Dilemma

I've been experimenting with different MVNOs. MVNOs are basically wireless service providers except they don't own the network. Instead they lease off of the major providers (like Sprint, AT&T, Verision, Tmobile). I'm doing this because they tend to provide the same coverage as the major providers (same hardware) except they can be a lot cheaper and often times have no lock in.

I was recently on MintSim (now Mint Mobile) on their initial sign up deal $45 for 3 months of service that includes 2 GB of LTE and unlimited text and minutes. Pretty good deal if you ask me. I doubt most people have a better deal than this. Except the coverage around the house is a bit spotty. It mostly works but every once in a while I see the bars go to zero. A few dropped calls here and there. But its usable overall. Nonetheless I found that since I'm not big user of data (I probably only used 100mb out of that 2GB of data), I figure I should look for something else. Why pay for something I'm not using? And also something with more reliability. So I decided I would try Tello. Tello with unlimited text and minutes and 200 mb of data is $12/month.

So I tried to do that but I ordered too late. I didn't account that it would take over a week for my Tello sim card to arrive. And from there it takes maybe 24-48 hours to do a port. I wouldn't be able to do this before my Mint Mobile service ended. I also tried switching to a different existing provider I had used before but apparently you can't reuse the same sim card so they would need to send me a new one, which also would also arrive too late. So I had a bit of a dilemma.

I'd have no choice but to re-up my Mint Mobile contract unless I was willing to lose my number (which I wasnt). The pricing structure of Mint Mobile looks like this. I could renew for a year for $180(the cheapest per month cost of $15/month). 6 months for $108($18), 3 months for $69 ($23/month). Or 1 month for $35. At first glance getting a year isn't too bad. Its already pretty cheap. How could anyone pay $35 a month for service? That's more than twice as expensive per month as the cheapest price. But I need to consider this given my options.

So my options are basically

Comparing for a year:

1 year mintsim = $180 year
vs
1 month mintsim + 11 months Tello = $167
vs
3 months mintsim + 9 months Tello = $177
vs
6 months mintsim + 6 months Tello =  $180

Comparing for 6 months:

6 month mintsim deal = $108
vs
1 month mintsim + 5 months Tello = $90
vs
3 months mintsim + 3 months tello = $105

Comparing for 3 months:

3 months mintsim = $69
vs
1 month mintsim + 2 months Tello = $59

When broken down this way it was pretty clear that I should buy 1 month of MintSim for $35 and then switch to a cheaper service. This has further benefits for me since sometimes I travel and want to "park" my number cheaply and lets me take advantage of competitive deals from other MVNOs.

I thought this was notable since my first reaction was "no way am I going to pay $35 for 1 month" but when carefully considered, that actually turned out to be the most sane and cheapest choice longterm. In retrospect I'm glad that even though I made a mistake that cost me money in the beginning (not moving out after the introductory offer), I didn't double down on my mistake and considered my options carefully. In the end this is a small decision and saves me $23 for this year and $36 each year after that (assuming I like and stick with that service). But whats truly valuable is to build the skill to look at the situation you are faced with, and make the correct decision despite the circumstances that brought you there. Over time, that should lead to real wealth.

* I want to point out that I don't think Mint Mobile is bad. The coverage just didn't work well for me at my house. I've read reviews about people complaining about the service for each single major carrier. That means its important to actually try the service. The coverage maps are good generally but you probably want to know how it works specifically at home and at work. Coverage changes so I may test Mint Mobile again in the future, especially if my data requirements change: they seem to have the best deal if you need data. I'm specifically moving away from it because I don't need that much data at this time and am willing to deal shop.


Thursday, May 24, 2018

Better Than Yesterday

Its such a simple question: are you better today than yesterday? If you can answer yes to this every single day then you will be successful. Its harder to answer than not because there are negative forces pulling us back, making us worse. If you don't do anything you are worse than you were yesterday.

If you decide to take today off on you workout (and assuming its not because you are letting your muscles recover from yesterday's workout) then you are weaker than yesterday. Your body, muscular and cardiovascular, gets weaker by the day if not being put to work.

Some of us may have gotten stuck in a routine where we go to work and have become stagnant. We don't come out of work better. Sure maybe we make a little more money and our financial health is getting a little bit better. But in all, this could be considered a net loss, considering the opportunity cost of what you could be doing. And, if you are not learning, as well as let the stress take a toll on your body, and creating miserable experiences, its a big net loss. Don't forget your mind will atrophy as well. It works like a muscle and if you don't constantly use it, it will deteriorate.

Rome wasn't built in a day, but it also didn't fall apart in a day. If you skipped a workout or didn't learn anything one day, it doesn't mean anything. In fact, if you went to the gym and worked out really hard one day you wouldn't notice it in the mirror. If you did it 5 days in a row, you also would not notice it. Its the constant day by day, month by month effort that is needed to see growth. And that works in reverse as well. You cheat too many days and the results will be obvious down the line.

Make today better than yesterday. Put in the work. I promise you, the results are waiting for you.

Wednesday, May 23, 2018

Play the Long Game

When playing any game you have the option of playing a finite game or infinite game. I'd like to talk a bit more on advantages of playing the long game.

When you play an infinite game, the thing you are working on doesn't have to work out. Not right away. You can do what is right vs. what is easy. You can make mistakes and learn from them. And since you can tolerate mistakes you can actually move faster. You no longer have to be perfect.You have time to experiment. To put things out there and listen. Being perfect can actually be limiting as it can prevent you from shipping and getting valuable feedback.

When you play the short game, you are limiting yourself. It's like an American football team in the 4th quarter, short of time and timeouts. You can't throw to the middle of the field for the risk of being tackled and losing time. You can't run the ball because you won't get down the field fast enough and you'll quickly chew up time. You really only have quick deep throws to the sideline. Sometimes you'll be far away from the end zone and only time for one play: the Hail Mary. You say your prayer and toss the ball up for grabs in the end zone, hoping it will work out.

For things that matter, you don't want to leave it up to a hail Mary. Everything, every little battle, the game within a game  is important. But losing or having setbacks in any of those doesn't kill the overall game. For the football team that means losing a game doesn't matter. They  can learn from the loss and get better. Good teams take losses well and learn from them, keeping their eye on winning  the championship that year. Great teams, dynasties, work towards building up their teams to be successful over decades.

For myself, wanting to be a successful indie developer, I am looking to build skills to be successful in the long run. It doesn't matter if the specific project that I am working on works out or not. There will be many of them. I just need to focus on the things that I can control. What matters is that I put myself in a position to play an infinite game. When that happens it "opens up the field" for me and I have room to experiment and grow. That'd the dream anyhow.