What competencies are in demand on the market today and how is the work of professionals in the Web3-segment structured? We explore this in a new cycle of articles and interviews, “What to Become.” The subject of the first piece is game developer Andrey Pelipenko, with whom ForkLog’s editors discussed how smart-contract programming differs from traditional IT.
ForkLog: How did you get into the blockchain industry?
Andrey: I have been coding since childhood, I have been making games for 30 years, participated in various contests, and wrote our own engines with friends. At some point this grew into the indie studio MadSword, where I was a founder: we released more than a hundred games. But by nature I am a tinkerer and always look for new challenging directions of development, where there may be few specialists, where you must figure everything out yourself and there are no ready-made solutions. And so in 2017 I entered blockchain, created my first game Blockchain Cuties, which turned out to be quite successful: it spent a long time in the top charts and now runs on 9 blockchains.
ForkLog: People have a fair idea of what smart contracts are, but how would you explain to a layperson why they are needed?
Andrey: If blockchain is a payments network or a bank, then a smart contract is a kind of immortal and incorruptible notary who can serve thousands of clients simultaneously 24/7. It ensures that the obligations undertaken by the parties to the transaction are fulfilled. It is important to understand that this notary is typically limited only to the data present on the blockchain.
ForkLog: How does creating smart contracts differ from what developers typically deal with?
Andrey: As soon as I started doing this, I was struck by the purity of the Solidity programming language and the framework for developing smart contracts: no side effects, no problems related to concurrency, — no pains of classic development. There isn’t a huge zoo of frameworks, and you don’t have to think about what CPU architecture you’re writing for or what browser you’re targeting if we’re talking frontend. It’s such academic programming, everything is clean and concise, a joy to write. Solidity is a fairly simple language, but there are a dozen nuances you need to know to avoid being hacked.
ForkLog: One of the features of a smart contract is immutability. What’s written on the blockchain can’t be rolled back. How does this complicate a developer’s life?
Andrey: It’s one of the most challenging aspects. Once you deploy a contract, you can’t change it unless the contract itself provides for that. On the one hand, this is very good for users: all rules are transparent; if you can read the code, you can verify that it does exactly what is expected. But for a developer this is inconvenient: fixing a bug or adding new functionality isn’t something you can do casually. There are different ways to tackle this. You can create a modular structure: split the smart contract into a dozen smaller pieces and swap out the implementation of a particular module. You can implement proxies, where you have an interface smart contract and the functional part you swap out — as, for example, is done with USDC. It might seem wrong because it violates the “code is law” principle, but in this case people trust the brand more than the script.
ForkLog: How mature are the development tools now, compared with other areas of programming?
Andrey: Formally, the Solidity compiler is still in alpha, but I have been using it for six years — and it’s been fine. Of course, some functionality is missing, but there are no critical issues.
ForkLog: Tell us about the daily tasks of a smart-contract programmer. What do you usually have to do?
Andrey: Earlier it used to be ICOs, some sales: selling something and distributing it among people. Now it’s NFT collections, much rarer — sometimes more complex logic, GameFi, DeFi. If a task is computationally heavy, it isn’t executed on-chain; it’s offloaded to separate backends and the functionality distributed: for example, data is stored on-chain, while heavy computations are done off-chain. The real tricky part is synchronizing the work of the smart contract and the backend: how the smart contract verifies incoming sources. Initially decentralization enthusiasts planned that everything would happen on-chain, but they quickly realized that it would be too expensive, so responsibilities were distributed and we moved away from pure Web3.
ForkLog: Can someone without a programming background, for example a lawyer or accountant, dive into smart-contract development?
Andrey: I think it’s entirely doable. There are many teams trying to launch something on the blockchain, for example NFT — you can partner with them, look for freelance work. But I would advise finding a mentor who can tell you what to do and what not to do. There are cases like The DAO hack, which all experienced developers know about, but newcomers will easily stumble. A good entry point is writing tests for smart contracts. Here you can see what and how things work, understand the nuances.
ForkLog: A huge amount of technical information hits a novice; they hear scary terms like “Merkle tree”, Solidity, Rust. How not to get lost in all this?
Andrey: I once gave a lecture for crypto enthusiasts and investors, thinking I would explain how to write and deploy smart contracts, but ended up spending more than an hour explaining to them what gas is and why it’s needed. Start with the basics: how transactions are created, the order in which they are processed, how data is packed in them, what miners do, and so on. Then the basics of programming: how loops, conditional operators, and variables work. After that, tackle Solidity; it covers a large number of networks: Ethereum, Binance Smart Chain, Arbitrum, Optimism, Polygon, and others. It resembles JavaScript; it’s fairly easy to pick up.
ForkLog: And what about mathematics and cryptography?
Andrey: If you’re a frontend developer sending requests to a server, you don’t necessarily need to know in detail how the TCP/IP protocol works. The same goes here: you don’t need to understand the intricacies of RSA or ECC encryption algorithms; you should understand, at an abstract level, what happens.
ForkLog: What would be a good first project for a beginner smart-contract developer?
Andrey: Best to start with the Zeppelin library for Solidity; there are ready-made templates for working with different token standards, and try issuing your own ERC-20 token — it’s extremely easy to write. The next step is to experiment with ERC-721 and release your own NFT collection.
ForkLog: Do you think the industry needs juniors at all?
Andrey: Most likely, if an employer is ready to hire someone without experience with smart contracts, they expect that person has experience in other areas — frontend or backend. In general, juniors are distinguished from seniors by knowledge of nuances: the syntax is simple and you don’t have to learn for long. Demand for smart-contract developers is evident from market salaries, ranging from $40 to $250 per hour, so good developers are needed and command high prices. I would advise juniors to go into testing to pair with an experienced developer.
ForkLog: Would you hire a novice?
Andrey: That’s a tough question. Not a lot of code is written, and responsibility is high. The industry has many startups and few large companies, so there are no resources to train newcomers. So everyone looks for experienced developers who can cover gaps if needed. I would point someone to relevant Discord channels to find like-minded people and gain practice. But if someone is willing to write tests and show themselves, perhaps I would hire them to see if they can think. In our studio I write the smart contracts; it’s hard to delegate. As a founder I know game mechanics and understand product logic well; in our case that is crucial. My experience shows that only one in five Solidity programmers can be trusted to write smart contracts.
ForkLog: How does traditional game development differ from GameFi?
Andrey: Ideologically I am drawn to crypto as an idea, that you control your own funds and your bank is always in your pocket. I work in blockchain game development to popularize the technology — first. Second, players are not dependent on large platforms and do not pay them fees. Here there is a free market, practically the Wild West: few regulations, and because of this the industry has many scams, but on the other hand you are not restricted in experimentation. Because smart contracts are open, you can, for example, take and extend another game: for instance you have CryptoKitties, and you make races with their NFTs.
ForkLog: What does GameFi give players?
Andrey: Fair and transparent rules. You can read the smart contract and verify that your chances of winning are exactly what they are, unlike traditional casinos where you have no idea what goes on under the hood.
ForkLog: By the way, there is a common view that the entire GameFi industry is a casino and nothing more. How true is that?
Andrey: I would divide projects into three categories. The first are genuine gambling projects with no tokens; people come and play. I’m not very interested in that. There are pyramid-style games: flashy projects, the most talked about, and they usually collapse within a few months. And the third type is long-term projects that grow for years. But I haven’t yet seen games with a balanced economy. The problem with GameFi economies is the open market. In a normal game a newcomer would progress slowly and gain bonuses for achievements, but in blockchain top players can simply give them a ready starter pack, boosting them by, say, ten levels. If you can exchange in-game time for resources, then bots appear, they farm resources and sell them to players, causing inflation of the in-game token. Designing an engaging game with a balanced economy is a challenge for the future.
ForkLog: Can you imagine a blockchain game as popular as World of Warcraft or, for example, Magic: The Gathering, which seems to be begging to be blockchain-enabled?
Andrey: Blockchain is a fairly steep entry; you need to set up a wallet, go to an exchange, transfer funds, then explain to a bank where they came from. There are few people in blockchain. What you described are giant-player projects. Major players don’t enter the market due to regulation concerns: they release a product and later they’re told it’s not allowed. Mark Zuckerberg and Pavel Durov were told not to issue their cryptocurrencies, and they understood.
ForkLog: How, in your view, will the industry evolve in the coming years?
Andrey: I have more of a wish than an expectation — to take a step toward the metaverses. Not in terms of land ownership, but toward a single, coherent platform for various projects. In 2018 Engine created a unified smart contract where you can store multiple currencies and NFTs from different games, and gamers can use their in-game belongings across games. I would like development to head in that direction: roughly, crafted a sword in Minecraft, then imported it into WoW. In such a system two games could agree on transfer rules for items, experience, and even characters.
ForkLog: Why should developers go into GameFi, and why should they stay in traditional game development?
Andrey: The main advantage of GameFi is a paying audience. In traditional gaming, only one in a hundred pays. The downside is the lack of sensible regulations: there’s a constant risk of prohibition. If you have a year where a hundred people work on a project that ends up in the bin, you should think hard whether it’s worth it. I’ve spoken of a high entry barrier; add marketing difficulties: partly advertising on Google has only recently been allowed.
ForkLog: What are you currently working on in the studio?
Andrey: We’re making blockchain cockroach races — Roach Racing Club. In this game you can breed to produce your champion. We have several original ideas, such as real liquidation of NFT roaches if they don’t run.
ForkLog: How is GameFi faring amid the protracted crypto-winter?
Andrey: If you’re thinking of launching something in this segment, now is the time. Brace for a crypto-winter.
