paint-brush
My Journey as a Solidity Developerby@alcueca
2,328 reads
2,328 reads

My Journey as a Solidity Developer

by Alberto Cuesta Cañada November 27th, 2023
Read on Terminal Reader
Read this story w/o Javascript

Too Long; Didn't Read

I began coding smart contracts five years ago, at the ripe old age of 38, and went from having no professional programming experience to building cutting edge smart contracts.
featured image - My Journey as a Solidity Developer
Alberto Cuesta Cañada  HackerNoon profile picture

I began coding smart contracts five years ago, at the ripe old age of 38, and went from having no professional programming experience to building cutting-edge smart contracts.


Many have asked about how they might follow a similar path. While there isn't a particular resource or secret to success, there is a pattern that you can also use.


Here's my journey.

The Beginning

In 2018, I had recently moved with my wife and young child from Melbourne to Lisbon, so that we could all be closer to family. I had a decent career as a supercomputing engineer and solution architect for investment banking and thought that Lisbon would be large enough for me to find a job.


Soon, I found that the job market in Lisbon was in absolutely no need of supercomputing engineers and that my solution architect background would only get me boring middle-manager roles.


I had been interested in blockchain technology for a long time, but never really got into it. Then I read an article about how hard it was to hire blockchain engineersand saw an opportunity.

I wrote to the author to thank him for the inspiration to look for a job in blockchain. We got into talking, and along with a friend of his, we decided to start TechHQ, a blockchain consultancy with lofty ideals. Within our three-person consultancy, I would be the tech expert.


I had roughly a month to transition from being a corporate Solution Architect to creating blockchain-based projects we could sell to clients.


With no prior experience, I would be the tech expert.


One of my assignments was to write blockchain technical articles to bring in clients, the same as the article that had brought me to meet my partners. Writing these articles and being public about what I learned would be key in my career.


My very first article would be about getting started at that job and details my first steps in blockchain. My introduction to Solidity was completing the CryptoZombies tutorial.


Our first business opportunity arose a few months later with a project for CementDAO. We had onboarded Bernardo, a young and talented local hacker, who at some point asked for help with the math involved. I didn’t know much, but I could try to make Fixidity work to build a custom AMM curve using logarithms.

That task took me about a month, with Bernardo teaching me solidity, javascript, git, and truffle. I knew nothing, really. The results were less than stellar—overengineered and inefficient even by 2018 standards. In my ignorance,
I genuinely believed it was top-tier.


The results were less than stellar—overengineered and inefficient even by 2018 standards


Having acquired some solidity coding capabilities and with only Bernardo skilled in frontend development, I took over the smart contracts for CementDAO. Unfortunately, due in part to the inefficient implementation of Fixidity, we never progressed to the mainnet stage.


As we searched for more clients, I continued to experiment so that I could write more articles, because that’s how we expected to get clients. Eventually, I came up with an interesting idea for a supply chain solution. Although this idea wasn't successful, it led me to come up with a role-based access control contract that was actually decent.


Right when bankruptcy seemed imminent, this very code secured us another client: AllianceBlock hired us to code a blockchain issuance platform with a number of permissioned roles.


Despite terrible performance on the smart contracts, they only needed a proof-of-concept on Ganache, which we delivered. I learned important lessons about smart contract architecture, on-chain storage, and frontend integration.


Despite terrible performance … I learned important lessons


We again had no revenue, and we were very short on cash. I decided to waive my salary and buy a third of the company so that we wouldn’t go bankrupt. I didn’t think we had a great chance of making it as a company, but it didn’t matter, I was coding, I was learning, I was having fun. It seemed like a cheap deal to get a great blockchain experience.


While we looked for more clients. I collaborated on hq20-contracts with uivlis, developing and documenting various solidity patterns and use cases. Of course, I wrote many articles about them.


The Turning Point

Eventually, the company ran out of money again, and we all had to start looking for jobs. Then, I stumbled upon an open issue in OpenZeppelin. They needed something like a linked list, and I had done it for CementDAO first, then for hq20-contracts, and even wrote a nice article about it.


After discussions with Nventuro, my contribution was integrated as EnumerableSet.sol in one of OpenZeppelin's releases. I had made it. Some of my code was finally live. And with OpenZeppelin no less.


Encouraged by this success, I tackled OpenZeppelin's challenge of revamping their access control contracts. I had done cutting-edge work on the topic of the failed supply chain application, perfected it with AllianceBlock, and again written a thorough article on the topic.


I knew I could do it. This eventually led to the publication of AccessControl.sol in the 3.0 release of open zeppelin-contracts, which again was a huge milestone in my career.


I had made it. Some of my code was finally live. And with OpenZeppelin no less.


I still needed a job, and I became a Blockchain Instructor for BeyondSkills. I would have to create online courses to teach solidity programming. As usual, I wasn’t really that qualified for the job. I knew how to code some things, but I had huge gaps in my knowledge. Until then, I hadn’t even deployed a contract myself.


I had to talk on video and do tutorials about solidity development. I also had to be thorough because the courses needed to be consistent. The same pattern as with the articles applied here; I was learning things and immediately teaching them, and that led me to learn a lot about solidity development.


Unfortunately, the company shut down due to legal challenges, and that content was never made public. Maybe it is better that way.


I was learning things and immediately teaching them and that led me to learn a lot about solidity development.


While recording those courses, I was approached by Allan Niemerg for assistance with fixed-point math for a whitepaper he had. Unlike the other many people with an idea who contacted me at the time, Allan had money from a VC fund I never had heard of, Paradigm, and I took him seriously.

By then, I had coded Fixidity, published several articles about fixed point math, and tried to help both OpenZeppelin and the Solidity core team, unsuccessfully. I also knew that AMMs with logarithmic functions were not trivial, and knew of one Mikhail guy that we could contract to make them work.

I was the first hire at @yield. I convincedAllan to hire Bruce from my TechHQ times as a frontend engineer, and all three of us, with the help of a very young Georgios, successfully launched Yield v1 on the mainnet.


I learned a lot — about collateralized debt engines, protocol integration, rounding errors, off-chain permits, flash loans, and gas efficiency, to name a few. Like most of my attempts at doing something I had never done before, it wasn’t a great success.


One of the things that we learned is that, unlike Uniswap, we would need to make changes to the protocol searching for product-market fit. Since our contracts were mostly immutable, we soon started work on Yield v2.

Fast Forward to Today

Yield Protocol v2 was live for about two years, and I learned much from it, but now, it is closing down. While our technical work was top-notch, fixed rates don’t have product market fit in decentralized finance as of now.


Out in the wild again, I’m choosing the difficult path again and instead of getting another Lead Engineer/CTO role, I’m setting myself as an advisor to other startups that might benefit from the lessons I learned. There are no manuals on how to do this, and I know that the gaps in my knowledge are vast, but so are the opportunities for improvement.


By now, you should see the pattern. I stay just outside my comfort zone, often failing, but always teaching others about what I learn. This very article could be seen as an example.


If I’m lucky, I will find something that someone wants, like CementDAO, AllianceBlock, contracts for OpenZeppelin, BeyondSkills courses, and finally Yield. If I can’t find someone with a need, there is always something to learn and then write about, like all of my articles.


I stay just outside my comfort zone, often failing, but always teaching others about what I learn.


The trying, failing, learning, and teaching loop is not my invention, but it works. It often makes me look like an idiot, and maybe that’s the hardest bit for some. Myself, I wear my failures with pride.


Thanks for reading. I hope this will give you some inspiration. Good luck.