Book Review: Shape Up: Stop Running in Circles and Ship Work that Matters

This exceedingly long-winded titled book is another Basecamp book. Basecamp is a company run by D.H.H. The OG creator of the Rails half of Ruby on Rails. As someone who primarily operates in the rails universe, it seemed only right to set several books from Basecamp and DHH into my reading list. However, I found this book to be slightly disappointing. 

With a dozen and half different project management designs, from Waterfall, Kanban, and Scrum, this book describes their version of how to tackle projects that were detailed and clear. Yet the process they use, however effectively just feels like a small cycle waterfall with an emphasis on team ownership. 

The concept of shaping work before you start doing the work is a solid idea. The general idea is that you would make some rough designs and sketch out the functionality you are about to do, to properly shape the work. There are 3 main stages of shaped work: 

  1. The initial design is rough 
  2. The problem has been solved and well thought out, with any questions resolved
  3. It is bounded in scope and that scope is locked. 

Another aspect of Shape that I can get behind is Breadboarding which is a way to sketch out a flow for a solution to a problem, showing all the critical parts of the problem without being affected by the final design. Function over Form. 

The big problem I have with shape-up is the weird relationship when it comes to teams. They layout that there are essentially two different teams, one that decides what to solve and designs a solution, then there is another team that essentially implements whatever is written into the project. The removal of collaboration of the implementors and the planners on a project seems extremely dangerous. 

So, in summary, I wouldn’t recommend the overall process that Singer recommends in Shape Up, but there were still some tidbits of wisdom within. I don’t recommend reading this one.

The hidden cost of high res photos in web development

They say that a picture is worth a thousand words, but if that picture causes your website to load slow, Then it isn’t worth anything. It could be costing you greatly. Studies show that to prevent users drop off your website should load in 1-2 seconds. Any longer than that visitors become highly impatient and leave. One of the biggest and easiest to fix mistakes I’ve been seeing is new web developers not optimizing their image sizes for the web.

It’s great that you found some 4k high res 6000×5000 pictures that you can see every follicle of hair in that horse’s mane. However, not everyone is sitting at a workstation likely hard wired into a fast internet speed. More likely your visitors will be on a mobile device and using their data. The last thing they want is to watch your website sit and spin as you force them to download some 5MB high res photo that the web browser is going to downsize on the fly anyway to fit their tiny screen.

So what can we do about it? Well, we can attack it at two different angles. The first angle is image optimization is the act of decreasing file size without losing quality. The second angle would be implementing a lazy loading feature to allow the rest of your website’s content to load without having to wait for the bigger data files such as images to come across.

Image optimization can be done either at creation using a photo editing software like Adobe PhotoShop or GIMP. In that, you can reduce the photo resolution and size to be more web-friendly. Reducing a massive Photo from a DSLR into something more consumable like a 500×500 image can save possibly whole seconds and lots of data.
You can save even more data by running the image through an image optimizer such as TinyPNG.

The second prong attack will come from lazy loading. You can find an awesome lazy loading example here: Css Tricks Tutorials. In summary, you are going to use a super low resolution and lightweight photo, slap a blur effect on it, then replace the image with a high-quality one once it has finished loading across the network.

Utilizing these techniques can easily save you seconds off your load time, and drastically improve your sticking power with users. This will also improve your site’s SEO score which helps determine how it ranks in search engine results. Try out these methods and let me know how much time you shaved off!

Book Review: A Guide to the Good Life: The Ancient Art of Stoic Joy

This book is an excellent entry-level into Stoicism. This book aims to give a resolutely practical approach to Stoicism. The author William B. Irvine takes us inside the application of Stoicism against common issues such as grief, anger, the temptation of fame and wealth, and other challenges to inner balance and tranquility.


“Stoicism, understood properly, is a cure for a disease. The disease in question is the anxiety, grief, fear, and various other negative emotions that plague humans and prevent them from experiencing a joyful existence.”

― William B. Irvine, quote from A Guide to the Good Life: The Ancient Art of Stoic Joy

The first section of the book goes into a basic overview of the history of philosophy and highlights various stoic philosophers of note. This section was not nearly as valuable to me since I appreciate application over history.

The next portion of the book is called Stoic Psychological Techniques. This is where the application begins. One of the exercises he engages the reader in is the technique called “Negative visualization”. Irvine asks us that we imagine the loss of the good things in our life, our life, family, friends, and possessions. The goal of this experiment is to ensure that we must not take these things for granted and by experiencing this loss we can truly understand how we are blessed and often take things for granted.


“After expressing his appreciation that his glass is half full rather than being completely empty, he will go on to express his delight in even having a glass: It could, after all, have been broken or stolen.”

― William B. Irvine, quote from A Guide to the Good Life: The Ancient Art of Stoic Joy

A second technique he discusses is what he names “the dichotomy of control”. This is seemingly very simple, assessing all events in life and dividing them into things that you do and do not have control over. Viewing the events in this mentality allows us to reduce the anxiety over things we can not change, and help us isolate things that we can impact.

Irvine then goes on to advise on how to approach grief, anger, and fame. This mostly comes down to using the previous techniques and applying them to the things that cause these emotional reactions. When grieving, imagine you never had what you wept about, revealing how truly blessed you were to have had that time, to begin with. He also quotes Seneca about anger being a brief instance of insanity, and if you have lost so much control over yourself to become that emotionally unstable and angry that we must again consider the cosmic insignificance of the situation.


“The easiest way for us to gain happiness is to learn how to want the things we already have.”

― William B. Irvine, quote from A Guide to the Good Life: The Ancient Art of Stoic Joy

Overall this was a really fun book to dive into. The history section for me was honestly super difficult to get through. However, once we got into the thought experiments and the actual application I found myself fully immersed in this book. The skills and techniques taught in this book can be incredibly useful when applied to your life. Overall I would suggest reading this book, and if you don’t love history just skip the first part.

Developers Don’t Buy Into the Myth of Waking Up Early

You have probably seen countless Twitter posts, blog articles, and self-help books about how you need to wake up early to increase productivity. All the top CEOs wake up a 4 am to achieve greatness and you need to as well to change your life. This schedule might work well for most people, however, I fully believe this does not work well for Developers. The main reason is because of the type of tasks to be accomplished.

Deep tasks vs Shallow tasks are the classifications that I’m going to use for different types of tasks. Shallow tasks are those that you can start and stop quickly without a massive amount of mental spin-up time. These tasks could be writing an email, expense reporting, researching blog topics, or app ideas. Deep tasks are those that are built on much more open-ended specs, that require a longer time to spin up the mental construction of the problem, and can’t be quickly paused and reset without detriment to the productivity or quality of the solution.

I tried the rise at 4 a.m. schedule for about 2 months. I found that I had a hard time waking up, and getting into the correct mindset to program. I was able to accomplish a lot of shallow water tasks, but no deep dives. Things such as answering email, brainstorming ideas for my blog or side projects, came easy but entering into a flow state to do a deep dive on a code problem or feature, was extremely difficult. I’m unsure if it was the grogginess of the morning or the knowledge that I only had a few hours before I had to pause and go help get my kids around for breakfast and daycare. I have recently switched my schedule around, allowing my free time for side projects, or side work to be from like 8 pm till whenever I’m tired.

Designating a large chunk of time, knowing everyone in the house is asleep and I can freely focus on the task at hand without interruptions is so important. I also find that achieving flow is monumentally easier in the evenings. Early in the morning, I find my brain is running a mile a minute, thinking about all the things I need to do today, making sure that I’m aware of the time so I’m not late for any of my time-blocked events. In the evening, I am tired from the day and find my brain can utilize its remaining energy to better hyper-focus on a single task or problem rather than being overwhelmed by the countless different things to think about. Entering flow state is ideal for when attempting to achieve deep dive tasks.

So I say don’t buy into the marketing hype of waking up early, do what works best for you, with regards to your natural circadian tendencies, your lifestyle schedule, and experimentation. Find where you can block out the most time to achieve your flow states! I would love to know how you find your own flow states, and where you find yourself most productive?

Book Review: Being Geek

A very interesting blog post turned book written by Michael Lopp more commonly known by his online persona Rands. Rands writes a fairly popular blog called Rands In Repose. His blog covers advice and stories about life, work, and life in technical work.

The content of this book is a series of stories that are easy to read and digest. The content is concise, with a lesson to be had in each chapter. The book covers scenarios across the entire timeline of someone in the technical field. Rands covers things such as finding a job and the interview process managing large teams and architecting projects

Due to the book being a compilation of blog posts it’s very easy to pick up and read a chapter or two, or even skip over ones that don’t fully apply to you. Overall I think this book is super easy to read and has quite a lot of excellent stories with lessons. These lessons can be taken into our professional day to day, to hopefully improve our lives.

Book Review: The Pragmatic Programmer

The Pragmatic Programmer gives true insight into what it means to be a Software Developer with the passion of an artisan. One who strives for improvement in the craft to make things better and more efficient not just for the pursuit of money, but for the sake of doing good work. This book provides an overview of all the different concepts, tools, and approaches to a software solution. I had a friend who said he imagined what I do to be out of the movie Swordfish. In reality, I’m no Hugh Jackman and we don’t spend our time typing at the speed of sound in an abandoned warehouse. Writing code is likely only a small portion of our job. We spend much more time, reading, conceptualizing, and breaking large problems into smaller more achievable ones.

What My friends think I do.

There are a lot of useful concepts in this book, instead of diving into detail I will give you a list, and a strong suggestion to read this book!

  • Always Be Learning and Improving
  • Avoid Over Engineering and Premature Optimization
  • Don’t Repeat Yourself (DRY)
  • Design Code that can be easily changed, Decoupled, Single Responsibility, and Readable
  • Mindset is as important as knowledge.
  • Own your mistakes, Don’t make excuses make solutions.
  • Unit tests are important, but Avoid Over-Testing
  • Version Control Everything!
  • Developers are people, not just a tool/resources.
  • Slice problems down to smaller more achievable chunks
  • Refactor when needed, No broken windows!
  • Think before speaking / hitting enter.

This book provides a great overview and insight on everyday software developer life, while not being overly long-winded. The topics covered in this book can be so valuable not only to new developers who need to learn about these cornerstone subjects but to existing developers to be reminded of the goal in which we strive towards. The book reads like a conversation of a wise developer bestowing all the wisdom tidbits he has gained over the years and finds worthy to pass on to the next generation.

I would say this book is easily a must-read for any developer at least once in your life, the topics are broad, easy to read, and invaluable for your journey towards mastery. Happy Coding Everyone!

Host a Free Static Website in 5 minutes with Github Pages

Github allows for the hosting of static Html sites for users, and organizations. This can be super valuable for developer starting off who wants to do something simple like host a personal resume website or a technical blog without the overhead costs.

The first version of this blog was actually hosted on Github pages when I started it fresh out of college. I used a combination of Jekyll, Html and Css. My posts were generated with a custom Rake task, and edited in Vim.

You can use a Github site for your personal account however I already have so I’ll be creating a new organization for this example. Make sure you are logged into Github and create a new organization by going to this url https://github.com/organizations/plan.

It should look something like this:

Create New Organization

Create a new public repo underneath that organization and name it <name>.github.io. Replace name with either your user name or the org’s name depending on your situation. Make sure that the name is spelled correctly and that the visibility of the project is Public.

Create the new Repository, Ensure it’s public, and named correctly

Next clone the repository onto your machine and create an index.html file.

git clone git@github.com:<name>/<name>.github.io.git
cd <name>.github.io
touch index.html

Open your index.html and add some content. Here is my example content:

<h1> P3rishable Blog </h1>

<h3> Loads of content </h3>

<p> Make sure to like and share </p>

Commit and push up to Github:

git add . 
git commit -m "initial commit"
git push -u origin main

Next we will go to settings and open the pages section. In here you will set the source branch to main and save. This means any time you commit to main, Github will automagically deploy out your changes. You can also find the url to the hosted site on this page as well as the section for making it a custom domain.

Repository Settings -> Pages

Then if we access our site through the provided link https://p3rishable-blog.github.io/ on the settings page. We will see the following content rendered:

You can also use themes provided by Github or even use a secondary tool like Jekyll to create a static website. I focused on raw Html and Css because I think that is more useful when designing a unique looking site that stands out. You can see an example of my personal resume I have hosted on GitHub pages, with a custom url. https://www.alexmyers.net/

Book Review: Patterns of Enterprise Application Architecture

This book by Martin Fowler and assorted others, was published in 2002, but still has content that is still applicable today. It’s a very slow and heavy read, however it is super interesting to see what influenced many of the frameworks that we use today.

This book goes over a collection of Enterprise application patterns that have been vetted in production environments. They are broken into different classifications: Layering, Concurrency, Session Management and Base Patterns. He then goes on to explain the pattern with diagrams, hierarchy and schema examples. Then ends each section with code examples and the pros and cons of each.

If you want more detailed information about the different patterns of enterprise application architecture, feel free to take a look at Martin Fowler’s website. https://www.martinfowler.com/eaaCatalog/

I think this book is a great tome of wisdom, however it needs an upgrade to match up to current design patterns. It was really valuable to see the patterns used at the time when some of our favorite frameworks were built, ie Rails, and .Net. This book is a great foundation for Architects and Engineers who are designing a service or want to learn more about patterns, however not all modern patterns are included at this point.

Why Software Developers Should Practice Meditation

Software development is one of the most stressful jobs in the world. The hours can be long, the work is often monotonous, and the deadlines are always looming. It’s no surprise that studies show software developers have among the highest rates of depression and burnout of any profession. The best way for software developers to cope with stress isn’t a vacation or a stiff drink at the end of the day. It’s meditation. Meditation is something you can do every day to help you stay calm, focused, and productive during your working hours.

Meditation is the practice of calming your mind and focusing on one thing. It is different from mindfulness, which involves being aware of what’s happening in the present moment without judging it. One of the main reasons why meditation is beneficial to your mental health is that it helps you to de-stress. When you’re feeling overwhelmed or anxious, meditation can be a great way to focus on something else and let go of negative thoughts. This may not seem like a big deal at first glance, but over time, meditation can help you to relax more quickly. This can be especially helpful if you often find yourself stressed out in certain situations, such as trying to fix a production-breaking bug or an AWS outage.

Meditation is a technique that you can use to increase your productivity. If you’re a software developer, you know that finding “Flow” state, that magical spot where everything fades away except for your editor and the code. After building a consistent meditation habit, you will find that it becomes easier for you to concentrate on a task for longer periods of time and be more productive.

Starting a meditation practice can help you improve your focus and concentration. That’s because meditation involves training your attention on one thing for long periods of time. This trains the mind to block out distractions that could otherwise pull your attention away from the task at hand. It also trains your concentration so that you can focus on the present moment instead of being distracted by thoughts about the past or future.

When you’re able to spend long periods of time in focused concentration, you’ll find it easier to accomplish even difficult tasks. Meditating regularly will make you better at writing code, designing products or working on any other challenging task that requires prolonged focus.

My main point is that anyone can benefit from meditation, regardless of what kinds of work or creative habits they have. Software developers are no different in this regard. If you’re a software developer, then I hope you’ll consider giving meditation a try, even if it seems outside your wheelhouse or a little crunchy. The benefits to the mind and body are simply too great to pass up. Be sure to let me know how your meditation practice works out, or if you have any questions about where to start.

Book Review: Drive – Daniel H. Pink

Most of what we know about motivation is wrong. Dan Pink dives into what it is that truly motivates us and how motivation has changed over the years. He states that there are two types of motivation: Intrinsic and Extrinsic. Intrinsic motivation is the behavior that drives us internally, such as happiness, personal fulfillment and meaning. Extrinsic motivation is driven by external factors, such as money, recognition, or other materialistic rewards.

Intrinsic Motivation has three parts: Autonomy, Mastery and Purpose. Autonomy is control over your life, your work, and how you accomplish different tasks in your life. Mastery is the ever growing pursuit of knowledge in your craft, the challenge set forth by oneself to constantly improve and be the best. Purpose is the desire to do something that actually matters and might leave a positive impact in the world.

Dan then goes on to explain how the newer age motivation what he called Motivation 2.0 is no longer extrinsically driven after a certain point. People are more likely to take lower positions or less income in order to have more control over their life. Have time flexibility to be with family, to be more in control of their work and to work on projects that actually matter to them.

Overall the book was an interesting read into how the new wave of professionals will be motivated in the workforce and how they will put more value on intrinsic aspects of a job than just a high salary. People want to make a difference, they want to feel like what they do matters, and that they themselves matter. It is a good idea to do some introspection. Does your job make you happy, do you feel like you matter, and do you think you are making a positive impact in your workplace or your world.

This was my first book in my 2022 reading list. If you want to see what else is on my list feel free to check out that blog post: https://blog.p3rishable.com/2021/12/27/10-rule-my-reading-list-for-2022/