Hi Habr, my name is Alexander. Many people were motivated by my article, which inspired me to write a sequel. I published the article earlier and it is
here .
For those who read the second part, without reading the first one, I strongly recommend you not to be lazy and read the first part of the article.
Go!
Part 4 (continued). Projects
I will duplicate four points from the first article in order not to lose integrity.')
1. Select a niche.
Many small companies and individual freelancers sin because they do everything. From my point of view, this is a dead end path of development. Since it is impossible to do everything. You will not be able to compete with a niche company or an individual developer, if you do everything. It is impossible to sit on 5 chairs at the same time.
From my experience: As I wrote above, my main specialization is recognition. Before choosing a niche, I did everything. But this did not work very well, as I had to study the technologies, tools and aspects of this task in a new project. In fact, the choice of a niche I had by chance, after writing a thesis. And she was on the topic "Recognition of text using the Hopfield and Hamming neural networks." After that I began to use my library in projects. I began to take more projects related to recognition. And subsequently concentrated only on them. Naturally, I work on projects in which recognition is only a small part. But still. I sharpen my skills from project to project, and since this is a business, I use my work in new projects, which significantly reduces development time and get more profit in less time.
2. Simplicity.
Simplify everything to the max. Starting from the interface to the architecture. No one needs to be confused. The simpler the better.
From my experience: the best project in terms of interface, usability and architecture, I consider the project that was designed for a Spanish client, I wrote about it above. I spent two weeks developing the architecture, but I don’t regret it. Since I still use this engine in other projects and sometimes I just sell it. And the simplicity that I laid at the very beginning, she helped me adapt the engine to my needs in the shortest possible time. Although the Spanish project was very difficult.
3. From larger to smaller.
When designing a more or less large project, do not try to cover everything. It's useless! You can not take into account all the nuances. Concentrate on the main parts of the system. Describe the main points and objectives. And start developing. This approach is comparable to the approach of the sculptors. From the block they first form an approximate silhouette, and then, moving from one part to another, make the silhouette more similar to a real object. And only at the end they detail their sculpture. So it should be with you. Make large parts of the program, and then break and refine them, make them more similar to reality.
From my experience: When I start developing a new project, I first divide it into several logical parts. Then proceed to the development. During development, I divide these logical parts into smaller ones and implement them. And I repeat it at each stage, making the parts smaller. I repeat the stages to the indivisible state of these parts.
4. Modularity and scalability.
Make all your projects so that later they can be very easy to scale. And also make them modular. That is, divided into several logical modules.
Scalability will allow you to easily expand the functionality of the system, and modularity will provide an opportunity to allocate some functionality, for example, in a separate library and use it in other projects, thereby reducing development time.
From my experience: in principle, I always divide the project into small parts, which I later use in other developments. So I do everywhere, so I will not write about a specific case.
5. Timing.
One of the three most important criteria in IT projects is project development time. In my opinion this is the most important criterion. Since the saying "time is money" has not gone anywhere. And indeed, development time will be one of those very factors that will put pressure on you and your team.
Sometimes there are very inadequate customers, but with very interesting projects. It seems to be satisfied with the price tag, and the project is interesting, but the timing is unreal. What to do in this case.
First, sit down and count the real time you need for design and development. After that, multiply this number by 3. Why by three? It so happened that this figure is derived in practice. Let me explain: one third is being developed, another third is for testing and bug fixing, and another third is needed for integration on the client side. You can say that this figure is unreal, but for me very much. After I started using such calculations, I didn’t have a single project that was a failure.
From my experience: I always tell clients a real number, I’ll stress - always. Since it is meaningless to lie about numbers, because lies and innuendo will lead to a breakdown of time. This is the law! If the project requires for example 100 hours. Then for 50 it is never done. In one of the projects, I considered the labor costs and announced them to the client. As far as I remember, I put the figure at 1.5 months on full time. He was shocked. And spoke ASAP more often than you could think of. Then he said that he had another team that offered him to develop the same project in 3 weeks. Of course, I did not believe it, since this figure is generally unrealistic for that project. And I told him about it, but he didn’t even want to listen to me. And we said goodbye. And I safely forgot about the project, but after 4 months this client wrote me a letter in which he said that I was right. For 4 months, the other team could not even provide a demo version. The project, by the way, was exactly in my profile, and that team was clearly not in the subject. That is why they broke deadlines.
6. Two out of three.
My ex business partner taught me this rule.
In the fifth paragraph, I mentioned the three most important criteria in business, but I did not say what they were for. So: 1. fast, 2. high quality, 3. cheap. If a client pushes you, one by one or all of the points, then you simply offer to select the two points that are most important to him. Explain to him that the project almost never fits into three criteria. Never fast, high quality, cheap. As soon as she chooses two out of three, put the prefix "not" to the third one that remains automatically. For example, your client chose "quickly, efficiently," put the prefix "not" to the third, and get "quickly, efficiently and cheaply."
I will give a couple more:
"Not quick, high quality, cheap",
"Fast, Poor, Cheap."
From my experience: I myself always choose two of the three, reading the TK and the conditions of the clients. In general, I try to lucidly explain my position for a client in order to have less confrontation with him. My communication with customers, sometimes something similar to communication with children. But this happens only in those cases when the client is well, he absolutely behaves like a child in the store “I want it all!”.
7. Do not learn from real projects.
Or rather, complete your studies, but do not comprehend a new specialty on new projects. This paragraph overlaps with paragraph 1. Do not take projects in which you know at least 80%. Since during the development you will be engaged not only in the development, but also in the study of technologies, algorithms and programming techniques. Do not train at the expense of others! You are paid for the development and only.
From my experience: we decided to take a project that seemed financially beneficial to us. But there was one caveat, we were poorly oriented in the topic (document flow) and in one of the JavaScript development languages ​​(specifically jQuery). But they thought that everything is very simple and that everything can be easily studied. But it was not there! I will not talk about the entire catastrophe, but in a nutshell the project was disrupted, fines were imposed and there were a lot of bug fixing, as well as endless negotiations with the client.
Part 5. Financial aspect, partnership and employees
1. This is business, baby!
How would you not want, but you can not deny that your work for yourself - this is not a hobby, but a business of pure water. Take it. If you are foaming at the mouth to prove that you are working for pleasure, say “for fun”, then I don’t understand why you are reading this article.
From my experience: For me personally, people who call themselves “free artists” and who don’t care about the financial issue of their occupation are associated with such hipsters. Like, I'm so independent, I work for myself, whenever I want and where I want. Why I remembered exactly hipsters, because about half a year ago we opened an open space co-working office in the city (if you can call it that). A lot of freelancers came to the opening. I saw a photo report, thank God, I was not there. All the photos had some strange personalities. From the category of "I am not like everyone else, I am not interested in money, but only in my favorite thing to do." I saw several familiar faces. So, these individuals call themselves loudly freelancers, free-lance artists and very strongly emphasize that they do not work for an uncle. But at the same time they claim that they are not worried about money and that they don’t care about all the laws of business, economics and business. Such comrades can take, and then abandon the project, motivating with something like this “My muse did not come” or “The soul no longer lies in this project”.
If you began to work for yourself, then try to do business as a businessman, and not as a creative person.
2. Pricing.
Since you are engaged in business, then naturally, you should be able to correctly calculate the cost for the project, for the work. Calculating the cost of a project is almost the most difficult task in a business. Every businessman counts it in his own way. I will tell you below how I am counting on it, but before that I want to mention one common mistake. Never ask a customer how much he can pay. If the client does not tell you the project budget - this does not mean that he wants to deceive you. Often, the client simply does not know the real price tag. If you start saying: “How much are you willing to pay?” - this is at least unprofessional. The client will begin to hesitate and doubt you and go to your competitors.
From my experience: Above, I wrote how I consider the term of the project. So, I consider the price tag as follows: first: I divide time into paid and unpaid. Of those three parts described in paragraph 5 of the fourth part, I take money only for the first third, that is, for development. Integration and bug fixing are all free. Bug fixing is understandable; the client does not have to pay for our jambs. Integration is a separate moment. There is more psychology here, during this period, when everything is fine, the system works and you integrate it with the client into client machines, often you start talking about abstract topics that lead you and your client to a more trustworthy level of communication. Now, you are not just a faceless developer from a far unknown country, you are a real person. During this period, the client often says that he wants to have another system, or he wants you to look at the existing system and its problems, etc. That is, he does not want to lose sight of you. Since customers do not like to change developers, they want you to be a regular performer. Okay. Let's return to the cost calculation.
For example: a project requires 100 man-hours to develop. On the project you can select one specialist. Rate per hour of such a specialist, say $ 20. You lay the margin in the cost of an hour specialist, that is, the profit of the company, for example $ 5. As a result, we get $ 25 per hour, and the total for the project is $ 2500. These are only approximate figures. But the essence of how we consider the price tag to be real. Naturally, these paid hours do not include testing and integration.
3. Do not be greedy.
Yes, yes, don't be so greedy. You should not “wring the price” when you have just received recognition, and even more so if you have just started doing business. In our business, it is rare when it rolls such a trick, which once was done by the company that makes “Parliament” cigarettes. In a nutshell, they had problems with sales, and they re-branded, and simply raised the price of cigarettes. After that, sales began to grow. Unfortunately, in our time it is rarely possible to do.
From my experience: it so happened that I was never greedy and exhibited a price tag that was quite commensurate with the real price tag for a project. But I saw when customers came to me and said that they worked with other companies, those companies began to grow and began to “wring” an enchanting price tag. And it turned out that the client could not pay as much as the company wanted, and he left them. That is, always keep yourself in hand, with the choice of the price tag. Since you can lose a loyal customer and reputation.
4. Choose a partner not as a friend, but as a partner.
Often, young businessmen are looking for partners for the future of joint business in their circle, among friends or relatives. It seems to them that it will be easier and easier. So it is so, but only at the first stage. When the company is just being formed. Then everything will be more difficult. In any case, in the future, you or your partner will have complaints, or your views will diverge, and a compromise is very difficult to find. It is very difficult to argue with a loved one or to quarrel over a business, as you will have a constant thought that you may lose it. And in the end - it will not lead to anything good. You can lose not only business, but also a friend. Therefore, when choosing a partner, always remember that you can disperse for reasons related to the business.
From my experience: It happened to me also. My former business partner is my friend. But we parted ways with him, and nothing changed in our communication. I was lucky. He taught me many good things and for that I am grateful to him. I have always remembered his phrase: “Sasha, individually, we can achieve much more than we can do together.” We remained friends, we have no offenses and claims to each other - this is a very big luck. Since often friends who create a business, part with their enemies and a bunch of resentment. Therefore, in order to avoid problems, in the initial stages choose a like-minded partner, not a friend-partner.
5. Hiring employees.
For all managers, hiring employees becomes a key issue. Since programmers are a specific people, the choice of an employee must be approached even more carefully. Before you hire another employee, think about whether you need it? By hiring an employee, you deliberately expand the staff of the company. Your company will eventually become a cumbersome monster. Business is war. And in the realities of the present world, wars are not waged by regiments, divisions, and armies. Wars are fought at the expense of mobile brigades, which can cope with their tasks much more effectively. Be mobile.
But if you finally decided to hire an employee, then at the interview, pay attention to the following things: adequacy, sociability, understanding of the topic of conversation, speed of thinking.
Adequacy - everything is clear here, if a person comes to an interview and does not understand what he is doing here or somehow inadequately reacts to your questions - it means by.
Sociability - if a person does not know how to communicate normally on abstract, and even more professional topics at the interview, then imagine how he will behave in real life.
Understanding the topic of conversation - if you are talking about one thing, and a person does not understand or is trying to turn off the topic of conversation, then it will be difficult to work with such people, as they will do in real work not as they should, but as they like.
The speed of thinking - the speed of thinking for an IT professional is very critical, in my opinion. If a person can not quickly navigate the situation at the interview, then he will focus on complex and cunning tasks?
If a person fits according to all the above criteria, then do not forget about how he will join the team. Even if your candidate is a genius who is ideally suited in all respects, but in the initial assessment he does not quite fit the character of your team, it is better to abandon him. Since, having come to a new team, this person can break the atmosphere in it, and all the work will not be performed as effectively as necessary.
6. Listen to your partners and employees.
Having your own point of view is certainly great, but if you completely refuse other opinions, this is wrong. It is common for a person to “blur the eye”, that is, to solve a problem for a very long time and not to see other approaches, except one. Listen to your colleagues, because they can look at the problem from a different angle and find a solution simpler than yours, or give an idea to solve the problem.
From my experience: When I was still working “for an uncle”, I had a boss who imagined himself to be a very tough developer, in fact he was more of a boaster and sooo mediocre programmer. So this fellow behind the technology at that time years so 15. The company developed software that was intended for banks. It was developed in the 90s and was constantly refined to the needs of customers. The DBMS in this system was, to put it mildly, not the most common. Unfortunately, I can not remember the name, or rather I can, but I'm afraid to make a mistake. And it turned out that new team of programmers came to the team - team leads, they tried to convince the boss that they should not continue to develop using this DBMS, but he didn’t care. So at one point, the support for this DBMS stopped, and as a result, the company in which I worked had problems with what to do next. It all ended with a 2 or 3 year rewriting of the system, a bunch of bugs, loss of customers, etc. And if the boss had listened to programmers for a year or two earlier, then everything could not be so bad.
7. Create side profits
Everyone has long known that business is a business whose sole purpose is to make money. The expansion of financial flows is undoubtedly the peak of professionalism and skill. Offer more than one direction only. Work on all fronts. For example, you have developed some great system for a client. Select the engine from it, look for who it will be interesting. But there is one BUT. Do not try to shift your focus from current projects to creating side profits. This is wrong, because, if you get carried away by creating side profits, you may lose the main one.
From my experience: We have two projects that were made to order, and then put on stream. Naturally, we do not sell them as they are, we selected the engines, and then used them to create very similar products, that is, we created side profits using minimal resources. And these actions have made quite a good profit in our budget.
8. Do not try to compete with monsters.
Just don't try. You have neither the strength nor the time nor the desire. What is in large companies. Go your own way, develop what interests you. Analyze competitors, adopt the best of them, but in no case try to compete with them. Look for flaws with competitors and cover them.
From my experience: Since I started my independent career obsessed with programming, I didn’t really think about the competition. I just worked. But after years, when my passion turned into a business, I began to analyze the products of competitors and came to the conclusion that you should not create analogues of competitors' products, but it is worth covering those places where the competitor is weak. One of our products is essentially a substitute for a direct competitor, but only in a very narrow area. We did not try to make an analogue; we made a separate product that satisfies the requirements of customers that the competitor’s system cannot cover.
Instead of conclusion
I hope that the two parts of the article gave you food for thought and you learned something useful for yourself. I expressed only my subjective opinion, and this opinion was formed over the years of my work. Everything that has been described in two articles - I really use in practice.
Thanks for attention.
Respectfully,
Alexander