Start up and create your own
Wow, it has been 4 months since I last wrote in my blog. That’s a big violation my own rule – to write at least once a month. But this must have to do with me being the architect and technical lead of our Startup, which we founded almost a year ago. Some months ago, I already wrote about some bad experience with side projects and freelancers. I guess it’s understandable (and natural?) that in this kind of project there are moments of frustration and setbacks.
Today I don’t intent to repeat this. Instead I want to do some personal retrospection of lessons learned – and how things could have been done better… so it helps me, and hopefully you, managing and solving the future challenges, no matter if you’re working on a side project, in your job, or even your own startup.
The step from being a programmer who is being told which functions, bugs or features must be solved, to being in the position of creating an entire system, comes with a lot of new aspects that have to be considered. I’ll try to put it under some subtitles, to not talk endlessly without any context 😉
Define the product
Be real serious about this! Take your time with everyone involved and think hard about what your product is supposed to be. Don’t be too ambitious with your first features and the complexity. Everything will come with more effort and problems that you anticipate. Your project will be one of many that don’t work out because of loading too much into it in the beginning. Always focus on rapid prototyping and a minimal viable product!
Define the strategy
Who is going to be your first client? In our startup, it was an important decision of going B2B or pointing to a more massive market. But at the same time, don’t get lost in many little details to satisfy few people. Your project won’t stay alive if you just do a specialised application for one or few people. Focus on the first ones, but project to the bigger picture, and apply this consideration to all aspects involved – regarding business and architecture!
Make a plan and calculations
Of course you can’t start with a precise plan about when to ship, how much money you’ll spend and how much income you can produce until which moment. But you should all sit together and define milestones regarding this, and always compare your progress with those! It will help you a lot to keep on track, and gives you orientation in those moments when you doubt everything you’re doing! And belive me – these moments will come!
There’s nothing worse than to hold on to your original plan for all costs! All your decisions about feature and business have to be adapted and corrected, always in consent between all partners and stakeholders. Keep an open eye to new requirements, ideas, problems and risks. And be aware about possible threats – like competing teams or clients that change their minds.
Consider all as equals
Surely, not everyone is equal. Especially when you hire freelancers or employees. But try not to create a strict hierarchy. In the moment you treat people as underlings, or just give orders without explanation, you kill motivation and suppress creativity. Just try to trust – there’s nothing that can’t be fixed if something goes wrong. But to start without trust in the first place surely leads to a lack of quality.
Listen to those who know more
In the moment you believe you know exactly what’s up, doubt yourself! Always listen to others’ ideas and critics. And try to do this in all fields – in those you’re the expert as well as in those where you aren’t. In my case, that’s the business aspect for example or the design of UI and UX.
Always take time to make yourself be understood
Even if it’s about issues where you’re the expert, and the others respect this – take your time to explain them what’s the problem (or your decision) – in a language they can understand. Start considering yourself as a teacher as well as a student! Even if you’re the expert – sometimes you get very surprising feedbacks and new points of view from someone that doesn’t know much about the subject on the table. Because in the end everything is abstract, and anyone is allowed to reckon.
Here it comes all together. In the end it’s the product on which everything depends. So be cautious and courageous to create it. And consider the following pieces of advice.
The productive code is just one piece
Infrastructure, tests and tools are equally important. Especially when we programmers dive deep into programming and debugging, always take your time to watch the whole pictures. Invest time for good test coverage and tools. Those help you be productive and keep everything working fine.
Features must be justified
During development, we often have ideas for additional features and improvements. But be careful not to create unnecessary burdens. Discuss everything with your team, and make sure that those things really generate a business value and don’t throw you out of your plans.
As engineer, protect quality and health
Be honest – we all sacrificed tests and test processes for rapid development sometime. And sometimes, that’s good – especially when it’s about proof of concepts and rapid prototyping. But in the moment you start putting more and more bricks on top of each others, without having good cement and quality control, the whole structure becomes unstable.
Also, stay attentive about your productive environment. No matter if you’re working on your own servers or the cloud – or if your software is some stand-alone application, be aware about what happens in production, and be prepared to react fast and effective when problems appear. Always have some backup or fallback, in case something happens. Among many other things, that can be a sudden peak of traffic, attacks on your systems or simply bugs that you didn’t find yet (and we all have those!).
When you’re in charge of a whole product, or a project, or a part of a bigger system, it’s difficult to give things out of hand. But if you don’t, you will eventually end up being submerged under too much work. This is where your life and the product start to suffer. So start giving away responsibilities as soon as you can, but keep good communication with everyone!
I tried to keep this post as short as possible, but there’s much more I could talk about. Perhaps your interested in some former posts of mine which also touch the aspects I was talking about here.
Keep in control with test driven development
The importance of tools and culture
I hope you enjoyed my writing, and can take something out of it for your own work! I’m always glad for getting feedback. Good luck and success to all of you!