Home » Business

Category: Business

Can I get some time back, please?

I am bored, and I want to kill some time! Let’s binge watch Netflix or YouTube!

I used to think like that in the past. But in the last few years, I don’t remember a time when I could get bored! 

There are so many things I would like to do, to explore, to learn, to create! So many things… and so little time. How can you get bored?

When I look at where does boredom come from, for me, it had to do with something that I did not care for: like learning in school about a subject that was not interesting to me or having to do chores around the home. Then I would get bored. 

How does this apply to web apps?

Sooner or later, you will have this realization. No matter how much money you make, you cannot buy more time or lost time. You can lose money, and you can make more money. But lost time remains lost.

Once I had this understanding paying for coaching and mentors and specialists made much more sense. I was living with the illusion that I have an infinite amount of time. That I can do it all by myself, that I don’t need help, that I can eventually learn! But that is so very slow! 

If you do enjoy learning, then, by all means, do that in some areas of your life. But when it comes to realizing your goals, it is much more efficient to pay for help. You cannot buy more time, that is true, but you can use the money to save some of the time you got.

Get a coach, find a mentor, hire a specialist. And if you can, outsource the tasks that are boring for you. 

A note about outsourcing 

It was challenging for me to imagine that someone else might want to do the thing that I am bored with. But I have discovered two things:

– some people still prefer to trade their time for money, even if they don’t like the job (and if you need to keep the lights on, I understand, do what you need to do)

– and, more interestingly, some people find boring the things that I do with excitement and gusto (like dealing with complex online systems) 

I am glad we are all different; we each enjoy different things. This diversity means we can collaborate in projects where we do what inspires us, so we don’t feel like we are wasting our time, but we are fully living our lives instead.

Spend your time wisely!

Working from Home – Choose to embrace it

I didn’t plan to write about current events, but maybe this will help. 

I have made the transition to work from home a long time ago. The fact that I decided to do that and was not forced to do it, I am sure helped, but here are some things that I have learned that I would like to share with you.

I am also going to assert that you care about your work, and you want to continue, instead of merely taking time off now that “nobody is watching.” 

Your working Space

You need to have your distraction-free working space. It helps you with the discipline of “going to your office” every day. 

Your working Mode

Now that you work from home, you may be tempted to binge-eat while you work, to stay in your PJs, browse the YouTube, and latest news. Don’t do that. It will mess up with your focus and with your ability to do something productive for the day. 

As time passes and you get more disciplined, your working mode may include PJs and peanuts, but don’t start with that. Continue to “dress for success.” All of this is more of a “mind game” than anything.

Do not overwhelm yourself

The home office is a big change. Most humans don’t generally like change. The outside world is also going crazy. Be honest with yourself. Your energy and your ability to focus is not the same as it was before this change. Don’t overcrowd your workday. You are only setting yourself up for disappointment and burnout. 

There are many ways to do time management, but that I would suggest for this time is “the promise for today.” This way, you promise to do one important thing that can be done in a day and you do it. Yes, I said “ONE” (not ten). But I also said “important.” Trust me, drip by drip, you will make steady progress instead of burnout after burnout. 

Take care of your body.

It’s common sense, but let’s make it common practice. Drink water, take some pauses to stretch and walk around, look in the distance to relax your eyes, or better yet close them for a few minutes. This time is not an excuse to get out of working mode and binge on distractions. 

There is a tech solution for almost everything.

I don’t know what your work involves, but there is likely an app, a service, a new way of using technology to help you work from home. From remote access to files, to voice over IP, to Zoom calls and screen sharing, find your tools that can help. It can be done. If you don’t know how to do it, ask for help. Asking for help does not make you an idiot; it makes you efficient. 

We are all in this together.

It can get lonely when you work from home. Setup video calls with your team, even if only for 5 minutes after lunch. Call a friend for a “one on one – how are you doing conversation.”

But most of all, be compassionate and patient. The person at the other end of the line, computer, phone, service is in the same situation as you. They also are going through a big change, they also have family members to worry about, they are also concerned about the unknown future. Humanity first, business second. 

Keep positive

I am a strong believer in keeping your immune system in high gear. Stress can affect it dramatically, so stay positive as best as you can. Take things one day at a time. Make room for humor and play in your work. And when you are done working, I invite you to help another. You may have skills that are needed, knowledge than can be shared, but also a smile, a warm hug, or a deep “I see you” connection can go a very long way. 

“Live long and prosper!”

The Importance of Architecture and following best practices

As a young programmer, I was eager to dive in and get my fingers dirty as quickly as possible—no need for a plan or a direction. I knew I could figure it out as I went.

Fast forward some years, add higher project complexity over a more extended period, and the lesson became clear: sometimes if you want to run for long, you need to run slower and have a plan!

Figuring it out as I went worked fine for one-day projects or one-week prototypes. But when bigger projects came my way, I got to a point where I could not remember anymore what my initial think was, where was I headed and why, and how to present my idea to new members on the team.

Although nobody likes to write documentation, I began to make a habit out of it, and I knew it would come a day when I will thank myself! By now that day has happened many times 🙂

What would I tell my younger self?

Writing docs and making plans is not sexy, and in general, your clients do not care for them. They need working software, not documentation. But if the project is longer than six months, a few problems will begin to crop up:

– you forget why you took the decisions you made with the initial design

– if you will need to refactor your code, and if it is not well documented (and if it lacks automated testing) the job of refactoring will take a long time, and you run a high risk of breaking functionality

– by using best practices, you future proof your code – you make sure that you at least don’t make the same mistakes that others made before you. You will make new ones, for sure, but your overall code will be much more stable, easier to maintain, and upgrade.

In conclusion, there is a time to be quick and messy (when you are prototyping), but then you need to slow down and think things through.

Using WordPress as a Prototyping tool

Creating a prototype for your product or service is an excellent idea. It allows you to do some research before you commit to a specific solution. You can test various layouts, various interactions, and you also have something to show to your investors or your target audience to check with them if this is something they would spend money to buy. And the cheaper the prototyping, the more tests you can do, and the more information you will have when you want to build the real product or service. 

A prototype has only very basic functionality, and it is used to get an idea of what the user interaction will be like and what possible challenges may show up in future development. Because it is so simplistic, you can choose any technology you want to create your prototype. It does not have to be the same tech you will use for the real product. And this is important because you can choose something free, or something that you know how to operate.

In this article, we will focus on WordPress. Why? Because it is free, it is a common platform, it has a rich plugin environment, and the new block editor makes it ideal for quickly creating complex layouts. 

All you need to do to get a free WordPress site is to head to WordPress.com, create an account, and start a new website using their free plan, and now you are ready to begin prototyping. 

Go to your website’s dashboard and create new pages using the block editor. It is almost like using lego pieces to build something. 

You can create multiple layouts for the same test page; you can create links between pages, simulating a user interaction, you can test how it will look like on a mobile screen, play around with various font faces and sizes and so on. 

As a bonus, you can activate the comments feature and use that to document feedback on the pages you are putting together. 

Using the Free plan on WordPress has some significant drawbacks:

  •  you cannot use custom CSS to finetune your design
  •  you cannot install plugins 

Depending on the complexity of the prototype, you may not need either one of them, but if those are important to you, then you can install WordPress on a shared hosting plan and unlock the full power of the platform. 

Closing Notes

I know that WordPress is not a prototyping tool. For more advanced use-cases, you will find it limiting. In those situations, you are better off investing in some dedicated tools like WebFlow, or Sketch, or Figma.

But as a playground, when you want to get a feel for how your idea will look like, and you want to have something to show to your investors or your audience, give WordPress a try.

Finally, all prototypes should be discarded when you go build the real thing. There is a big temptation to use the prototype for the live product, but please don’t. When you need to make something that is production-ready, start from scratch and do it right.

Business Monitor App

If you spend long enough taking care of websites and making sure they work, you will begin to do the same things over and over again. Is the online store working? Can Google access the website? Do the emails go out as expected? Is the newsletter signup box working? Is my website up or down? 

If you have to monitor only one website and it is relatively simple, then you can do this manually, and it is also likely you will quickly notice if something gets broken. But when you need to manage tens of websites, all these tiny checks add up and eat away at your productivity. 

We live in the era of automation.

We live in the era of automation (possibly the age of AI), so there must be a better way, right? 

Yes, it is. 

Any repetitive action can be programmed. To help me out, I have created a web application that I call the Business Monitor App. 

This web app runs independently of all the other websites, and it is programmed to “keep an eye” on them. 

When an unexpected event happens, it sends me an email alert so I can take action if needed. 

I quickly realized that I could go beyond simple server monitoring and do some business monitoring as well (hence the name of the app). 

This improvement means generating a daily report with what has happened on the website in terms of sales, traffic, sources of traffic, subscribers, and social media activity. All this compared to the previous day. It is a handy tool to make sure that you are on track with meeting your business goals. And if any monitored index drops all of a sudden, that is a clear sign of a problem. That becomes highlighted, and I know I need to take action. 

The business monitor takes the guesswork out of how much revenue to expect at the end of the month. Or if the current promotions are working or not. It has made everything more predictable, and you know to intervene soon if it the trend shifts, and it looks like you will not meet your goals at the end of the month. 

On top of the daily report, the app generates a dashboard called “The Business Pulse.” Looking at that page, you can see at a glance where you’re at with what is important to you. Revenue, traffic, user activity, subscribers churn rate, best-performing products. 

Next, I have created some reports that go deeper into the data and link together more websites into aggregated reports. 

Why not just use Google Analytics for this? 

Simply because I like the flexibility of building the reports that are relevant to me and generate the kinds of alerts that I need to take action on. Also, because some of the monitoring cannot be done through the Google Analytics data, and finally, because most reports aggregate data from multiple sources: website databases, google analytics, social media and newsletter service.

This app gives me peace of mind that if something goes wrong, I will find out quickly. And not only that, but scanning the dashboard and looking at the historical trends, I can usually spot instantly what the problem is, saving me a lot of time in having to debug. 

How do you monitor your business to make sure you stay on track with your goals? 

Building a learning community website

The Challenge

Build a learning community website with the following requirements: 

  • subscription-based (behind a paywall)
  • forum for discussion
  • library with classes and materials
  • live calls with the students and the teachers
  • newsletter 
  • easy to use for both the young and older audiences 
  • accessible 

The solution

– base platform: Joomla!. In my experience, it is more secure than WordPress. It is component-based, which to me, makes more sense when you want to build a platform. Also, because it is component-based, it can be faster than WordPress that has to load all the plugins all the time.

– for the forum, I’ve used Kunena. I cannot say I like it a lot, but it was the natural choice for a Joomla! based platform. The interface is also common enough to make sense for an older audience. I have considered using Discourse, but it failed for the accessibility requirement.

– DocMan was the choice to manage our document library. The good part is that it can protect documents from being publicly accessible. The bad part: it feels clunky to navigate on the front end, and for some reason, the download feature is not working correctly on iPhones (but that could be Apple’s fault)

– after trying a couple of things, Zoom is the clear winner and choice for the Video Live Call that we have at least once a month.

– for the newsletter, the AcyMailing component is the professional choice. I like the flexibility of it better than MailChimp, and we get to have all the data. The challenge here was that our server is not doing well with email deliverability, so we did have to get an external mailing service like Mandrill (from MailChimp) to plug into this component. A big lesson learned here: if email deliverability is important to you and your users go PRO with a paid service. It will save you a lot of pain and headache. And in the long run, it may actually save you money by simply providing a reliable experience for your userbase. 

– ease of use was accomplished with custom modifications for the mobile version and by using a user experience that most people are accustomed to. For example, I have discovered that Discourse tends to not make sense for people used to the older forum software.

– accessibility meant we could not use Discourse. And to also consider a high contrast theme for specific users.

– for handling the subscriptions, I have used Community Builder and their CB Subs plugin. I cannot say I love it, but after a lot of customization work, it does the job right and reliably.

Add-ons and Customizations

– added a calendar to help better organize events in the community. DPCalendar does a great job with this.

– added a private messaging system – Udeimm – the code base is super old, and it tries to maintain backward compatibility with older Joomla! software. But it works. And with some custom work, it works very well. I like the fact that it integrates with CB and Kunena. (Oopsy… looks like development for this component has ended. Which is a shame. It was the best PM solution for Joomla!)

– for the forum, I had to code it a tagging system to allow users to tag each other using the @username system. This increases engagement and makes it easier for the users to let each other know if there is something of interest on the forum

– I have installed JChatSocial – it was a “cool thing” in the beginning, but I don’t see it as a popular feature. Also, it is not accessible, and the developers do not plan to make it so. With this plugin, I also have some performance concerns. I don’t think it can work for large communities. 

– added a custom made notification system to make it easier for a user to know when something important is happening: like an event, or announcement or someone tagging them or sending them a private message

– added web push notifications (for those that use Android or the desktop) – allows for better engagement and for users to more quickly respond to what is happening on the platform

– added a custom Joomla component to allow users to track their progress through the material on the website: the classes, the events, and assigned homework

Why a custom build? 

If I were to start again today, I would probably look for a platform that has all my requirements built in. I would also consider a hosted service. This would free me up from having to maintain, update, and secure the software. And I could use the free time to engage in other community-building activities. 

However, I am a nerd at heart, so I would miss the flexibility that I currently have to get my hands dirty and customize the entire experience in the way that I or our users like it. Because of this, the platform has grown and adapted to our users instead of forcing the users to adapt to a “ready-made” solution. 

This is a choice that I constantly have to make: do I want to be “the developer” or “the manager.” The developer can feel more rewarding as it appeals to my coding skills. But the manager is enticing too as get to focus more on the human aspect of it, and less on the technical side. 

I will conclude that I am proud of what I have built for WalkWithMeNow.com. 🙂

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?