Home » Business

Category: Business

Innovation is messy

A hard lesson I have learned recently. 

I like to be right. I like to be efficient. I like to do things the correct way the first time around. I would like to believe that my experience would allow me to do so. 

But some projects present an interesting problem. To understand the problem, let’s imagine we are the architects of a tall and spectacular building

We know how the building is supposed to look. We know what purpose it will serve and who will use it. With this information, we can start making our plans starting from the ground up. We design a solid foundation, and then we layer on top of that floor after floor until we finish. 

However, this is not innovation. Is following a well-established workflow where there are little to no unknowns. We can make good decisions about what materials to use where and a reasonable estimate about when the job will be done. We don’t expect many surprises along the way. 

But what if we have this idea to use a new material, and design this building to serve some innovative purpose that no one has done before. Now there is no way to lay down a solid foundation because you cannot answer the question: “solid for what?”. 

You may discover halfway through that most design decisions do not help you achieve your vision due to some unknown limitation that was invisible right until you got to this point. So you have to dynamite the whole thing, learn your lessons and try again. 

Large, innovative software projects are like that. The architecture you started with may have looked great in the beginning but ends up feeling very limiting when you suddenly realize you need to make a dramatic shift in your project, and your “foundation” does not allow for it. Tearing down a software project is free, compared to dynamiting a building, but you still won’t get your money back from all the work that you cannot use anymore. 

But not all is lost. Because in this process of trying and failing, you learn and you grow into your idea. You stumble into the things you didn’t know that you didn’t know. And drip by drip, you make the unknown, knowable. 

This “failing often” is a challenge for me to accept and work with because it feels wasteful. In hindsight, “I could have done better!”. But thinking like that is a trap, and it suffocates the very creativity required for innovation. You need to be ok with failing often. 

Now that we can agree that innovation is messy and it feels wasteful, what can we do about it? 

1. Don’t start with a big spectacular thing. Instead, try to come up with an MVP (minimum viable product) that you can build on (or next to) in the future. 

2. Budget for the messiness and the learning process. Make sure you have enough money to make the mistakes required to get the learning experience you need to bring your idea to life.

3. Aim for many small mistakes, so you don’t make one massive “end of game” mistake. This idea expands on (1) above. Move fast, but take small steps. This approach will make it easier to backtrack and change direction. Significant commitments are giant leaps forward that give you less flexibility to turn around. 

4. Don’t worry about optimization and edge cases in the beginning. If you do, you may end up doing tedious and lengthy work on a feature that may not even make it into the final product.

5. Try again tomorrow. Some days it may feel like you are getting nowhere, and this is all doomed to fail. That is normal. Take a break, go back to the original vision that got you excited and try again tomorrow. 

6. Be patient. You are playing the long game.

7. Once you have your MVP, you can start again and “do it right” this time. It will no longer be innovation because you have learned your lessons. Now is the time for the polished, optimized, and secured product. 

How do you deal with innovation in your projects?

SSO – Single Sign-On – One Ring to Rule them all!

I am sure you have noticed most of the software services today that require you have an account allow you to “Login with Google” or “Login with Facebook.”

That is very convenient for your potential users and customers as Facebook and Google are so ubiquitous. 

The process above is a form of Single Sign-On. The user logs in only once into Google and then uses that login to authenticate themselves into various other software services that accept Google as an “identity provider.” 

The term “identity provider” is what Google and Facebook do when they allow you to use their services to authenticate your users. 

I was reluctant to use an external identity provider before, because I had assumed that it would mean that you do not “own” your user base, but instead Google does, and they could cut access on a whim. But that is not the case. If you request and are granted access to the user email, you can still get in touch with them, even if Google or Facebook will refuse to do business with you anymore, for whatever reason. 

So it makes sense to add such a feature to your service because it will make it much easier to adopt. 

For larger companies that manage multiple applications and services, it is possible, and it makes sense to implement their own Identity Providers to create the Single Sign-On capability.

Potential Pitfalls

A big challenge that I found with using Identity Providers is “session management,” which means keeping track of the “logged in user.” For example, if the user logs out of Google and logs in with a different account, your application needs to be able to spot this and create a new session for the new account. Otherwise, you risk exposing private data to the wrong person.

The Technical Side

Implementing Identity Providers and consumers it is relatively easy now because they are standard, so you can find ready-made libraries that will make the connection a breeze. 

The libraries I have worked with that I can recommend are:

For Php Composer:

– The PHPLeague / OAuth2-Server 

– The PHPLeague / OAuth2-Client 

WordPress Client Plugin:

– OpenID Connect Generic Client (this required some modification as it was not implementing all the requirements out of the box.)

CakePHP and WordPress

I’m not too fond of WordPress and yet…

Most of the websites I have built are using WordPress.

The reason I am using it is simple: The final customer enjoys the ease of use that WordPress provides. It empowers them to maintain the content of the website and (to an extent) manage the website themselves.

WordPress is excellent for what it was built for: a blogging platform. As soon as you begin to “add on” to it and make it into a complex web-application, things break down in terms of performance, stability, and security. It pains me to see how every plugin is downloading its own set of libraries and code, creating an app, with-in an app, with-in an app.

This problem shows up because each plugin developer has to make sure that all the code they need is there, and they don’t know if you have it from other plugins. So the code base gets fatter and fatter with duplicate code, and the website gets slower and slower.

Maybe in the future, the core of WordPress will be re-written from scratch to address these issues and to have a shared library folder or use some dependency manager (like composer).

In contrast, for the more complex web applications, I have been using CakePHP. The reason: I love Cake, and I like PHP!

Joking aside, CakePHP is a framework that allows rapid application development using modern design and technologies. Because it is a framework and not a full app (like WordPress), there is much flexibility on how you want to do things, what libraries you want to use, how do you want to integrate it with the rest of the world, and so on. This approach makes for much cleaner logic and code and better performance.

The downside is two-fold:

First, the customer needs a tech person to maintain a CakePHP app. There are no simple “update everything” buttons.

Second, for better or worse, you lose the considerable plugin ecosystem that WordPress has to offer. And some plugins are super useful, like Yoast SEO.

The Best of Both Worlds

(no, this is not about the Star Trek episode)

What I have ended up doing in some cases is to have a CakePHP app developed alongside the WordPress app for the clients that agree to have me as their tech person. This setup allows them to use WordPress for more frequent and simple tasks and enables me to deploy the power of CakePHP to manage automation, monitoring, and reporting for their business. Win-win!

Case Study

For a big WordPress site where things needed not to break down, and that specific metrics are met every month, I have developed a custom CakePHP app to monitor the WordPress site. It would generate charts and analytics for sales, visits, engagement, and other metrics. It would issue alerts when needed and generate reports daily, and monthly that would make it easier to diagnose any potential problems.

Yes, everything could have been written in WordPress as a plugin, but that would have meant making a fat code base even fatter, and it would have linked the two very tightly. Having a separate application allows me to update them separately, and if one stops working, it does not upset the other. A side benefit that I got, later on, was that the same app could link into other WordPress (or Joomla!) powered website for aggregate data reporting.

If you have the skill or the resources to hire the skill, it may be worth considering creating your custom development in CakePHP instead of WordPress.

If you’re interested in the technical details, leave a comment, so I know to write about it.

Say No, so you can say Yes

My son was born two months ago. It feels like time got compressed. I used to be able to do so much and still have spare time.

But these days, I often find myself not able to finish doing what I set out to do. It often happens that I feel overwhelmed.

The new situation has forced me to look deeper at the concept of prioritizing your day.

A to-do list does not work.

Prioritizing is hard. It is hard because it is emotional work.

It is easy (and lazy) to say: everything on this list needs to be done today. It is hiding from the hard emotional work of prioritizing.

When you think about your priorities, you need to get clear with yourself about what is truly important for you. Where do you want to get, what do you want to accomplish, whom do you want to spend your time with.

You have to say “No” to many things on your list so you can say “Yes” to the most important one.

If I say “yes” to more computer time, I have to say “no” to more rest time, or I have to say “no” to more family time.

The truth is we all get 24 hours a day, and saying “yes” to everything is a trap. You are not being honest with yourself, and you are not brave enough to say “no” to distractions and to other “world emergencies” that have nothing to do with you.

When you work on a project, it is easy to want to do everything right from the start. From week one, if at all possible. But I have discovered that breaking down what I want to do in a list of priorities helps me ship the project faster and with the most impact. It also removes all the distractions I would hide behind. It shifts my thinking away from “what would be cool and pretty” towards “what has the most value and how can I deliver that most effectively”?

How about you? Does prioritizing come easy, or is it something that you avoid?

How much cheaper is an expensive freelancer?

There are two types of readers that this article is for.

1) you are already considering hiring a freelancer, but you are still on the fence about it, and you hope this information will help you decide.

2) you are a freelancer looking for a way to position yourself in front of potential clients.

The short answer to the question in the title is that if you had the time and the skill, you would do it yourself. It would save you money, and you would not have to deal with communication issues. 

But here you are. And this means that either you lack the skill, or more likely, you lack the time. If you had enough time, you could acquire the skill and deliver before the deadline. 

The right freelancer will save you both time and money. 

You will save time in two ways: you don’t have to wait until you build the skills, and you can do other work while the freelancer does theirs. 

Saving money is not always that obvious. I can best illustrate it with a story. 

A couple of years ago, someone reached to me to help them with their site. After the initial discussion, I estimated that the project would cost them around $3k. 

They respectfully told me that it was too much for what they wanted to do, and we parted ways friends.

Fast forward four or so years, and I hear again from this person. They were desperate now. They had spent over $15k hiring help, and their site was still not working. 

Paying $3k to someone you trust looked like a bargain right now. 

Part of it was my mistake for not knowing at the time how to explain the value they were getting. 

And this brings me to another point: the price of hiring a freelancer is not the same as the cost of hiring them. A lousy experience means you need to hire someone new. That means more money spent and more time lost having your work redone. A good experience means you get it right from the start, and you recoup the money quickly from your working website. So which experience ends up costing you more? And what if you consider the cost that is not financial. Like a stressful relationship vs. smooth sales. 

And of course, this begs the question: how do I know if this freelancer is the right one for me? Is expensive, necessarily better or cheap, necessarily bad? 

Let’s deal with cheap/expensive first. Indeed there is no guarantee that expensive means better or even the right choice. But let’s look from the viewpoint of risk. Why would a freelancer charge you less money than another? It could be for a variety of reasons:

  • they desperately need the job;
  • they are new on the market, so they need to earn trust and build experience;
  • they self-evaluate their own ability to deliver as lower than other freelancers;
  • they have turn-key solution ready for you, so their cost is nearly zero;

It is a gamble. They could be outstanding but out of work and needing a job right now. (But this would beg the question, if they are so good why do they have trouble finding work). Or they have a turn-key solution ready to deliver. The catch here is to make sure that this “ready-made” solution actually fits your custom needs, or you would be left trying to fit a round peg into a high-quality and cheap square hole. Can you afford to take this risk?

With a more expensive freelancer, they could be bluffing, but they could also invest in themselves and have better training and a better experience. They could deliver the work with higher quality, faster, and with a lower risk for having to redo it again with someone else. 

Now back to: “how do I know if this freelancer is the right one for me?” 

It comes down to trust. What have they done that they can show you to prove their experience? What have they created and put out? Who is talking about them? How did you find them? Has anyone you know recommended them? 

My argument is that if you trust them, if they come with recommendations, and if you can see past work from them that is in line with what you want to build, then it makes sense to pay a premium now and have the peace of mind that comes with lower risk.

Choose wisely. 🙂

What does it mean to add value to your customers?

“How can I add value?”

This is the question I write at the bottom of my daily planner almost every day. Why? Because I want to train my brain to think in those terms. Why? Because I hear this is the key to success.

I never managed to answer this question adequately. And I had the insight that I need to answer a different question first! And that is:

“What does it mean to add value to your customers?”

Looking at this question, I realized that my efforts have been selfish. I was concerned with “my success.” The reason I wanted to add value is that I become successful by doing so. 

This question forces me to face the fact that I don’t know what “value” means for my customers. Yes, I can make guesses, but I don’t truly know. 

So many times, I have been tempted and followed through with this idea: what I do is valuable to me, so it must be valuable customers too. And if they didn’t see the value, that was their loss! This approach has resulted in projects that are too complex or in features that I thought were cool, but the customers did not care about them. 

And this has happened because I never paused to ask: “what is valuable to my customer?”.

Value is very subjective, I have discovered. I don’t handle loss very well, so I have a reliable backup policy. But others are much more willing to start over again, so backup is not essential. 

I value aesthetics and elegant design. But most of my customers value ease of use and the ability to manage the website themselves. 

I also have discovered that I am biased. And my bias is not the same as my customer’s bias. 

The first step in discovering what it means to add value to my customer is to be humble enough to admit that I don’t know and that I need to have a discussion. In this discussion, I need to ask the customer what is valuable to them, and if required, to help them discover their values in that process. I also need to set my bias aside and truly understand where the other person is coming from. 

The second step is for me to determine if we are a good fit. Based on what I now know about my customer’s values, can I truly serve them in their best interest? And sometimes the answer is no. And in this case, I have to send them away. 

But there is a way to refuse to work with someone that is not selfish. You can still add value by making a recommendation and send them to a specific someone else (your competition), instead of simply turning them down. This way, interacting with you has still got them one step closer to solving their problem, and you have been generous and trustworthy enough to recommend another person for them to work with. You may have lost a client, but you have earned trust, and in today’s world, trust is precious. 

So how can I add value to my customers? It first starts with showing empathy and meeting them where they are at. And in some cases, it means saying “no” and pointing them in a different direction.

Credits: my viewpoint on marketing and adding value is shaped in great part by people like Chris Do, Seth Godin, and Blair Enns.

Are you thinking of creating a multi-language website?

Creating a multi-language site can be a challenge.

I have had the opportunity of doing a couple of those. I am not happy with either of the solutions, but there are a few things I’ve learned along the way.

If you have a newsletter or a store, your customers expect that the entire process is translated into their language. This translation process must also include support. Because not all the plugins or software has multi-language support, this can be difficult to achieve. 

You will have to choose between using subdomains for our other languages or prefix your URLs. 

https://fr.example.com/your-page.html
versus
https://example.com/
fr/your-page.html

I used to employ a prefix before, but using a subdomain, I find it gives more flexibility if, later, I want to separate the languages into different, independent websites. A subdomain also helps keep your home page link clean:

https://fr.example.com
instead of
https://example.com/fr/

Using subdomains also offers more in terms of performance optimization, if that is important for you. 

You need to consider that the effort to manage your website increases with each language. It is almost like every new language is a new site you have to worry about. Because of this, you need to consider carefully if it is worth the effort of having a multi-language setup. 

Let us look at an example

Let’s assume we have English and French as our languages. 

You have two options: 

1. Create two separate websites, one for each language.

2. Create one website, and use a translation plugin to create the translation website, on top of the main language website.

Two Separate Websites

A two-websites option gives you the most power and flexibility. And because the sites are separate, if you decide to give up on one of them or completely change direction, it will not affect the other. 

The downside is that all effort is duplicated: setting up, updating, maintenance, backups, and on top of that is keeping the websites in sync manually.

One Website – Two Languages

This is the option I have used most. You set up the website in the primary language. Then you install a translation plugin (like PolyLang), and you translate the site into the other language in small increments. The upside and downsides are flipped compared to the first option. 

There is considerably less effort with updating, maintenance, and backups. The two languages are kept in sync automatically. But because the two languages are tightly connected, they are a mirror of each other. So if something goes wrong with one, it will affect the other. This option also has a performance impact; for every page load, a translation decision has to be made to display the content in the correct language. 

The ideal solution

In my view, the ideal solution is two have two websites. Each one is maintained by a person who is fully responsible for their language: including support, customer care, updates, and so on. English would be the master copy, and the French language would mirror that as closely as possible. But the French website also has the flexibility of creating content or an experience that is much more specific to the French audience. The obvious downside here is that you have to have double the people who take care of the site, and that could add a lot of costs.

Potential Pitfalls to consider

Newsletter signup experience needs to be translated.

All the email campaigns need to have content in all the languages you are offering unless you choose to ignore on purpose those who don’t use the primary language of the site.

You need someone on staff to be able to respond to support requests in all the languages you offer.

Caching and SEO plugins don’t always work well with a translation plugin.

There are some technical aspects of how the webpages are rendered in a multi-language environment. Things like configuring the right language code, encoding, and locale options become important. 

Timezone is another thing to take into account. 

If you use a store, it may make sense to have the local currency for each of the languages you plan to use. This feature adds a layer of complexity when setting up the store and in connecting with your payment gateway. 

If or when you plan to migrate to a different framework for your website, multi-language content becomes very difficult to move and work correctly, especially when using a translation plugin to keep the pages in sync.

Why do I write?

I am writing for both selfish reasons and generous reasons.

The selfish reason is that as I write, you will perceive me as an expert: someone who knows what he is talking about. And when you need help with your online business, you will feel confident to ask me.

Another selfish aspect is simply training. When I sit down to write, I have to put my thoughts in order. I make a mental plan; I consider what the message that I want to share is, why would you care, and how can I make it interesting. Writing gives me clarity, and it also forces me to consider the value of my processes.

The generous reason for writing is to teach. My aim with each post is for you to feel you have learned something useful that you can apply in your online business. Reading this post, you may feel inspired to write too. And a tip I have is: don’t write about you. Instead, write for your customers or the people you want to serve.

I will end this with a thank you to my brother. He is the one who first encouraged me to write and got me over: “my writing has no value” mindset.

The criteria I use when choosing a web hosting company

When choosing your web hosting company, it is useful to have your list of criteria well defined. 

You need to have this list before you start shopping around, or else you will be sold features you don’t need and, worse, missing business-critical ones. 

Below are my prioritized list and some notes. Keep in mind that as a developer, I prioritize flexibility over ease-of-use. 

  1. Enough disk space for what the website needs. When starting, 20GB+ will work.
  2. MySQL database – I don’t think there is any hosting without this, but make sure you have it.
  3. Speed – this usually translates into have SSD drives on the server.
  4. SSH access – I need this for automated backups and for the flexibility to add automatic maintenance script on the server. 
  5. Ability to send email – be careful with this; some hosting do give you this feature on paper, but it is not actually working because the email gets discarded on its way out, and there is no back reporting on it. If you have an online store and you need to send out order confirmations, lost email can be very frustrating to you and your customers. 
  6. cPanel access – I need this as a developer because I manage many websites, across many servers, and it is faster for me to work with a familiar piece of software. When cPanel is an option, I know I can set-up things quickly, and there are also plenty of diagnosing tools. Even if you are not a developer, you will likely hire one at some point, and it will be easier for them to help you with cPanel access. There is one more reason to have cPanel. And that is, you can quickly move to another hosting company, by simply exporting your cPanel data from the current hosting and importing it on the new one. Without this option, moving to a new hosting company can be troublesome and time costly. 
  7. Let’s Encrypt feature for automatic HTTPS – this important to have, or you will need to pay additional hundreds of dollars for it. 
  8. On-demand backups; You need to be able to do a full account backup at any time and do this for free. Backups are a form of insurance, don’t underestimate them. 
  9. Excellent support – this is close to the last option because if I have the ones above, I can usually sort out any issues by myself. But you may want this much higher on your list.
  10. Unlimited (or alt least 3) subdomains. Subdomains can be used for testing something out of sight from the main website. They can be used for multi-language websites. For memberships set-up. And in advanced cases for performance reasons. So make sure you can have some.
  11. And finally, there is price. I’ve learned my lesson well: cheap web hosting will cost you more in the long run, in lost business, frustration, and customer satisfaction.

If you plan to use a WordPress site, the hosting I am recommending right now is SiteGround. It meets my criteria as a developer, but it is also friendly enough to recommend it to non-developers, because of their fantastic support. 

How do you find customers?

I know this is a burning question in the minds of many entrepreneurs and freelancers. 

I don’t have a “how-to” guide that will guarantee your success, but I would like to share my perspective because it is not just about getting more business, but also about creating a better world for everyone :). I also admit that what I about to share does not apply to everyone or every business model.

My first customer was my first employer. They were buying what I had to offer, my unpolished, raw programming skills fresh out of school. I did not like that customer, but they taught me a lesson: 

your customers should find you, rather than you finding them. 

It took me almost a decade to understand it, though. 

My second customer was my second employer. But this time there was a big difference. They called me, and I had to decide if I wanted to work for them, not the other way around. They had already decided they wanted me there.

This may seem like luck, and that is what I also thought for a while. But it happened again with the third employer. And after that, I stopped being an employee and became a freelancer. And the people I work with today found me. 

It wasn’t until I read about inbound marketing that I understood what was going on. And that, in fact, luck was just a part of it, and maybe not the most significant part. 

What I was not doing was not sitting around, waiting for clients to call. I was continuously working. Either to improve my skill or to generously solve other people’s problems. 

When I began my freelance work, I’ve spent the first two years doing volunteer work. And they have been the best years. In those times, I would only do work that was profoundly satisfying to me. And I discovered how nourishing it is for the soul to be able to choose the people you are working with or working for. 

To paraphrase Seth Godin, the way to get clients is to do work that matters for people who care and to do so generously.