Justin Bebis is a self-taught programmer and founder of Byte Masons, a prominent team of builders in the Fantom ecosystem acclaimed most recently for their innovative token launch. In this first of a series of articles, Justin shares his valuable perspectives on learning paths you can take to becoming a Fantom developer. In future articles, Justin will reflect on his experiences growing a Web3 business, fostering engaged communities, and more.
I’ll start this article off by stating an essential fact: for me and many others, developing software on Fantom has been the greatest work experience of our lives. I’ve been building Reaper.Farm for nearly a year now and serve as a technical advisor, architect, programmer, or security engineer on more than ten software projects. I also appear on Fantom Unchained for 90 minutes every week and act as Chief Executive for one of the biggest teams in Defi - Byte Masons. Suffice to say, I’ve been around the block - I live and breathe Defi.
In this article, I describe the different paths you can take as you venture into the world of engineering on Fantom. I have broken these paths into 4 types of contributors and will highlight skills important to being successful. The paired graphs sort broad skill types by importance, and I will drill deeper in the body of each section.
Rarely will an engineer’s skills perfectly align with these graphs, but whether you are a newbie looking to plot your path to a Web3 dev job, or you have a business idea and want to assemble a team of builders, this guide will help you understand the different types of roles that successful engineers can play.
I. Skill Types:
Programming skills refer to one’s ability to implement systems in code. Anyone can do it, but doing it well takes a tremendous amount of effort, study, and practice. A good programmer has sharp math skills, understands low-level logic, and is able to apply these strengths to any programming language, tool, or domain.
Design skills are rooted in an engineer’s creativity and ability to think about problems in unique ways. A designer’s output is solutions, and their work can make an entire organization run smoothly. An understanding of both abstract and technical design concepts is important, and the best learning a designer can do is analyzing and critiquing other designers’ work.
Leaders set standards for their team, coordinate individual workers’ efforts, and facilitate execution of long-term vision. In software, they must maintain a clear picture of the end goal and ensure everyone has what they need to do their part. Disputes must be resolved, research must be directed, and resources must be allocated. A leader needs to have broad enough knowledge and experience to accomplish these tasks in a way that makes their team happy and productive.
Putting on your Analyst hat means seeking to understand something as deeply as possible. This means asking the right questions and knowing how best to find their answers. An architect may ask why development is taking so long and analyze the complexity of the programmer’s work by looking at call graphs and dependency graphs. A security engineer might analyze the company’s control framework to look for potential weaknesses by reviewing each department’s processes. Being a good analyst often means having a lot of experience to draw from and understanding and identifying patterns.
Communicators help to fill knowledge gaps between departments, team members, and users. This is an important skill for anyone, but especially valuable on engineering teams. This is because engineers often use difficult-to-understand jargon, as communication between professionals is founded upon centuries of ideas and abstractions. Extremely complex or difficult to explain concepts are boiled down to a single word, and mutual understanding is assumed. Translating this jargon for non-technical team members or end-users (or vice-versa) is an extremely important skill and requires a broad understanding of your business domain.
An architect analyzes problems and designs solutions by effectively allocating development resources to accomplish company goals. They are usually the most senior members of the software team and are extremely important to the success of any technology business.
Architects should value breadth of knowledge and understand their domain as completely as possible. It’s especially important for architects to know what they don’t know, and less so for them to understand every tiny detail of the technologies they’re working with. There’s no perfect solution in Software, so architects must analyze tradeoffs and choose least-worst solutions based on their design goals. Mastery of individual languages or tools should be left for the engineering team, but domain-specific skills are worth gaining proficiency in.
Nearly as much as they are analyzers and designers, architects are communicators and leaders. They tie business and production units together, understand the problems their teams and users face, and create optimal solutions. The best architects should have a background in software engineering and a good enough understanding of implementation to properly direct their programming team.
On Fantom, an architect needs to know the ins and outs of all the leading dApps in their ecosystem. They need to know where the best interest rates come from, which tokens are in high demand, and how they can use other protocols to enhance their system’s viability and speed up development. An architect’s decisions will play an important role in finding product-market fit, and understanding their network and domain is an important part of that.
For aspiring architects, keep your programming skills sharp by assisting the development team with small tasks or writing infrastructure/operational code. Also, ensure your content feed is carefully curated so you can stay on top of changes and standards in the industry. Make sure to keep open lines of communication with architects from other projects so you can share knowledge and information openly, and closely follow the development of top projects in the space.
A programmer implements the architect’s designs and understands how best to do so. Most other skills take a backseat to raw software engineering prowess for a programmer, but the best leaders and communicators will eventually find themselves directing teams and taking a more analytical/architectural role.
Where architects focus on breadth of knowledge, programmers focus on depth. Their duty is to master the technologies chosen by the architect and figure out how best to use them in order to implement the system. A good programmer will find themselves thinking about design just as much as the architect, but at the individual function and module level as opposed to the component and system level.
Programmers are artisans, and good ones are born from careful study and practice. Often, their work will make or break a project and their decisions will have a major impact on its long-term viability. In software, the tortoise beats the hare every time. You’ll find tortoises researching design patterns, carefully reviewing code, and thinking hard about how their work will affect maintainers, UX designers, DevOps, and security engineers in the years following shipment.
On Fantom, a programmer is most often a code reviewer and deployment specialist. This is because writing novel DeFi systems is expensive and time-consuming, so borrowing from open source projects is the best way to start up. Making small optimizations to better target your market, re-writing deployment and infrastructure scripts, and understanding your system enough to maintain and secure it is a programmer’s primary responsibility throughout the early stages of growth.
As their organization finds its market, boosts revenue, and extends its runway, programmers will often find themselves wearing many hats. You’ll see a lead developer act as an architect and security engineer, and many times a technical writer for their project. This is often the most challenging period for a fledgling team, as issues surrounding overwork, commitment, and growth arise. Make sure you understand your goals before beginning your DeFi journey and bring friends!
The Security Engineer
A security engineer identifies and mitigates risk in the architect’s designs and programmer’s code, as well as within the organization as a whole.
Security engineering requires a unique mindset and sharp skillset. Your knowledge must be broad and deep, spanning every common dependency and vulnerability recorded in DeFi, as well as some of the less common ones as they relate to your technology stack. Experience is a security engineer’s greatest asset, and analysis is their greatest skill.
Where programmers and architects seek to build, security engineers seek to dismantle. Finding weaknesses, analyzing risk, and thinking about how it can be exploited is the security engineer’s role. If you can develop an adversarial mindset and strong analytical skills, there are a number of security fields you can go study:
Operational Security engineers reduce risks inherent to developer operations by automating security processes and developing control frameworks. Your duty will be to set organization-wide policies and ensure they’re followed at all times, as well as ensure strict regulatory compliance.
This career path is excellent for the technical non-programmer, as it can begin with operations and management and evolve into a security-focused role.
Formal Verification specialists ensure math operations execute as specified, and outputs are valid given any input. Their job is to make sure your algorithms scale exactly as intended and that any math within your software behaves properly in any context.
This career path is excellent for mathematicians and requires very simple functional programming to execute.
Static Analysis specialists ensure code behaves as expected and can handle errors and edge cases. Engineers must leverage techniques such as mutative and symbolic analysis to secure control mechanisms, data security, and interfaces against unexpected behavior.
This career path is excellent for experts in logical analysis and benefits greatly from programming skills. Understanding how compilers and execution environments work is very important to develop fuzzing tools.
Manual Analysis specialists ensure that systems are implemented correctly and execution context is safe. Their goal is to direct the efforts of other security engineers by highlighting high-risk patterns and architectures as well as sussing out issues with implementation or bugs.
This career path is perfect for programmers interested in security and is often a role taken on by experienced members of the programming team.
On Fantom, security is a whole-organization effort, led by your chief of security. A system is only as strong as its weakest link, and there's no room for weak links in an industry as high-risk as DeFi. Business developers will find themselves designing control systems for CRM and collaborative software and marketers will find themselves helping users with their OpSec. Every person on the programming team will gain strong code reviewing skills and, over time, find themselves wearing more and more of a Security Engineer’s hats.
Aspiring security engineers need to learn the basics first. Learn about adversarial thinking, access control, input/output control, and risk management. As you gain confidence in your understanding of these concepts, start to learn about common attack methods within smart contracts and blockchain engineering. Read post-mortems and audit reports and keep in tune with DeFi exploits as they happen. Read the latest security research from firms like Trail of Bits and OpenZeppelin.
The Technical Assistant
Technical writing, quality assurance, market research, and customer service fall into the technical assistant’s domain. Often, technical assistants double as business developers or fulfill roles elsewhere in the company. They can alleviate much of an engineering team’s stress by taking on important low-risk tasks.
Becoming a technical assistant is the best way to break into an engineering team while you study and figure out which path you’d like to take. Absorb all the knowledge you can and attend every meeting. Offer to take on small tasks and projects as you start to feel more confident and make yourself available to users for questions.
On Fantom, technical assistants should focus on educating users, enhancing protocol documentation, and testing new products. Equally important, however, is prioritizing learning and gaining new skills to help your team in more meaningful ways. How you approach this phase of your development as an engineer will shape your practice for years to come - use this time to understand everyone else’s job so that you can become the best teammate possible.
Whether you’re a founder, developer, or someone looking for a new beginning, Fantom has a lot to offer. Its close-knit community and grassroots origin has allowed the network to maintain a stellar user and developer experience, with TVL that rivals chains with five times the market capitalization. This means lower gas fees and a down-to-earth user base with all the tools you’d expect to find in a DeFi ecosystem. Working on Fantom and with other Fantom developers has been a life-changing experience and I hope some of the people reading this can join our effort to build the future of finance.
Engage with Byte Masons