Home » business

Tag: business

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.

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.)

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?

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.

You have a great idea? Make sure your audience thinks that too :)

Some time ago, when predictive text typing was a “thing” on mobile devices, I had this great idea of adding the exact same features on desktop computers too. Just type in the first few letters, and the computer will make suggestions to help you finish the word. You would type faster and make fewer mistakes. What a great product, right?

I have spent one year creating and polishing the product, building the website for it, and also spent some money to have magazines review the product. 

What was the net result of all this effort? 

It was exhilarating to build this thing and overcome the tech challenges, but in business terms, it was a disaster. I sold just about three copies of this software. 

There is a valuable lesson I learned from this: test your ideas first, before actually building the product and service.

The good news is, in today’s world, you can test your idea for free and with very short setup time. And this post, I will share some tools to get you started.¬†

Social media

Social media is the most accessible medium to use and the quickest to get feedback on. Write a post about your idea, and ask for comments. Do you get any engagement? Are there any enthusiastic fans? Does it make sense to start a group around this on Facebook? Before you know it, you have your cohort of fans that will support you in building the “real deal.” And you will also have some precious feedback about how to build your service to serve your audience best.

A free website

Before investing thousands of dollars for a pro website, test it out with a free service.

WordPress.com is a good tool to use. Start with their free plan. WordPress is the one I use the most for myself and my clients.

Wix¬†is another platform that has a free plan. I haven’t used it myself, but I’ve seen it working. If what you need to test out requires you to show some sort of design and less text, then I would go with Wix because of their powerful design editor that is not available in WordPress.

WebFlow is new to the game. It has a free plan, and it is aimed more at designers who what to greate outstanding pages without having to write code. If you are a designer, you will love WebFlow over the other options. 

Some important tips to consider

Intellectual propery

If you do not want to test your idea because you are concerned, someone else might steal it consider these: maybe your idea is not different enough, and that makes it super easy for anyone else to replicate? In which case, you may be better off pursuing a more innovative idea. Also, even if someone “steals” your idea, they don’t have you on the team with your insight, thoughts, and experience. There is a long road from an idea to a mature project :).¬†

From testing to an actual service or product

Regardless of what platform you choose, think about how will you grow if the idea turns out to be viable? You need to be able to export the content you have created for your tests. And it could be images, articles, or the design itself. It is always a good idea to document what you are doing for two reasons: if it has not worked, you will be able to learn something from it. And if it does work, you will have built a library of resources to help you launch the mature website/product/service.

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.

Can you run a business and not talk to anybody?

At my core, I am a computer nerd. I am excellent at talking to computers. Not so much when it comes to other human beings.

For a long time, this was the only thing I would do. I was the happiest when I got the project specs on paper, so I could read them and implement them, by myself.

But when I decided to become a freelancer, I realized that I had to talk to other people. I had to talk to the people I wanted to serve about their goals and their vision, but also about money. There were times when I knew had to say “no,” but I couldn’t. There were times where there was a conflict that had to be resolved through better communication.

I wish I could say there is an easy “how-to guide” to learn to communicate better, but there isn’t. I just had to practice ‚ÄĒ one awkward conversation after the other.¬†¬†

And it is still hard at times. Especially when I need to make a change in how I price things, or in the terms of the engagement. 

So why go through all this trouble and stress of learning to be a better communicator?

Although it seems obvious now, here is the lesson I resisted the most: to find clients and to keep finding better clients, you need to learn to communicate. There is no way around this. 

You need to know how to tell your story compellingly; how to communicate your pricing and how to negotiate in your favor. You need to be able to use your conversation skills to determine how you can best create value for your clients. And, in some cases, you need to know how to let some clients go. 

By avoiding communication, I would frequently make wrong assumptions about what was valuable for my client, and that would jeopardize the relationship and the project. 

If you don’t learn to communicate better, you will have to let someone else do the talking, write the copy on your site, create the video, and tell your story. And even if they do a good job, they are not you :). You will continue to depend on someone else. It will be comfortable, but you will be limited to your view from the “back seat.”

If you are still not convinced then maybe this will shake you up a bit (as it did me): 

“The better communicator will determine the price.”¬†

A business-savvy website should consider money, and therefore price. And you can spend a lot of time and money optimizing the technical bits, but if your communication is off, your success will be limited.  

I will end this post with a book recommendation. It is the most expensive book I’ve ever bought, but it’s worth every dollar:¬†Pricing Creativity¬†by Blair Enns. Don’t think that if you don’t work in the creative business that this book does not apply to you. It does! And it is all about communication.

The self-diagnosed client

The self-diagnosed client is the person who comes to you with a problem, a solution, and they only need you to implement that solution for them!

Does that seem right to you?

Consider the following scenario. A person goes to the doctor; this person knows the problem; knows the treatment and only asks the doctor for the medicine they want. In most places, it would be a case of mal praxis for the doctor to accept the self-diagnosis.

At the very least, the doctor would ask questions to confirm what the real problem is and confirm the diagnosis, right?

When it comes to online businesses, the issue is not that clear cut, and it depends on what you are selling.

If what you are offering is creative, custom made solutions, then a self-diagnosed client is a disaster waiting to happen. You cannot know if the two of you are a good fit if you have not followed your own diagnosis process that will enable to serve the client best. The client doesn’t know what they don’t know… they have a blind spot. If they knew everything, they would not come to you for a custom made solution. So it is your job to at least confirm the problem and what they think the best solution might be :).

In case of a more standardized offer, then it is indeed up to the client to make up their mind if your offer is a good fit for what they want to do. You can, of course, help make up their mind with excellent communication about your product or service.

Staying on top of your social media presence

The best that I know to stay in the mind of your audience is to share something of value with them consistently. You could share your creations every day, every week or every month.

Have you ever tried to be consistent every week? Or every day? It is pretty challenging.

Some days you feel inspired, other days not so much. On some days there is plenty of time for creations, and on other days you would like to take some time off.

I struggled with this for a few months, and I knew there has to be a better way!

And that better way is batching and scheduling.

Batching is merely creating more pieces to be shared when you feel more creative, or when you have more time on your hands. If you share one post a day, but you have time to create 5 of them, that is batching.

When you have five pieces done in advance scheduling can help you publish them just at the right time, even if you take the day off.

For me, batching and scheduling are time-savers that also keep me in front of the audience even when I take time off.

In the last few years, the tools available have evolved so you can do this easily.

For Facebook – on your business page – you can schedule posts ahead of time. That feature is sometimes not working. In those cases, I go to “Publishing Tools” and use that interface to schedule my work.

For Twitter – they have the Twitter Deck app. This one has worked pretty much every time.

For Instagram, you don’t have a built-in scheduler. I am sure there is a good reason for that, but I don’t know it. If scheduling on Instagram is essential for you to there is a paid service you can use called: TailWind. Since I’ve been using it for one of my clients, they almost doubled their audience from 2k to 4k. Of course, you still need to create high quality, engaging posts, but being able to schedule them allows you to be active on the platform even in the days where you have something else planned.

Give batching and scheduling a try! You will find it much easier to be creative when you take the time pressure off of you.

The Process – A project from start to finish

There is value in having a process. It helps you provide consistent results, and you have something that you can continuously work on to improve. 

Here is “The Process” that I use today with software projects.

1. Are we a good fit? 

The first thing that happens is the discussion where both myself and the client try to determine if we are a good fit for one another. 

My job is to determine what the client needs and consider if I can provide a creative solution to solve that problem at a price that is fair for both of us. 

Sometimes this discussion happens in two parts if I need a break to do some research and investigation before I can begin to think of ways I could help. 

An important note here is that what is “needed” may not be what the client initial thought may be needed. That is why we have a conversation before any agreement happens.¬†

2. Project Set-Up 

After we agree on scope, price, and what it means to be 100% satisfied, I begin the work. 

With time I have learned the value of keeping things organized and tidy. 

Each client gets their individual folder that will document the history of the project. In that folder I will have things like:

  • meeting notes;¬†
  • agreement of project scope and price;
  • backups – I never do any changes unless I have a backup first;
  • client files – images, documents, other media;
  • a work-log – where I document what I have done and why. In very rare cases, I can use that to remind the client of the road we took together and justify a decision over the other. Another benefit is that you learn and get better by journaling what you do;¬†
  • access details – a file where I store various logins that the client has shared with me. In some cases, it makes good sense to have this file encrypted, like a ZIP archive with a password, for example;
  • any new agreed-upon changes also go here;

3. Making a plan – The List

I was trained, mostly by my father, to be organized by using lists. And I have kept that training and added on top of it. It is very useful, and it gives me clarity on what it needs to be done and in what order. 

Here I make a list of everything that needs to be done, broken down in tasks. The tool I use most of the time is Asana. I have tried Trello and Bootcamp, but I find Asana to be much closer to how I like to work. 

I also use a calendar service (like Google Calendar) to remind myself of upcoming deadlines.

Something that I found is handy is to split my list into three main sections:

 a. Go Live Рthe project cannot go live or shipped if any of the tasks here are not finished;

¬†b. Nice to Have – other tasks originating from the client that we can add later, after the go-live and in, some cases, in a “Phase 2” of the project;

 c. Bright Ideas Рhere I write down my own ideas that I think could help the client;

Why am I organizing things like this? 

The short answer is that it forces me to focus on the client; to get them on the market as soon as possible. I did not always use to think like that, and I was routinely making the mistake of focusing on tasks in the “Bright Ideas” section because there were so inspiring to me and they would challenge me. But in most cases, they were not mandatory for the client. So that added unjustified delays and extra costs. While I don’t think the client is always right, I do believe the client knows what is important to them. And that is where my focus should be and what I should be solving first.¬†

I hope it is now evident that the order in which I go about these tasks is: Go Live, then Nice To Have and then Bright Ideas. And I have learned to be OK with the fact that most projects stop after the “Go Live” part when the burning need of the client has been met.¬†

So why still keep “Nice to have” and “Bright Ideas” around?¬†

The biggest reason is to clear your mind so you can focus on the tasks at hand, knowing that your “good thoughts” are not lost. The second big reason is that is how you learn and grow. Maybe you don’t implement these ideas now, in this project, but because you wrote them down and thought about them you will remember them, and they may be the perfect solution for the next project or the “Phase 2” of this project. The “Bright Ideas” section is your most creative section. Don’t throw it away.

4. Set Up a Schedule 

I believe that if a project does not have a deadline, it will never finish. I am very wary of clients who say: “we can finish this whenever… no rush!”. That can be a source of significant delays for you and the project.¬†

I know this is not the same for everyone, but if deadlines motivate you, a client who is continuously delaying the project will drive you mad. 

In this step, I set-up reminders in my calendar for milestones that will help me get the work done in time for launch. 

When I do this, I need to allow time for the “unexpected” right before the launch. So I plan to finish the project at least a few days early to have some space to extend in case of unforeseen trouble.¬†

5. Doing the work

Only in step 5 comes the most fun part for me, doing software work :). But as a solopreneur, I need to do and master the business admin part as well.

When doing software work, I have a few principles that I follow:

  • Blocks of uninterrupted time – 2 – 3 hours blocks when I am the most efficient. When coding, there is a complex context that you need to have running in your head, and that takes time to build. If your block of time is too short, then most of that is spent just reminding yourself what the project is about;
  • use a versioning system – this should be obvious – even if you are working alone, it is so much easier to roll back to something that was working when you have a versioning system in place¬†
  • automatic testing – for particular clients that require a very high level of quality control this needs to be done;
  • Automatic backups of the client’s old code/website – again, just in case you need to roll back. Make sure the backups also include the database, not just the code files;
  • Keep track of working time – in some cases, “hours of time” is what I am billing to the client, and also this is how I know if we are going to finish on time. I am however transitioning out of this, so stay tuned for a post about it. Keeping track of time can be a learning and discipline building tool, just like journaling your work, but sometimes it becomes very, very restrictive and creates a lot of stress;¬†

6. Client Feedback 

I used to work, work, work, and then do the “big WOW” reveal at the end when the client would be floored with the amazing quality and results.¬†

This big reveal was silly. 

Why? Because it would allow me to focus on the “Bright Ideas” list instead of “Go Live.” And I would deliver an excellent, high-quality product, that would not speak to the client’s needs.¬†

What I do now is to deliver work in smaller increments and get feedback soon and often. I am careful here that the feedback I am looking for is “does this meet your needs, madam client?” and not about “how to do my job.” Therefore it is a tool to keep me focused on finding solutions that are important and relevant to the client.¬†

7. Making mistakes 

Mistakes are happening in every project. If I am not making mistakes, I am not learning anything new, and I am just delivering the same old solution. In some cases, that is OK, but generally, that is not what I am looking for. Each client is unique, so I want to challenge myself and meet their individual needs. 

It is therefore essential to know that I will be making mistakes and have a plan on what do to about them. Like, make sure I have factored that in the price so I don’t add more as a cost to the client to fix them. Also, I need to include those in my schedule. That is why I always have the “unexpected problem” in my planing with some time allocated to it.¬†

I am, however, fair. If I make a stupid mistake that I could have easily foreseen and avoided, the fix is on the house! I am talking here about the unavoidable trials and errors when you are building custom solutions and exploring places you have not explored before. Those mistakes need to be allowed for if you want to arrive at a good solution where you have explored alternatives that did not work. 

8. Going Live 

When I “go live,” I strive to have a seamless experience for the customer and their clients, which means as little to no downtime if that is at all possible. Over time I have discovered various ways of “flipping the switch” that can use depending on the specific situation.¬†

Again here, backups are super important. In case you mess up the live deployment, you need to be sure you can roll back to what worked before. I have seen so many instances where this not done, and people roll the dice. They may be that good, but it is just a matter of “when” things will crash on you, not “if.” I have learned my lesson.

9. Review and Learn

Ideally, the project has completed with the “double thank you.” You give thanks for the business, and the client is grateful for the solution they got.¬†

Either way now is the time to reflect on the project and look for “lessons learned.”¬†

What worked? Do more of that!

What did not work? Do less of that! ūüôā Or at least try to figure out what you can do differently next time.¬†

Something else that shows up here is opportunities to learn new things. Look at the “Bright Ideas” section and the “Nice to Have” section and try to come up with solutions to those that use new technologies. I sometimes set-up a pet project where I implement that solution.

I mustn’t skip this step or else I would get stuck in a rut.¬†

Mic to you!

How is your process different when you’re helping your clients? What are some of your lessons learned along your journey?¬†