Wojtek Krysiak tells us about working as a CTO in Software Brothers. From previous parts (Interview with CTO Part 1 and Part 2), we learned how wojtek became the Chief Technology Officer, what his greatest achievements are and how he stays up to date with trends in the IT industry.
Interviewer: How do you measure and review performance?
Wojtek: We could measure two things in an application. One is the business area, related to how users perceive the application. The other thing is code quality – something we know is important, but not necessarily seen by the end users. The part related to business can be measured using different tools. You could measure the time of response, how many bugs you have, and so on. These tools have to be in place, as they allow to verify whether the application is slow, or if a process is not working correctly. The most important tools you can add to an application is some kind of business intelligence tools. They measure how people use the application – do they click, what is the conversion rate of particular elements in the process, etc. Based on that, you could focus on the right things. For instance, if a business process in the application involves four steps: login, adding a product to the cart, verifying the cart and the last step being physical acceptance of the order. Your statistics tell you that people proceed from step one to step two quite easily, but abandon the cart after step two. Then you know you have to focus on that, and other things are not important. So this is the business part of measuring.
The other thing is the IT part – something that is very important from the CTO perspective, and not so much from the end user's perspective. You have to know how the application is built. You cannot verify each line of code as the CTO, simply because the company and the stack are too big. But you could use the tools which measure the code quality. Those tools are, for instance, measurement of test coverage – i.e. how many lines of code are automatically tested. Usually 80-90% is considered ok, but you have to know it. It's important. Apart from that, there are multiple tools for measuring code quality, which we call static code analysis. It's the analysis of the code which says, for instance, that the developers use good standards. There are no repetitions in code, the code is safe, they are using the latest libraries which don't have vulnerabilities, and you could use external tools for that, but it has to be done. Those two things: test coverage and static code analysis give you good overview of the actual code.
What are the features of good software?
It has to work, simple as that. Lots of CTOs, technical guys perhaps would agree, but their understandings of “it works” may vary. You have to define what it actually means. And it works when people use it. If you have a working application which does performs well from the IT perspective but people don't use it, it doesn't work. So I would say that the key part of a working application is how many people use it. And by that I mean they follow the key path of the application – add to basket, proceed to checkout, just like in the example I talked about before.
Let's talk about the people and the team. What are the qualities of a good software developer?
From my perspective, It has to be proactivity and ability to solve problems. Proactivity means that when they see a problem, they solve it immediately, even without waiting for additional request from the supervisor. This is probably the most important thing. You don't want to work with people who are not capable of solving problems immediately when they see them. In such a situation you have to manage them, and spend a lot of time on managing such people. If you are dealing with a problem solver, this person is very precious for the company. This quality, next to the readiness to learn, is very important. If you have a developer that simply comes to the company every day, spends eight hours and doesn't grow, the company doesn't grow. You are in the same place and the things this person knows are of little value.
What about communication skills? Are they important?
Well, communication is quite a broad term, very open for interpretation. A developer has to be able to communicate, because at the end of the day this person will work in a team, collaborate with others to build software. You have to be able to communicate and openly talk about problems. You have to be able to admit mistakes, and find others' mistakes. It's definitely important, but if you asked what's more important – communication skills or problem solving, I'd say both these traits are equally relevant. If you have an amazing developer who knows and learns a lot, but fails as a team worker, it causes conflicts. Conversely, a developer who is an amazing communicator and is popular with the team but is not able to solve problems, it won't work either. This person might consider a career in marketing instead (laughing).
Do you cooperate with programmers remotely? What are the pros and cons of such a working arrangement?
In our company we focus on growth, and it's easier when you have all people gathered together in one place. So our strategy is that if we work with juniors or medium level developers, they have to be on the spot, in the company. It's not an option to work remotely. Well, they can do it a couple of days per month at most. We usually require them to be here in the office. We also have a couple of senior developers who work remotely and it's ok – those guys are super proactive and competent with the technology. Remote work may prove more efficient for them, but we allow it only in such cases. To sum up, the more experienced the developer, the more time he or she is allowed to work remotely.
Let's talk about the future. What is the vision of the company for the next three years.
What does it mean?
I mean specialize in a particular market. We thought about building an additional offer for business intelligence processes. We also considered focusing on IoT, but this will be the next step. It's actually hard to plan farther than one year when you are a software development company. You can only plan 6 to 12 months ahead. This is what we do.
Which technological innovation do you think will disrupt business in the next 5-10 years?
Looking at the market right now I'd say AI. Artificial intelligence and machine learning are quite popular right now. At Software Brothers we've also built a couple of things utilizing AI and I many new startups are trying to come up with different ways of leveraging this technology. This will be the next big thing, I believe.
What is machine learning?
Machine learning is a process in which a computer, or a machine, acts like the human brain. For example in conventional way of building software you implement specific rules in the software, and the machine acts upon the rules. The rules could be something like: adding these two numbers will give this or that. This is the way regular software is built.
Machine learning is a different approach. You, as a developer, build software which does not have a set of rules. Instead, you teach it how to learn new things. For example, it could be a piece of software which recognizes images. As a part of the learning process, you feed images, e.g. of cats, to the machine. You just say: there is a cat in the image. Then, another image with a cat: there is a cat in another place in the image. After a couple of millions of images, this machine learning process should result in the machine recognizing a cat every time you show it a new image.
I also get my hopes up for the blockchain technology. This will be the second thing which will take over the world. Not from a purely technical perspective, but from the business perspective. Right now, the world of finance works in a way where it's controlled by different entities. There are local banks controlled by central banks which control the money flow, taking commissions on every single transaction we make. Blockchain tries to change that. A group of people came up with something called the ledger, i.e. a global list of transactions, which is open -- everyone can see all the transactions that have been made to date, from the creation of blockchain. You can see all transactions, but you don't see who is the owner of each account. This is pure genius. Bitcoin has an actual monetary value. So right now you can transfer money from one person to another person in a different part of the world without any middlemen or controlling, external authority. This simplifies a lot of things in terms of money transfers. Banks already use it.
Do you invest in cryptocurrencies yourself? Bitcoin?
Yes, I have some coins. But the amount of different cryptocurrencies out there is actually staggering. There are thousands. But it's also about the technology. Currency is just one possible use case for blockchain. Another use case is something called contracts. For example, you can build a contract with actual data, and this contract is executed immediately when something happens, e.g. if you die, an external system will automatically execute the contract. This opens completely new ways of using applications in blockchain technology.
I think it's a very interesting topic. Perhaps we could do another interview focused entirely on blockchain. What else do you think will change? What technologies will fall from grace?
In the history of my work I've seen a couple of technologies die. Take Ruby, for example. It was one of the leading technologies when we started the company. Now it's basically irrelevant. What else will become legacy tech in the future? To be honest, I think physical servers might. Everything is moving into the cloud. Cloud orchestration technologies are quickly gaining popularity. Everybody is using them today. Yeah, I think using regular servers won't be that popular in a couple of years.
That was a lot of things, and a lot of knowledge we discussed. One final question: as a very experienced CTO, what would be your advice to people wanting to become a CTO?
Stay hungry, stay foolish, perhaps. I'd say: bee on the lookout for new things, but don't forget about the business side. Think in terms of the technologies which are available on the market. Consider the technologies, all the new things, from the business perspective, not only from the technical standpoint.
Great, good advice. Thanks for the interview!
Likewise. Thank you very much.