Let your clients pay the price.
Uncle Bob in his book Clean Code states that in building a software project 20% is development while 80% is maintenance. I totally agree with him. Six months ago after losing my job in a software company where I was working as a business developer to create long-term value from customers, markets and relationships, I decided to fully focus on my dream as a software engineer. This decision was easy for me to switch to this career because I had built some applications before and I was very passionate about computers since I was a kid (12 years old). But, the main reason I decided to go for a business career in the first place was that I wanted to learn practically how software business works and the true benefits and struggles of pushing a product/idea to the market. From this short story about my career, let’s now talk about Uncle Bob’s thoughts.
I’ll begin with a well-known quote “Mean what you say and say what you mean”
Of course before securing a job in a well-structured software company you have to present proof of work. Nowadays it is made easier by an extensive list of applications such as Upwork, and freelancer that you can bid for a project and earn some money while sharpening your skills.
I noticed clients want their projects done fast and cheaply. But, they don’t understand the future consequences of maintaining or scaling the project. They don’t understand the difference between a software engineer and a software developer. They don’t take note of the quality and cleanness of the code. They are not aware of the management of a software life cycle. The best word I can use is that they are naive about the engineering of a software project. This is the main reason why 99% of software projects fail to meet the proposed requirement, only 1% succeed.
Programming is a social activity. It is like writing a book that users will find a transformation in and can be read with ease. It is about the structure and the flow of inspiring events. Your code is more important than how it works. Your code should be readable and enhanced by a developer other than its original author. It should have unit and acceptance tests. It should have meaningful names. It should provide one way rather than many ways of doing one thing. The code should look like the programming language was made to solve that problem. It should be simple and direct.
I have encountered clients who want me to improve the existing project they had built before with a different developer and add more features to it. But when you look at the code the only option you are left with is rewriting the whole thing. Of which, You have to charge the client more money and ask for more time because improving the code will just break everything. It is like you are building a house and the first thought you have is to build a cottage house(house with no floors). But as time goes by you decide to scale your house to a three-story building. But because the developer you hired in the first place did not have a vision of scaling the house, the only option the current developer has is to destroy the existing cottage house and start a new foundation for the three-story building. What if in the future you want a ten-story building later? How much will it cost you? How much time will the next developer require?
Beware! It is not the language that makes programs appear simple. It is the programmer that makes the language appear simple!
Programming is a basic human skill, just like reading, writing and arithmetic. Anyone can learn to write a clean and readable program with time and effort. Therefore, I insist that every developer/engineer should have a mentor who is good at managing a project and writing elegant and efficient code that can scale. You can have multiple mentors but have someone who will be willing to help you. Clean code always looks like it was written by someone who cares. It should prove a point like there is nothing obvious that you can do other than to make it better. Your program is like a poem that is never done and bears continual rework, and to stop working on it is abandonment.
The technology world very soon will have transformed and machines will do most of the work we are doing today. But if you are struggling to write quality code that can scale, then how do you expect to build a machine that will help you in the future?
As a freelancer, you are working both as a business developer and an engineer. You are a consultant but with implementation skills. Help your clients understand building quality software is expensive and it takes time. Help them understand that it is like planting a seed and the process should be strictly followed to leap more fruits. Help them understand that planning and design of the product is a crucial process. Let them know your engineering capabilities because there is a difference between a software engineer and a software developer. We need to improve from 99% failure to at least 50%. There is always a way. Let your clients pay the price of joining our world with quality work. Always leave the compound cleaner than you found it.
I always get angry when I see the quality of some software out there, when I know there is a way of getting things right. Just ask for help. The great philosophers became earthly great because they kept asking questions, trying to find the best answers and asking better questions about the answers they got and the cycle continued until they became great. There are only a few people who manage to do this because they understand the power of asking questions and finding the best answers.
I believe you can become better developers and engineers if we decide to ask questions. Ask google, find a mentor, ask them more questions, find answers from books and keep asking more questions. Ask until you know everything. Elon Musk always says that we are always wrong and the best way to enhance your craftsmanship is to reduce the degree of being wrong. The solution to this is to keep asking questions.
Stackoverflow is a multi-billion dollar application because of the multitude questions it has rather answers. You can improve your skills by just asking questions. Some people are just lucky, but always remember you have to pay the price. I direct my focus less to the prize of victory than the process of improving — obsessing perhaps, about the quality of my execution and the content of my thinking; This is my action and my attitude. I know if I do this, winning will take care of itself.