Friendship is much simpler when you’re a kid. You can simply approach someone and ask them to be your friend. You can visit your grandmother for the summer, come back, and pick up conversations as if nothing happened. Children’s friendships are about living in the moment and enjoying each other’s company.
As we grow up, friendships become more complicated. If you haven’t been in touch with someone, you might feel guilty—even when there wasn’t anything specific to discuss.
I realized that’s okay. Friendship isn’t supposed to be complicated. You can enjoy time together whenever you want without needing to be in touch constantly. This time together doesn’t have to be planned in advance. Meaningful friendships arise naturally anyway.
So stop overanalyzing. Don’t worry if you haven’t been in touch for a while. It’s normal to drift apart, and it doesn’t make you a bad person. The next time you’re in a place where an old friend lives, send them a message and ask to meet up. Think about how you want to spend time together and do something you used to enjoy. If they were a good friend before, that’s reason enough to enjoy their company again.
Sometimes YouTube can surprise you by recommending a video that exists simply because someone out there wanted to create it. Recently, it showed me a video from the Gawx channel. Great work deserves to be shared through word of mouth, so here are a couple that I liked.
Teenage Engineering introduced new version of their EP-1320 and created a gorgeous landing for this (captured screenshot). This is the kind of skeuomorphism I haven’t seen for a while. When I was a kid, it was a popular style for online games because of how immersive it was. I’m glad to see it coming back.
This is my second time watching Punch Drunk Love, and what a nice movie it is. While There Will Be Blood remains the most epic, beautiful, and comprehensive movie Paul Thomas Anderson and Robert Elswit created, Punch Drunk Love is the most original.
The main thing that I noticed during this rewatch are the colors. They are the main theme in this movie. They establish the emotions of the scenes. Even if you don’t pay attention to them, you feel them. Blue follows Barry everywhere — symbolizing his loneliness and detachment. Red represents everything good that he finds along the way; it’s happiness.
Everything plays so nicely together in this movie. It’s funny and sad sometimes. It can be brutal but also tender. The beautiful work of Robert Elswit is hard to describe, I want to watch this movie again and again just to experience every scene one more time.
I found a blog that is excellent at expressing my thoughts. It’s also a good litmus test as his style and ideas seem to be quite polarizing for some reason.
Consider the fact that most companies are unable to successfully develop and deploy the simplest of CRUD applications on time and under budget. […] Most organizations cannot ship the most basic applications imaginable with any consistency, and you’re out here saying that the best way to remain competitive is to roll out experimental technology that is an order of magnitude more sophisticated than anything else your IT department runs, which you have no experience hiring for, when the organization has never used a GPU for anything other than junior engineers playing video games with their camera off during standup, and even if you do that all right there is a chance that the problem is simply unsolvable due to the characteristics of your data and business?
I will remember this year as a time when so many companies threw out all the product work practices they cared for before and started adding AI features that either barely work or nobody asked for.
The secret is that there’s no secret for doing things correctly. You have to hire the correct people, motivate them to continue working even when there’s no clear risk of being fired, make them feel valued and appreciated, not waste their time, ensure they’ve got the space to do work the right way, only accept the right work, and then just leave them the hell alone. If they have brains, they’ll figure everything else out themselves.
It’s remarkable how many things would be fixed if companies hired smart people.
Usually, you can often pinpoint the exact moment when a company’s culture begins to decline – it typically follows a hiring frenzy where the quality of new hires drops, and these less qualified individuals start hiring others, creating a vicious cycle.
It has become exceedingly clear to me that the average company is not a suitable environment for someone that cares about the craft of programming. To make things worse, once your standards are high for yourself, I’m guessing that only the top 1% of companies in terms of workplace culture is not a personal offense.
I wouldn’t be surprised if finding a genuinely fulfilling job has about the same hit rate as starting a bootstrapped business from scratch.
At this point, it does feel like building your own company and cutting all the bullshit might be the only option for someone who cares about their craft.
I found King Creosote randomly through some recommendation on YouTube or Spotify — I don’t remember. Diamond Mine is now the first album I bought in a very long time. Then, I found this tender documentary about life in Scotland and loved it.
These albums are so good at grounding you. You might sit in a train or walk through a busy street, and you start forgetting that you’re part of this crowd. You feel as if you’re a bystander, noticing all the small details in people and things around you — everything that makes them special.
It would be interesting to define what a good interface is. We can start with something simple: A good interface is one that requires minimal cognitive and physical effort to accomplish a task.
This definition is not ideal. In most cases, an interface performs many different tasks. You might want to create, move, and delete things. Now, let’s create the next version: A good interface is one that requires minimal cognitive and physical effort to accomplish the tasks it is supposed to perform.
This has its own problems. Some tasks are performed more often and some less. For example, in a banking app, people send money more frequently than they buy stocks. This leads us to the next definition: A good interface is one that requires minimal cognitive and physical effort to accomplish the tasks it is supposed to perform, weighted by how often each task is performed.
Good designers know this and optimize the same function without consciously thinking about it.
There are a few interesting corollaries that follow from this definition.
“Clean” interface is not an optimal interface. There is a huge tendency today towards clean interfaces. What designers understand by a clean interface is hiding all important elements behind context menus and reducing information density by increasing white space around elements. However, it’s easy to see how this leads to worse interfaces. It takes more cognitive effort to understand and remember the path to a certain action. It also takes more time to go through this path as it requires more clicks.
A Figma frame with all information hidden might look cleaner, but it’s not that useful.
One good example of trying to create a clean interface is JetBrains’ redesign of their IDE. They removed important elements from the interface used by thousands of engineers and needed to issue a statement to address the feedback they received.
The interface should feel snappy. Internet applications are already too slow. While we have improved how easy it is to build things, we have failed at optimizing for speed. The internet is stupid slow. Animations are great at helping people interact with computers and creating a “magic” feeling, but very often they stand in the way of these interactions. Imagine a web page that takes 500ms to load its resources such as HTML files, JavaScript, fonts, and images — it’s already too late to add a 300ms fading animation on top of that. Waiting for a whole second for an app to start being usable might be too much.
Good interface is not about trends. Another tendency today is chasing trends. Products change their appearance every few years, adding more useless noise to make designs “pop”. Often, designers make these changes only because they can — technologies provide too few constraints to prevent this.
A good interface is like a tool: functional, reliable, and not dependent on the whims of fashion. It minimizes cognitive and physical effort, prioritizes essential tasks, and remains functional and efficient regardless of changing trends.
Designers too often look for challenges in the wrong places instead of focusing on what truly matters — ease of use, efficiency, and functionality.
I’ve discovered a simple formula for a universal line height in CSS:
line-height: (1em + 1ex);
It’s surprising how well this works. This formula often results in a line height close to 1.5. For example, Helvetica Neue has 1000 units per em and an x-height of 500 units. So 1em + 1ex equals exactly 1.5em.
It’s especially useful in cases where people can choose fonts without being able to set the line height. For fonts with a smaller x-height, like Garamond, this will result in smaller line heights, and fonts with a larger x-height, like Inter, it’s the other way around.