Home » Productivity

Category: Productivity

Still not using Log Files in your app?

Have you ever had to contact support for a web app or a plugin to fix a problem, and the first thing they ask is for full access to your web server so they can “debug” the issue? 

This request frustrates me to no end. 

It is unprofessional, and it is lazy. 

The reason support asks for this is so they can run tests and inspect the results on your LIVE server. If that makes you nervous, it should! How can you know that they will not accidentally mess with your customers’ data? Not to mention all the privacy issues that crop up as soon as you hand your keys to a third party with no control. 

A proper way to deal with providing support for your app or your plugin is to add logs—a log file journals the activity and the data passing through your code. Inspecting a good log file will almost always let you know what the problem is and where the problem is. When a customer calls you for support, you only need to ask for the log files, not the keys to the server. 

In my experience, a good log file creates a breadcrumb trail that documents the data flow and the branching decisions in your code. Ideally, inspecting the log file alongside your code allows you to precisely follow along and determine what was wrong, without even having to run any code. 

A common mistake is to be unnecessarily verbose while at the same time not documenting the branching decisions. Silently discarded errors and exceptions are the usual pitfalls, and close second are if/else branches where only one of them leaves in a mark in the log. 

Security and Privacy

Now that you understand why log files are a must, especially in a client-server situation (like all the web applications), you need to be careful not to store sensitive data into the log file. Don’t store passwords or credit card numbers, and unless absolutely necessary, do not store emails. 

If sensitive data is required for you to be able to rebuild the data flow, make that available under a specific “log level” that is only activated on request. And in some cases, the entire log system can be activated only when trying to debug a problem. With this approach, however, you lose historical data that you need to fix the problem.

Always provide a way for an admin to flush the logs. 

Rolling Over

I am an overly enthusiastic user of log files. Simply because they work, and they speed up the process of solving problems. But there is a mistake that I kept doing for far too long. That mistake was no automatic rolling of the log files. What that meant is that the logs grew and grew until they would eat up all the allocated disk space. 

Oopsy! 

When using log files, decide when a log entry is too old and have an automated mechanism to remove those logs. Rolling the log files once a month (log1, log2, log3, etc.) and removing the very old files is a useful approach. 

If you don’t currently use log files, what is your strategy to support and debug your application while it is running on the customer’s LIVE server? I hope you will not say: “get root access and hack away until I find the bug” 🙂

Staying on top of your email. One account to rule them all!

Why yet another email management article? 

I am writing this article because, in my work, I have met many people who still struggle with managing their emails, and I can suggest a reasonably simple solution. 

The problem

Online communication still requires an email address. From making purchases to setting up a subscription and staying in touch with your audience, you will need to use email

The wrong solution for this is to use your personal account for all situations. The main reason people use this is that it is convenient. There is one account to check, one password to remember, one email client, to learn to use. It is hard to argue against these advantages. But there are serious drawbacks as well. 

  1. You expose your personal email to spammers. The logic is quite simple: the more places you use an email address, the more likely that some spammers will find it. 
  2. It also becomes harder to keep track of email and categorize it based on purpose: subscriptions, business, personal, marketing, etc. Everything piles up in one big inbox. 
  3. There are some privacy concerns. Using the same email everywhere allows data tracking algorithms to follow you around and to infer some usage patterns that you may not want to be exposed. But even more fundamental than that, you may want to avoid online stackers and trolls by being very careful with whom you share your personal email. 

A better solution is to use different emails for different purposes. It is keeping things separate. While this solves all of the problems above, it creates a big hassle with having to check multiple email accounts, managing various passwords, and using different email clients. 

The Best of Both Worlds

If you make good use of auto-forwarders and filters, you can have the best of both solutions. 

With auto-forwarders, you collect all of the emails into one central account. (For advanced users I recommend POP3 pooling instead, as it is better when handling SPAM.) The best way to create forwarders is to use the “Forwarders” feature for your hosting provider or email provider.

The second part is to use filters into your main account, you categorize, label and organize the incoming email based on the email address it was actually sent to. E.g., email that was forwarded from the business email goes into the business folder, emails from the customer care address will go into a customer care folder, and so on. 

The way you choose to organize your inbox is up to you, but you now have the power to do so because even though all email arrives in your main inbox, you know where it came from. 

Now that incoming email is sorted out, how about outgoing? 

Most email services allow you to configure “aliases” that will hide your main account email. In effect, this will enable you to “Send email As…” The power of this approach is that you can also send all of your emails from your favorite client, as long as you use the proper “Send Email As…” when you need to communicate from a different email account. 

The Short Recipe

1. Create different emails for different purposes

2. Setup auto-forwards to collect all the email into your main account

3. Use Aliases/Identities/Send As features to send email from the main account but “as if” from a different account

4. Use filters in your main account to organize the incoming email

The Discipline

For this to work, you need to be disciplined and follow this process. If you are in a rush, you may be tempted to use your main account when someone asks for your email. It is best to have a “disposable” account on hand for this situation. An account that is already configured. This way, you will avoid the temptation to share your main email account because you can’t be bothered to set up a new email.

What other strategies do you use to keep spam out of your inbox and organize your email accounts? 

In a competitive world, adversity is your ally

I like to be comfortable. I like instant gratification and home deliveries. I like automation that makes my life easier.

But what is all this ease for? What will I do with it? With the extra time and the extra energy?

If I am smart, I will do something hard to do.

Leaning into comfort when it comes to your personal life may be a good idea, but when it comes to business, to creating value for your audience, all the low hanging fruit is gone. All that is left are the hard questions, the tough problems that everyone else shies away from.

You can look at this and conclude that “it is too hard!” or instead, you can conclude: “This is an opportunity to serve in a place with a big need and little to no competition.”

“If one can do it, you can do it, if no one can do it, you must do it” – Shajjath Aleem

There is something to be said about a problem that is too big. That is also a trap as it lets you off the hook. If the problem is so big, nobody really expected you to keep your promise and solve it. It is just another way to procrastinate.

Look at your resources, consider your will power, your energy, and your passion and choose a hard problem that you can actually solve.

Credit: Seth Godin – The Dip

Just Quit!

Or better yet, don’t even start!

Quitting has a bad reputation, but it can be one of the best decisions you can make. 

As children, and later as students, we were often being told to “not be lazy”, and people who are busy or hard-working are applauded. 

But this advice is flawed in a subtle but dramatic way. Busy work is not the same as focused work. It is entirely possible to be busy all day and not accomplishing anything of importance.

The way we were taught in school was in 50 minutes blocks of something, and then we would be interrupted to do something else. 

The logic, they say, is that children get bored with one subject, and this switching adds diversity to the school day. But what it actually does is prevents anyone from going deep on any one topic. 

We carry this habit of “multi-tasking” into our adult life, and working on multiple projects at a time, doing a tiny bit of each day. 

I used to think that doing multi-tasking, I was productive, but I was just busy.

The Cost of Task Switching

This cost became extremely obvious to me when working on complex software projects. Just getting into the context of thinking where I left off would take up most of the hour, and then I’d have to switch to something else. My mind got an excellent workout, but my output grew at snail speed. 

Repeated task switching does not allow you to go deep and to build expertise. And it costs you time that will add up. It is a perfect recipe to become and stay average

The solution is to quit! Or better yet, don’t even start! 

If you don’t have it in you to finish this project or become the best at what you do, quit and choose something else. Don’t quit soon, quit now. Ignore the sunk costs: “but I’ve already invested so much in this!”

Quit, but quit strategically. Don’t become a serial quitter. Instead, quit so that you can focus on the projects you want and can finish. So you have the time and energy to become the best in the world at what you do. 

Quitting is especially important if you find yourself on a dead-end path. A dead-end path is different from a plateau. A plateau can be overcome; a dead-end cannot. Every second you stay on a dead-end path is a second wasted that could be spent on the other path, which would get you more fulfillment and personal growth. 

Dead-end paths could be a business that is now obsolete and dying, a job where you’ve become stuck in a rut, a project that is not moving forward despite your best efforts, or a relationship with no potential for growth. 

A quick aside about “The best in the world.”

Becoming the “best in the world” can feel very challenging until you realize that “the best in the world” does not mean “the best on the planet”. You get to choose and define your world, your market, the people you would like to delight, to be “the best” for. And you can grow from there. 

I will end with a quote from the book that inspired this article:

“Quit the wrong stuff.
Stick with the right stuff.
Have the guts to do one or the other.”

The Dip – by Seth Godin

My every day list of tools

Following is the list of tools I use to make my life easier. 

As a caveat, I am mostly active in the online software environment, so this list is heavily skewed in that direction.

1. Total Commander – geeky tool for file management. Features a “side by side” layout, making it easy to know what the source and what is the destination for what you are doing. Unlike the “copy/paste” concept in Windows Explorer. It has other neat features like super quick preview and edit capabilities.

2. FileZilla – Free FTP client – pretty basic – but it works. 

3. Sublime – my go-to text editor. It has replaced NotePad++ because it has a more polished UI that is easier on the eyes. It has syntax highlight and a neat feature that shows you what has changed in the document, even if you don’t use a versioning system. 

4. Photoshop – for my photo editing and image creation on Social Media and sometimes for personal photographs. 

5. Voice Metter Banana – virtual sound mixer for Windows. It allows me to record a call, increase the volume of the people on the call, and mix in music when needed

6. GoldWave – a sound editor, used mostly to clear noise from audio, or for trimming. Sometimes I use Audacity – depending on what I am trying to do.

7. Grammarly – AI-powered spell checker to make sure my writing is not filled with typos and grammar issues.

8. Slack – manage project communications

9. Evernote – taking notes, research, learning, todo list. Its beauty is that it syncs on all of my devices, has tags, can search text into an image, and is fast!

10. Zoho Docs – alternative to Google Docs – online solution for spreadsheets and writing documents

11. Asana – for project management 

12. Putty – SSH client for windows. Used for server management.

13. rsync – backup utility for my websites – creates versioned backups fast.

14. PhpStorm – long time favorite Php IDE – I like everything from JetBrains. They’re the best when it comes to creating software developer tools 🙂

14. ManyCam – virtual camera for Zoom calls – used to add titles, color correct my image, add filters and looks as PRO as possible 

15. Cmder – console for Windows (replacement for cmd) – mainly because it supports colors, making debugging console applications much easier. It also uses much cleaner fonts. Not sure when Windows will get a decent default console app.

16. Fastmail – email provider that respects my privacy

17. ESET – internet security: antivirus, firewall, sandboxing, and all that jazz. I’ve been using this for ten years now, and I am a happy customer!

18. Duplicati – Windows space-efficient backup tool based on the Linux “duplicity” tool. It saved me one from a complete HDD failure. 

19. Dropbox – cloud storage and sharing among devices.

20. Git and GitHub – software versioning system.

21. Figma – wireframes, mockups, design.

22. Google Calendar – mostly for reminders and sometimes for planning ahead skill development. 

If you know better, faster, and more useful alternatives for these tools, let me know in the comments below. I am always looking to expand my arsenal! The categories I care about are productivity, software development, and design. 

What does the client want?

Some time ago…

Some time ago, the conversation with a potential client would be something along the lines of:

“How can I help you?”

“I want a website to sell my products.”

“OK, great, this is a price and you’ll have in a month.”

A month later…

I’d show her the site, and the reaction would be: “Well, this is not even close to what I had in mind…”

I had to change the game and ask more questions 🙂

“What colors do you like?”

“Red and blue.”

“Great, and font wise?”

“I want something elegant, precise!” 

“For images?”

“Oh, something joyful and warm…”

“Excellent! This is the price; you will have the site in a month”.

A month later…

I’d show her the site, and the feedback is: “This red is not red enough, and now I realize the red and blue are a bad combination! Can we try yellow instead of blue? And the font is too girly for what I have a mind. We are going to need new images as well. The top one is ugly, and the rest don’t match the brant at all.”

Oh, the frustration.

At some point, I’ve spent two weeks back and forth, trying to nail down the shade of blue. That was a waste of my time and the client’s time!

I had come to believe that the clients don’t know how to communicate (I had a much shorter description for this). I had resolved that I would never even discuss with someone who could not write a technical specification that we can agree on, and that I could deliver. 

This decision blocked many customers, but more importantly, blocked important learning. 

The Breakthrough 

I was watching a video from Chris Do. He’s a designer who also teaches business, and I admire his style. To me, it feels like he is talking to me specifically. The kind of decisions you need to make in design apply in software and for anyone who uses creativity to solve a problem. But I digress. 

Back to the video. 

He was taking questions from the audience, and someone asked: “How do you deal with clients who don’t know how to communicate what they want?” Ah! The golden questions! I had the same struggle. I perked up, waiting for the knowledge to be bestowed on me. 

Chris looked into the camera, and you could tell that the question was really testing his patience. Hm… And he said: “How many times do I have to tell you that the good-communication is on you! It is your responsibility to help your client articulate her problem and then discover if you can help her.”

All the pieces began to fall into place in my mind. I suddenly understood that in blaming the client, I was not only asking the wrong questions, but I was not developing a critical communication skill. 

In the present time…

When a client wants to work with me, they better be ready for a ton of questions :). As someone jokingly said, they need to feel like they’ve been to the shrink after the first discovery session. 

Here is how the conversation might look like:

“I want a site that can help me sell my products.”

“Sure, that is something that I specialize in, but out of curiosity, what problem are you trying to solve?”

“Well, I need to increase my revenue, obviously”

“OK, that makes sense. How do you know that having a website is the best way to solve this problem?”

“I don’t know… everybody does it… what other options are there?”

“I am glad you ask. Before I can answer that, I’d need to know more about your business. It’s OK if I ask you a few questions?”

“OK…”

“At the moment, how do you generate your revenue…”

And this would go on for a while. 

In the end, what I need to know is:

– what is the biggest problem that this customer is facing 

– how can I help them discover this problem if they don’t know it

– how can I help them articulate their underlying needs 

– in the end, are we a good fit? Can I help her with what she really needs? Can she afford me? Do we like each other well enough to work together for a few weeks or months? 

And by the end, the client would also need to know

– how do I work

– can she trust me

– what is my price range

– what kind of a solution can she expect

– is hiring me the right choice for her

In Conclusion

Make sure you correctly diagnose the problem before you prescribe a solution. If the solution you’re thinking of is not the right one, you need to find out as soon as possible, not at the end of the process.

If you found value in this article, let me know in the comments below or on Facebook. This feedback will help me understand what to focus on in the following posts. 

Go create the New Paradigm today!

Building ZAPs!

Since I recommended you build an API into your service that integrates with Zapier, I figured I might as well give it a try myself, and not just talk theory

I was shocked to finish the integration without having to write one single line of code

But I am getting ahead of myself. 

Part of my skill up plan is to take a deep dive into automation. What a better way to study than looking at what the masters are doing? Or, in this case: Zapier. 

I’ve fired up their tutorial and was getting ready to crank some code! 

I have integrated APIs before, and if the documentation was clear and with relevant examples, I could get the hang of it pretty quickly and then extend it easily. 

As I am progressing through the tutorial, it dawns on me that this integration will be created entirely online, in the Zapier UI, by answering some questions and filling forms! 

My mind was going: “it cannot be that simple! Each API provider has its own interface or authentication mechanism… you would have to write some adapter for that!” 

No, sir! Not so! 

If the APIs follow the standards when it comes to authentication and passing data around using JSON, then Zapier has you covered! 

You answer the questions, you fill out the forms as instructed… and you’re done! No code required! And since there is no code required, there is nearly zero chance of having a bug in your integration. How cool is that? 

Needless to say, I am impressed. And I got another confirmation of why following standards is a good idea. 

Not quite like building with Legos

Even though I did not write any code, it did not feel like building with Lego blocks. But more like solving a jigsaw puzzle. Because the APIs are very diverse, you need to spend some time to connect the right pieces in the correct order. But since everything is built via filling forms, you have validation available and tests. There is immediate feedback if what you are making is not working as you’d expect.

I did spend two hours getting the final step to work. I almost contacted Zapier’s support to inform them that their builder is broken, but in fact, the problem was with me :). 

I had a typo in one of the data fields, and the error message I was getting from the API I was using at the time was very misleading (apparently on purpose). So it took me two hours to find that typo in my configuration and get the Zap to work. Take away here: please make your error messages clear; it will save you time in the future!

Just as with finishing a complex puzzle, seeing the success message was so satisfying. 

Why all the fuss?

Building a Zapier integration is so simple and straight forward that I can easily see AI building integrations and ZAPs in the (very) near future. This means that if you decide to provide an API that can integrate with platforms like Zapier, your service may be used in ways you cannot even imagine. The pieces can be interconnected in infinite ways to create something new, exciting, and why not: disruptive!

Keep on creating the new paradigm. 

New Normal – Collaboration Tools – Trello

Trello – The playful and pretty way to manage a project

If you are a fan of using post-it notes to organize your projects, you will love this next tool!

This post is part of the “New Normal – Collaboration Tools” series, and we are going to look at Trello.

Trello is so simple that it can be explained with just the picture below:

The idea is to use cards, organized in lists, to keep track of what is going on in the project. And the most simple version is to have the three classic lists:

  • To do 
  • Working On In
  • Done 

As you have guessed, you choose a card from the “To Do” list and move it to “Working On It” and when you finish, you move the card to the “Done List.”

So why is this so powerful, and not just use sticky cards on a real board? 

This series is called “Collaboration” tools, so that is where the power is. The Trello boards can be shared with teams of people. Now everyone can see the lists and move the cards around. This way, you can easily coordinate. For example, two people cannot pick up the same card to start working on it. Everyone has a clear picture of the status of the project by looking at the board. 

And the goodies don’t stop here! 

Each card can have its own comments – keeping the discussion always linked to the correct context.

The cards can have checklists – those can be used in very creative ways. For example, you can fragment the work further in sub-tasks, you can have a list of prerequisites that you are waiting to be fulfilled, and so on.

And the cards also have attachments. Attachments allow you to link relevant files to the card so the team can easily find them and access them as needed.

You can assign the card to someone, and you can set a due date

The interface is very friendly, playful, and easy to grasp! But make no mistake, Trello is not a toy. If you have time to dig into it, you will discover that it is an amazingly powerful tool. 

How to choose between Trello and Asana? 

If you are just starting with project management online, go with Trello. The free tier will serve you well for a long time. Asana is more complex and not as easy to learn. The only reason I am using Asana over Trello is due to my own resistance to change :). 

Automation with Zapier

What do you value most? I hope that your answer is: “TIME.” 

Time is our most valuable resource because it is non-renewable. Wasted time is lost forever. And it could be argued that the reason we work so hard is to have enough resources. Resources that will allow us to spend more time doing the activities that we enjoy: activities like following your dreams, working on your business, spending more time with friends and family. 

I don’t know of any better time-saver in the online environment than automation.

Automation means to identify and formalize processes for the flows that make your business work and then use various tools to set them on “automatic.” This way, they can work even when you are not paying attention. It is like having an employee that is almost free and never sleeps or rests. 

In today’s world, the leading tool for automation online is Zapier

The idea behind Zapier is quite simple and yet profound because of the market they are speaking to. 

What happens is that in the online world of business, you have your website, your store, your payment gateway, customer engagement, webinar, emails, and so on. All these components need to talk to each other. What used to happen before, is that you, as the business owner would have to create and manually maintain this communication, usually based on email notifications you would get from various systems. 

The alternative was to hire someone to do it for you or hire a developer to write a custom program that would automate these processes. Both options could get pretty expensive.

There has been a shift in the past few years. Each of these services exposes an API. This API allows them to talk to each other in a clear and standardized way. With this option available, you would need somebody to integrate these APIs. To connect them in ways that make sense for your business. 

Here in comes Zapier! The beauty of it is that they have put together a platform that allows non-developers to visually express their processes and to connect all these components in a way that makes sense. This flow is testable (which is very important, you want to make sure that your automation works as intended), and you have analytics and an overview of what is happening.

There is a free tier for Zapier, but I want to get into the paid one because I think that is where the power is. You may shy away from paying them the monthly fee. So let’s explore that a bit. 

The way to think about choosing a paid plan is to make a business decision. Would paying Zapier a monthly free enough time and generate enough sales to cover for the costs and then some?

If you get their $20/mo plan, you need to only generate an extra $20/mo in sales for this option to make sense to you. But not only that. Also, consider the free time you now have to do something else, and how much you value that. Consider the money you would spend on a developer to set this up for you and then have it maintained. (By the way, I am not an affiliate for Zapier, I am just using them as an example to talk about automation)

In conclusion, we live in exciting times, where with a bit of patience and thinking through your processes, you can build your website and connect the required components with no need for a developer if you use a tool like Zapier. And this excites me because it enables even more people to express their creativity cost-effectively!

If you are reading this and you are a developer, then seriously consider exposing and API for your services and products and have them seamlessly integrate with Zapier. 

Using Visual Builders for your website

I used to hate visual builders!

They looked great on the demo page, but as soon as you would like to do something somewhat different and custom, you would end up fighting with all the constraints put in place.

Because of this issue, I would almost always design my pages from scratch in HTML code and CSS style. Oh, the power and flexibility!

In recent projects, I have been forced to use visual builders because the end client wanted to be able to update the design themselves later on. They insisted that it had to be easy, so I had to go the visual builder way.

What I have learned is that the builders have come a long way since I have first looked at them, and they offer great flexibility within the constraints of their design.

And the constraints are a good thing. It keeps your look consistent and makes it a breeze to create layouts for various screen sizes. That is always a big challenge when writing code from scratch without any design system in place that limits your choices but maximizes compatibility.

The Builder I like the most so far is the one that comes with DIVI, the WordPress theme. Once you get to know it, you can build exciting layouts pretty fast.

There is a problem I have with it, though. That is performance. And sometimes, the output code seems to be unnecessarily complicated, making the size of your page bigger than it needs to be.

So there is always a trade-off.

How do I choose between one or another?

For large projects, I prefer to create my custom template and design systems for the performance and flexibility benefits.

And for smaller projects, I will use DIVI or something similar to create the design faster and visually.

We go back to the saying: use the right tool for the job 🙂