Book Review: Chop Wood Carry Water

I recently read the book “Chop Wood Carry Water” by Joshua Medcalf and would like to share my impressions of it because I think it will… it already started to change my mindset and life. It is very difficult to describe in a few sentences what this book is, so I decided to describe a little from my observations — also to consolidate knowledge for myself. It is a story about a man who wanted to become an archer, who went a long way full of important life lessons — all of which changed him a lot. This book is divided into many small chapters: all are connected, but each is also a bit separate story with another lesson, moral. Reading this book is wonderfully comfortable, because chapters are small enough to find even a few minutes every day to immerse yourself in reading and then in reflection.

Continue reading “Book Review: Chop Wood Carry Water”

Stoic self-review: two months later


At the end of last year, I became interested in Stoic philosophy and found something in it that attracted me a lot – above all, the values it follows. In all humility: stoicism is not an end to be achieved in itself, it is a process, it is a path in which one strives for some form of perfection. I still have a long way to go, or to put it more accurately, this road will never end.

Continue reading “Stoic self-review: two months later”

Why and how you should update your technology stack

Technology Stack

Technology stack is often discussed during planning new projects or during recruitment process, but is often overlooked when it comes to dedicating time and resources to updates – and it is huge mistake, because the consequences can be really serious. I would like to present the reasons why it is worth taking care of the current technology stack in a company that creates and develops software. I would also like to show how the necessary changes can be put into practice. If I can convince even just one person – it will be a success and will contribute to better work of many people, as well as higher quality of the product.

Why technology stack updates are important

Security and clients security

The most important thing is security. Outdated technology stack means vulnerabilities – a lot of them. It is normal, software has gaps, security issues and other problems, nothing is perfect, and it is not possible to create complex applications without issues. But one thing is to know about that, and second to react properly: if we will just ignore this… we will pay a lot. Our clients will be also in danger, so it is crucial not to forget about security. One outdated library can be like an open gate in an ancient city: it does not matter how strong walls you have, because attackers can use just this one gate to break all security stuff.

Even if it is related to internal-only systems, outdated tech stack can be a problem – imagine situation, when someone tries to steal some info from company, or gap in main security features will allow to access internal systems. System or human fault, it does not matter, because the effect will be the same: a lot of issues, even including total destruction of the company due to loss of customer confidence. Would you trust the company yourself if you knew it didn’t care about updates and your valuable information was being processed by outdated systems?

Tech Debt

The tech stack a company uses can also have a significant impact on its technical debt. Technical debt refers to the cost of maintaining and updating older code and systems that are no longer optimal – and for developers, it can be a real nightmare. As technology advances, it’s common for companies to accumulate technical debt as they struggle to keep up with the latest trends and tools.

By upgrading their tech stack, companies can reduce technical debt and ensure that their systems remain up-to-date and efficient. For example, a company that switches to a new programming language or framework can often see significant improvements in their code quality and maintainability, which can reduce the need for ongoing maintenance and updates. Windows has millions of code lines in C, but last time Microsoft decided to move some critical part to Rust. Why? To avoid memory issues, they often cause security problems and controlling that aspect on C or C++ is much harder.

On the other hand, a company that sticks with an outdated tech stack can quickly find themselves buried in technical debt. As their systems become more difficult to maintain and update, their overall productivity can suffer, leading to longer development cycles and slower time-to-market. AGILE? Yes, it’s still possible, but much harder if you need to fight with tech debt.

“It’s not enough to be up to date, you have to be up to tomorrow.”

David Ben-Gurion

Performance & costs

Please do not forget about performance. Why is it important? Lower performance can be a problem on the client side, especially if we talk about classic desktop applications, but right now we have more and more services in the cloud. If we offer backend on our side, within our infrastructure level, every bottleneck will affect not only clients, but also our total costs. Outdated tech stack can require additional machines, additional traffic and of course, additional maintenance time. All of these items mean more money we will spend to make the service available.

Up to date tech stack can resolve many performance issues, because new versions usually provide fixes and improvements – usually, because sometimes updates generate regressions, also moving to additional abstractions layers will add some impact, but in long-term perspective, it will improve stability. If the company will require outsource maintenance of some service, it will be also easier and cheaper if it uses up to date tech stack. Working with old systems may be very difficult and good example is a process of removing Windows XP and then Windows 7 support: a lot of companies decided to use extended long term versions and continue that even EOF – in this situation, migration to new option can be even more expensive.

Easier to hire better employees

Technology is constantly evolving, and companies that fail to keep up with the latest advancements risk losing out on top talent in the recruitment process. Developers are naturally drawn to the latest and greatest tools and technologies, as they are often faster, more efficient, and more flexible than older ones. By upgrading their tech stack, companies can not only improve their overall productivity but also make themselves more attractive to potential hires.

In the highly competitive tech industry, developers are constantly on the lookout for new and exciting opportunities. By offering a cutting-edge tech stack, companies can stand out from their competitors and appeal to the best and brightest in the industry. This can be especially important when it comes to hiring top-tier developers who have their pick of job offers. By demonstrating a commitment to staying ahead of the curve, companies can position themselves as leaders in their field and attract the most talented candidates.

In addition to attracting top talent, upgrading your tech stack can also help to retain existing employees. Developers are more likely to stay with a company that uses modern, up-to-date tools and technologies, as they want to work with the latest and greatest resources available. By investing in tech stack, you can show your team that you value their skills and are committed to helping them succeed. This can lead to a more engaged and motivated workforce, which in turn can drive better results and improve your overall bottom line.

No zombie projects

The last but not the least. If company takes care about upgraded, there are no zombie projects on their flow. Zombie project is a type of project, when we planned something, added to our backlog, but there was always something more important… It is like a zombie: it is dead, but can always move, hit us and generate a lot of issues when we will not have any time to fix them. Outdated, but still working software is a natural candidate to be zombie. For developers, it can be difficult to argue that updates are necessary, especially if company is under pressure and must deliver a lot of new functional changes.

How to update the technology stack

Monitor upgrades & vulnerabilities

First step to handle outdated tech stack is to have proper knowledge about that – it is required to monitor used libraries, new versions and important upgrades. Some tools like npm, yarn or composer offers very easy way to get all info about possible upgrades. Maybe not all of them will be possible to do at the same time, the knowledge about gaps is the most important item.

Plan, allocate time

When you have information about all outdated solutions, there is a time to plan next actions: check dependencies, check what should be changed to make codebase compatible with new solutions, plan all tasks. An important step is to define clear deadlines for these tasks. If there is no such information, these upgrades will be transferred into zombie items and will make themselves known at the least expected moment as mentioned in paragraphs above.

Implement upgrades

Finally, it is time to transfer goals into reality. It may be time consuming, but remember, it is worth it. Make backups, if change can break important systems, make that in iterations i.e., replace old solutions step by step, use a lot of internal, and also A/B tests on the users’ side.

Repeat & automate

The most important thing: doing that once will not help us. It should be part of the standard process; company should have clear updates policy to be proactive and avoid issues on eleventh hour.

There will be never the best time

I’m writing that on Friday evening, day before my second 100 km ultramarathon. Decided to write that because… yeah, I have some thoughts. It is because of weather and my general impressions: many things should be different, especially mentioned weather – according to forecasts from two, days before, there should be a bit cloudy, but not difficult day. Unfortunately, there was a rain: two hours with a lot of rain and there is a lot of mud around, so looks like tomorrow I will have a bit more demanding situation.

But not only weather is important. It is also because of my condition and many other factors. I trained before this second ultramarathon, but there was no opportunity to train in the mountains – or I’ve just forgot about that. Second item is about shoes. I bought Mizuno Mujin few months ago, for this and one more event, but unfortunately, had a lot of blisters with them (strange, because did not have such issues with other Mizuno shoes). In result, I bought new shoes… with zero drop… one week before ultramarathon. And then ran with them three times, overall, something over 40 kilometers – no issues with blisters, but that zero drop and different structure… ouch, it was a painful experience. Result? I decided to use my older Mizuno Daichi. Maybe not perfect, but I trust them, and they should be fine.

It is not a good time

Overall, it is not the best moment for that ultramarathon. I prepared everything yesterday and today, but still think, it was possible to prepare everything in the better way… and it is not true! The most important thing: in such situations, there will be never the best moment to do something. It is like a training. You can train a lot, every day, you can check all details, you can ensure all items one hundred times, but you will be never 100% confident, that everything will be fine. The same applies to most of thinks in our lives: you will be never prepared to be a parent, to look for a new job, to start your own business, to make a new course, to try something completely different.

You can give other example from my childhood – I played a lot of games, especially real time strategies like Age of Empires, Total Annihilation or Supreme Commander. I never felt enough prepared, so it was something like: first, build huge base, really HUGE and a lot of defensive structures to be sure, I’m prepared for enemy attacks. Then, build also HUGE army and finally, destroy enemy in something like gigantic rush. It was fine, but had always one big drawback: time, it required a lot of time for… completely unnecessary things. I decided to take a risk when I was let’s say 90%+ confident I will be successful.

Missed opportunities

There is nothing wrong with that, except opportunities: because of that, we can lose a lot of opportunities and time, be pursued by competitors. Of course, there is still valid sentence from Richard Branson: “business opportunities are like buses — there’s always another one coming along“, but we can think more about that: what if we will be just even a bit more aggressive? What if we will make next steps when we will be 80% confident? What if 70% or even 60%? Chances are still on our side, of course risk of failure is larger but… we need to fail to learn, to be better in the future. There is second, great quote, this time from Beniamin Franklin: “The man who does things makes many mistakes, but he never makes the biggest mistake of all—doing nothing.” and it’s true. More aggressive approach may be better for us.

Of course, I do not mean, we should not prepare. According to research, people take more risk if they think about profits and less if about losses – even if we talk about exactly the same chances (it’s only about how we how we will describe a given situation. We should have plan B, plan C and even plan D – try to be proactive, try to think about possible issue, but do not be blocked because of them, do not be paralyzed and do not take all the time to just think about “bad options”, because then, it will be not possible to focus on positive aspects and possible gains. We need to find a good balance, and it’s not “one time task”, it’s a process: we need to adjust our approach based on situation, our motivations and all external factors.

One more word

I’ve completed this post after mentioned ultramarathon. Everything was… fine. My result was three hours better (!) than last year at my first ultramarathon, I felt fine and probably it was possible to achieve even better time. Of course, I was tired, but everything was goood, shoes were fine, I tested some new nutrition aspects and they worked perfectly. Of course, there are some items to improve, but it’s normal. This week I have another ultra: longer, more difficult because a lot of ascents and I’m not sure I will be able to finish that… but want to try and check myself again. Looks like it should be possible, it’s close to my borders and it means, it’s great opportunity to make a progress, even if I will fail. Only three weeks between two ultras, it’s not enough to rest, to prepare but, how to say that… no risk, no fun?

Exploring sleep states in Windows

Microsoft Windows has changed considerably in latest years, everything because of changes on devices: we use smaller, more portable computers, we often want more battery life, but we do not want to lose performance or quick operational mode. If we add to these additional changes related to security, everything will become even more complicated and it is the current state of power settings in Windows: they are complex, some are hidden, some are hard to understand, some generate many issues.

Continue reading “Exploring sleep states in Windows”