The only constant you should hold in life is change. If you hold change as a constant, you will learn to adapt and manage life’s complexities well. Your software should reflect this principle and allow itself to evolve and adapt. It’s essential to keep things simple while also ensuring that you can adapt the system to the inevitable yet unpredictable future. A simple system is easy to evolve.
Complexity in any system is what creates defects. Developers are easily able to reason about a single unit of code or even sometimes, a simple component.
If that is the case, then why are defects understood to be a natural part of software development? There are two causes of this: intricate integration patterns and state.
Most systems of non-trivial scale have multiple components or layers within them. Each one of these components or layers becomes its context.
Occasionally, and a lot more often now than in the past, these components communicate to external systems as a means to integrate third-party functionality.
Each one of these components has its interface and boundaries that define it.
I've always savored the idea of working from home, and I never saw a good reason why our employers shouldn't let us at least dabble in it. So now that I've been working remote full time for almost a year with Skiplist, I thought I'd compile some of my thoughts on the experience.
For some waking up early and working out feels right. For others maybe it is a midday stroll around the neighborhood.
Everyone has a preference. There is no right or wrong answer. The main point is to have a strong foundation of how your day will be structured.
Build a system that works for you and only you.
Today, every company is becoming a technology company—whether they like it or not.
Even if it's a hardware store, like Lowes, people will come in with smartphones and headphones. Business owners have no choice but to respect that. They need to be able to deploy technology solutions to give customers the technological experience they’ve come to expect. If they don’t, Home Depot or other competitors will. And when they do, they’ll be able to provide a better customer experience.
Most entrepreneurs consider fundraising to be the first and most crucial step to starting a business. A quick Google search will confirm—there’s no shortage of articles out there about how to raise large amounts of money for your startup, and fast.
But the notion that you need to fundraise to start a company can be misleading. You don’t.
When you think about what “value” means, you might see dollar signs. That’s what many companies think, too.
In an era where social responsibility is increasingly important to consumers, companies are scrambling to showcase their “values” as a way to turn in a profit. There’s a reason so many tech company slogans sound similar. It’s not just that they’re all trying to do the same thing (make a profit), it’s also that they want to take our attention away from their primary goal—the bottom line.
When Andrew and I first made the decision to move forward with starting Skiplist, we knew that establishing a foundation was a when, not an if. Leveraging Skiplist’s tech talent, building a culture around the necessity of charitable giving, and adhering to our values were non-negotiable.
Today, we're all walking around with mini-computers in our pockets more powerful than all of NASA’s combined computing in 1969. In fact, most of us can hardly remember a time before smartphones—despite the fact that the first iPhone launched in 2007.
Tech evolves at a breakneck pace, but regulation is often slow to catch up.
Here’s what I mean:
Companies have been using our personal data to target sales and advertising for years, but it wasn’t until last year that lawmakers intervened in an effort to protect consumers.
For as long as we can remember, we’ve had houses, cars, and streetlights.
But today, there’s often more to these staples of modern life than meets the eye. Where a streetlight was once timed to turn red every 30 seconds, and after 15 seconds, turn green again—today, that light is smart, meaning it adapts to movement by pedestrians, cyclists and cars. And where a house was once just four walls and a roof, today it adapts its temperature based on its surroundings. Our cars are no longer simply at the mercy of the drivers—today, they can communicate with each other to slow down based on traffic patterns.
Businesses, like people, are all guided by different values.
Some want to sell ads, others are focused chiefly on adoption, and some only care about the bottom line. Most of the time, a company’s values fall in line with meeting the needs of their customers. But occasionally, a company’s goals and solving its customers’ pain points don’t quite match up.
This is a phenomenon that’s especially problematic—and common—in the tech space.
There is a common thought in entrepreneur circles that greatness isn’t defined by what you say yes to, but what you say no to. This rings true in many domains but in software it can become a way of life. In software, the build vs buy challenge is fraught with strong opinions either way. There are a lot of incredibly smart engineers that can build almost anything given the right resources.
Abstraction is a powerful tool. Some of the greatest inventions in technology: operating systems, programming languages, compilers, etc. are abstractions. However, when misused or misunderstood, they can be destructive.
Over abstraction can create unmaintainable, untestable monstrosities. Under abstraction may mean duplicate code, but duplicate code is almost always better than unmaintainable code.
Most personal development books will tell you to set goals and work towards those consistently.
Consistency forms habits and creates progress towards goals no matter how small.
There’s an often-quoted statistic that if you do 1% a day or get 1% better you are 37.78x closer to your goal or improved as a person.