Last updated: 2020-12-15
It's important to keep in mind that these only have value in the context of personal growth. Changing the
reference frame to something like "what's the best way to get something done for the company I work out" would
invalidate most of the statements below. By all means take a stab at rolling your own web server from scratch.
Reconsider your life choices if you are about to do this for your startup or at your company. The exception being if
this IS your job or startup's purpose.
-
Libraries > Frameworks. Hand rolled modules > Libraries
-
Frameworks do a great job of getting you from 0 to 1 extremely quickly. But once you get to 1, you start to
realize that you have to pay the price in the following dimensions:
-
Future restriction: the folks who built the original framework probably had a strong idea of what they
wanted to tackle and a general idea of where they want to take it. If your usecase involves deviating from
the original groundwork, be prepared for a little bit of pain and suffering. Maybe some loss in
performance and some hacked up ugly code.
-
Loss of control: Don't like how a function works? Tough luck.
-
"Just make a PR to the project" - personal projects and learning happen at a smaller timescale than a
product at a company. How many of you are patient enough to wait until your patch is accepted to make
further progress on your project?
-
Ain't nobody got time to keep updating to the latest version: Ask yourself if you'll be okay if you spin
up your project 3 years from now. Will it still work? or does it depend on some package that no longer
exists and you don't have a copy of anymore? Minimize your vunerabilities. Locally host packages.
-
What are you going to do if it's discontinued? It probably took multiple people to maintain the original
project. Are you going to fork it and make it part of your purview now?
-
The more subtle cost of using frameworks is that the nuances tend to be treated as black boxes. I've run into
way too many people who end up becoming experts at gluing services while lacking a deeper understanding of
the underlying systems. While there is a place for people like this, I personally do not want to be one. I
was fortunate to start my early career in an industry and a team where most of folks suffered from the
"Not Invented Here" syndrome.
-
Contrary to developer musings, there is value in suffering from NIH (so long as it enhances the core
business model or has potential for a new business vertical). It starts to become a minor problem when
one team starts to see another team in the company as the "other/outside". It starts to become a major
problem when resources are redirected away from the core business in order to create clones of popular
software. As t approaches infinity, maybe this is the inevitable outcome in the steady state.
-
Have 1 high level langauge and 1 low level language that you are good at
-
My day job involves heavy use of C++. Where C++ is overkill or ill-suited, python comes to the rescue.
-
Be good enough to hack something together in the world of (web, mobile, hardware) development
-
The front end world moves too fast for outsiders to keep up. Mobile is heavily fragmented and requires
learning different languages to develop anything natively. You don't have to be an expert at any of these.
Spinning up a python webserver while using vanila JS, HTML, and CSS will get you really far. Why do you care
about staying up to date with the latest React release if you don't care to be a frontend developer?
-
Build software to last
-
Will that super cool seductive SaaS tool all your friends are using be around 3 years from now? Will they
still keep their pricing model the same? Will working in their paradigm force you to do coding gymnastics?
-
This also serves as a indirect guiding principle to force you to learn the details. Spinning up a database
locally isn't that hard. Understanding the basics of SQL doesn't take that long. Knowing how HTTPS works and
how to set up a SSL certificate will only make you wiser.
Doing takes more time, but it teaches you more than passive reading.
-
Lean on the side of minimalism
-
Wonderful and expressive apps and tools are created every day. For all the time and energy that someone
puts into making them awesome, it's only natural for them to want to make some money off of it. This will
create a situation where the provider will want you to rely on them. What do you do when they die out? How do
you keep using that tool? Not every application will give you the ability to export data. Even if they do,
they won't necessarily give you full context or in a friendly format. I'd like my ide to not be in the cloud.
I don't really need that note taking app that syncs across all devices I install the app on. I'm not an
open source enthusist, but I think using and supporting open source tools removes this implicit death pact
that cloud hosted services force you to enter.
-
There are always exceptions, so violate any of the above as necessary
-
Sometimes you just have to say screw it, i'm going to use a
The posts that are to come will echo this philosophy as well.