In recent weeks, I wanted to share some of the lessons I learnt throughout my career as a software engineer, freelancer and now running a software company.
Also, sharing is caring and if anyone can learn from some of my mistakes and observations, that would be awesome!
Onto the article...
Learning the basics of marketing is handy and this does not mean understanding how to launch a full blown campaign on national TV. What I mean is:
- Build a portfolio
- Showcase EVERYTHING
- Tell everyone (friends, family, your LinkedIn network) about what you do
In 15 years most of my clients were referrals so do not underestimate the power of word of mouth.
When dealing with clients/stakeholders/project managers, you want to have a good sense of communication, whereby you can both understand each other so as for you to deliver a product (software) that is about their goals.
Therefore, using phrases such as "The requests are slow, we should opt for in-memory dbs", may not be entirely appreciated. Bare in mind that not everyone understands technology the same way you do and it is important to respect it, especially when running your own show.
Learn how to use plain English (or whatever language you use) when communicating with non-technical stakeholders
Whilst going through my Twitter feed, I see how individuals are obsessed on knowing the "best" languages or frameworks, which is definitely important BUT the "correct" approach for a project, is not just about the language or framework.
Languages are the tool to write the instructions, the art is in knowing the basics (Data structures, search algorithms, OOP, design patterns, test driven development etc) well so as to give you a proper understanding how to architect your software.
Moreover, different languages have different strengths and some might be more appropriate than others for that specific task.
In my view, being a confident individual is somewhat important as it gives you that sense of re-assurance when making certain choices. However, as a software engineer I like to keep my feet on the ground. If you are asking why, here are the reasons:
Everyone f*cks up, even the most experienced ones, so get off your pretty high horse :) I once by mistake executed
sudo rm -rvf *, on a Linux dev machine where I was in the root folder of the file system. Oops! - luckily did no serious damage as I stopped it super quickly.
It helps you become a better developer as you tend to question yourself from time to time.
People appreciate you more as you are truly capable of looking for the 'right' solution rather than the one that suits your ego.
Before starting any project, always be clear about what you plan on delivering and be transparent with the client or stakeholder. This gives the product owner, the re-assurance that you are putting your money where your mouth is and that you are professional.
Don't be afraid to say no, if you feel a task is going to derail your entire project plan.
When running your own show and things start to pick up, you will start to have more and more projects which is fantastic. However without any proper planning you risk disappointing clients, which is not the ideal situation.
We adopt these processes and tools to stay organised:
- Gantt charts for project planning, thus giving us an idea of how long a project will take, the sequence of tasks and allocation of resources
- We use Kanban (https://en.wikipedia.org/wiki/Kanban_(development)) within Trello to scope out all the tasks and this give us a good indication of current progress and what everyone is up to
- We organise daily stand-ups with the team so as to discuss issues and progress for each individual
If you ask, how does this apply to smaller teams, e.g. 1 or 2 people, I still suggest using Gantt charts + Kanban. Stay organised no matter how small you are!
This applies mainly to anyone doing front-end work. Even though as developers, we are not required to know how to design proper UX. Experience showed me that it is good to have an understanding of what is a good user experience.
This will help you make better recommendations and build a piece of software that the end-user really enjoys using.
You can approach this in 2 ways:
- Team up with a good UX designer, if budgets are tight then opt for option 2
- Read up as much as you can e.g. https://amzn.to/2RqpM3q
This kind of ties in with one's ego, but it deserves it's own lesson. As devs, we do sometimes feel this mighty power that we are like the Greek gods. This may be attributed to the fact that we are solving some real challenging issues and without diminishing anyone's achievement, we need to bare in mind that the dev team is not the beyond and all of a business.
There are other important business functions like marketing, SEO etc that have their own feature requests. In my experience I have sometimes seen these features being dismissed and claiming that they are not important.
This poor sense of judgement led to conflict between the departments, simply because of a lack of empathy or one not putting themselves into the other persons' shoes. From experience, I can tell that a basic change for the SEO department, could be a real winner for the business.
Bottom line, have respect for other requests and do your homework properly.
You never know enough, even after 15, 20, 30 years in the industry. Especially, when running your own thing, you need to make that extra effort to stay current as you don't always have the luxury of asking your colleague about what is the best approach.
So stay in touch with communities like this one and never stop learning.
Building relationships is not only important in business but even when working in an organisation as you will learn from one another. More importantly you never know where life will take you and your own colleague or boss could be one of your first clients or future business partner.
Hope you enjoyed reading and got some value out of this. Well done if you have made it to the bottom :D
Feel free to put forward any suggestions you may have. Stay hungry and feel free to reach out, happy to help out.