How Do I Progress From a Mid-Level Scripter to Building Complex, Scalable Systems?

Hello! I’d really appreciate some advice from more experienced scripters.

I’d consider myself an intermediate scripter. I’m comfortable with:

  • Modular scripting
  • Communication between systems
  • Basic optimization
  • Cleanup/connection management
  • Basic OOP patterns like Module.new()
  • Type checking
  • Other practices that allow me to build relatively simple games and systems

I can build things like +1 Speed escape obbies, quiz games, tycoons, and similar projects.

However, I’m starting to feel like I’ve hit a wall.


Where I’m struggling

When I look at more advanced codebases, I often see things like:

  • Deep abstraction layers
  • Large-scale code organization
  • Scalable architectures
  • Custom class/framework systems
  • Heavily optimized systems
  • Complex systems that interact with many other systems

I understand many of these concepts individually, but I often have no idea how I’d actually design and implement something like that from scratch.

Games with more complicated systems, such as FPS games, military/simulation games like BRM5, or games like DOORS with procedural room generation, feel far beyond what I currently know how to build.

So my main question is:

What should I actually focus on learning and practicing to get from where I am now to the point where I can comfortably design and build complex systems like these?

I know the obvious answers are probably “practice more,” “read the documentation,” “study DevForum posts,” and “look at open-source projects.”

I completely agree with those, but I’m wondering if there’s a more specific direction or roadmap I should follow.


How important is math?

I also have a concern about math.

I’m honestly not very good at it. My knowledge is probably around basic algebra/linear equations at best, and I’ve never really liked math.

How much do you think this will affect my progression as a programmer/scripter?

Should I seriously work on my math skills alongside scripting? If so, what topics would actually be useful for Roblox development?


Burnout and whether I should switch

I’ve also started to burn out a bit.

Sometimes scripting can be really exhausting and frustrating, especially when I’m stuck on a problem for hours. I’ve even considered switching to VFX, UI design, or another area of game development.

Part of me wonders whether I’m simply struggling because I’ve reached a normal stage of progression, or whether I’m approaching learning the wrong way.


Why I still want to stick with scripting

Part of the reason I chose scripting in the first place was its earning potential.

Being the lead scripter on a successful game, or eventually becoming an owner, just seems really appealing to me. As a scripter, I feel like there’s a path where I could eventually build my own successful game or even my own company/studio — something like Current or Serunite, for example.

I doubt it would be as straightforward to reach that kind of position as a VFX artist or UI designer.

Obviously, there are successful people in every field, and luck plays a huge role, but scripting feels like it gives me a strong path toward that kind of goal.

At the same time, scripting itself is still genuinely interesting to me, which is why I don’t really want to give up on it yet.


What helped you break through?

I’d really appreciate advice from experienced developers who have gone through this transition themselves.

What did you learn after reaching this point?

What helped you break through that “wall”?

And most importantly, what would you recommend someone at my level focus on right now?

2 Likes

just stop doing this. Literally.
In such situations you probably have several guesses what’s wrong, check them.
Doesn’t work? Good, negative result is also result.
Now its time to really understand what’s going on: debug add logs to figure out what’s working as not expected. Logs are better because everything is “recorded”: print values, execution points, make them “readable” so when you read logs you can understand what’s going on. In case of debugger you need keep all these things in head., if you can do it, then it’s great.
If you assumes something place assert to ensure it. Additionally set this flag


so execution fails on first error, this makes investigations easier.

If stuck make a break, have a drink take a nap.
Human’s brain is a problem solving machine, it runs in background by its own and generates options to solve problems.

just make mistakes and learn from them.
Reading books sometimes could help.
But some of them could be hard to understand if reader has no related described experience.

1 Like

son thats not intermediate at all

2 Likes

What group would you put those projects into?

superbeginner

Let’s start at what you’re comfortable with. First, do not set a label on yourself, you can call yourself intermediate, or advanced, but in reality, someone who could be more knowledgeable than you can do the same and break that label. But besides that, your knowledge seems kind of good, but it makes me question a few things.

Firstly, OOP is a paradigm that solves the question on how you can create an object with code. When you do something like foo.new(), it aims to answer how you can create a scriptable object with states and functionality. By how you worded that, it seems you don’t know a lot of use-cases on OOP at the moment, WHICH IS PERFECTLY FINE!!
https://www.reddit.com/r/explainlikeimfive/comments/1fawala/eli5_what_is_object_oriented_programming/

Regarding your questions:

Now, you’re thinking too far into how games make large-scale systems. When you program something you’re unfamiliar with (or familiar), you usually don’t start by abstracting first, abstraction happens when code repeats and you need to separate it’s responsibility. When you see the deep abstraction layers many systems have, they happen for a very specific reason during development, not before. Same goes for scalability and optimization, you RARELY ever optimize first or scale first, you want to first make what you want to make first, then scale and optimize off of that.

As for code structure, you will learn this in due-time. Many developers like having a similar code structure so it isn’t hard to read or find anything within the code. Same with naming and writing. Here is a style-guide that can get you on the right track for that.


There really isn’t much other than to just try. You don’t know how to make anything until you just try and build it first. For a more specific roadmap, just try to build it first, then you can find repetitive code to abstract and bits and pieces that need optimization or moved. There really is nothing more than just to practice sadly.


How important is math?

Important. All of computers are technical and full of math. While you will not always need math, a lot of your time will be on a math problem. That doesn’t mean it’s a problem, afterall there is many resources online that can help you and guide you with math problems, even AI is a tool that can help with that.

Arithmetic, Algebra, Trigonometry, and other concepts are important, but these three will always stand out.


Take a break or code something that you think would be fun or rewarding. Nothing complicated

I started to make smaller systems that I found fun to make. Just note that a lot of times, you will be stuck, and that is very common in programming, but do not hyper-focus on a bug or issue, either take a break, or find something else to code in the meantime until you had a good break away from that issue.

1 Like

Here’s my take:

I would recommend improving your math skills. Advanced scripting requires that you understand those concepts. At least algebra, geometry, and basic physics math. Not many people talk about how important physics is especially since Roblox is a physics engine. Some physics bases mechanics or systems can help spice up the games you make.

Burn out is normal and what I would recommend is take a small break then come back to scripting. Don’t abandon it. Game development should be fun, so if you want to do something else besides scripting, go for it.

For the wall you’re hitting, try to create something that is challenging that gets you out of your comfort zone. Like try to make a simplified version of the games you said you don’t feel confident in making. You will only get better if you try. Search on the dev forum for resources on the things that you struggle with. There will always be somebody who also struggled with the same problem 5 years ago.

As for my experience. I felt in the same position about a year ago. I kept getting burned out, so I would take a month break then be on fire for scripting again. What helped me break through was trying different coding styles, using different techniques for my code base (single script, separated systems, etc), and not trying to reinvent systems that are already open source (packet, ProfileStore, camera shake, spring, signal).

This is just my take. Good luck on your journey!

1 Like

It was just an example. Of course, I can build things like combat systems with different combos, combo chaining, cancels, AI integration, etc.

You said those games wouldn’t count as intermediate, but let’s be honest - it all depends on what your game contains and how well everything is structured.

Programmer here with a bachelor in computer science and over a decade of experience with programming game architectures. I’ve made weapon systems, map generators, and even a 3d renderer off-platform. I believe I can help you out here.

I’m going to split this into two questions focus on:

  1. How do I become better at programming complex systems?
  2. How do I become better at designing complex systems?

You mention things like ‘room generation’ which I consider to fall under that first question, but “complex systems that interact with many other systems” is more of a design question, so I’ll tackle both.

Programming complex systems

You already have a solid amount of experience, but in order to build complex systems you may need to take a step back and look at fundamental ‘building blocks’ that computer science covers as algorithms and data structures are core to building complex (gameplay) systems.

There are way too many algorithms and data structures out there to name or study all important ones, so I’ll just give a small list (from simple to complex) based on a textbook I used in uni, plus my own experience with game dev:

  • Sorting algorithms
  • Stacks and queues
  • Recursion (tail, indirect, nested)
  • Binary Trees
  • Bezier curves
  • Graph theory & Pathfinding (Dijkstra, A-star)
  • Noise (perlin, voronoi)
  • Quadtrees and octrees
  • Neural networks

Some of these may sound boring (or even useless), but in game dev a lot of complex features tend to boil down to combining a few of these concepts:

  • RTS units use pathfinding + flocking behavior to move around.
  • Algorithms like wave function collapse combine recursion with graph theory.
  • Navigation software may use pathfinding to find the shortest path, but also use quadtrees to limit the search space to a local region.

I used geeksforgeeks.org quite a lot during my time in university to help understand some of these concepts and it may help you as well on your quest.

Designing complex systems

This question is unfortunately more philosophical with no clear ‘best practice’. For example, there are two camps to designing complex software, with one of them being the monolithic architecture and the other being microservice architecture. Which one is best? Who knows!

However, within the context of Roblox I strongly believe that splitting everything up into small components that work on their own or are connected with simple wires (i.e. microservices) is better because Roblox is an event-based engine and you can reuse your components more easily as well when you start a new project. Plus, BindableEvents and BindableFunctions are very underrated even though they help create a clear overview of your code base without even having to look at the code. Here are some scripts from a project I worked on recently:

Even without looking at the code or knowing anything about the game you can already guess what’s inside most of these scripts. So if you are new to the project or haven’t worked on it in months, there’s less friction to easing yourself into the code base. And having less friction means it’s easier to add more features on top of this foundation.

You will also have to revisit old features sometimes. If you handle your approach well, you will frequently tweak some old code such that it better supports a new feature more easily. It’s better than duct-taping everything together and keeps complexity manageable.

Now, I will unfortunately tell you that designing game architectures is simply one of those “just program a lot and gain experience” kind of situations. Although, there are design principles that you might want to look at that will help you manage complexity.


As for your other questions:

Hot take here, math is not that important, but still a large benefit. With high school level math (quadratic formulas, soh-cah-toa, etc.) you’ll be able to make whole game. Heck, When I worked on Deathrun 2 and Roblox Deathrun I was still in high school. And these were award-winning games for their time.

In my professional career I have only had to use “hard math” like complex numbers or differential equations a handful of times, and I’ve written very complex systems like a 3d renderer from scratch. However, vector math is super useful within the context of game development and I would take a few days to study some of its concepts:

  • Dot product (2d and 3d)
  • Cross product (3d)
  • What a CFrame in Roblox actually looks like under the hood
  • Rotations (rotation matrix, euler angles, axis angles, etc.)

I’ve experienced exhaustion from programming quite frequently. For me personally I manage to keep exhaustion in check by keeping things simple. It’s easy to start work on new thing, like a paintball gun, and immediately create properties for ammo count, projectile speed, damage fall-off, fire rates and so on. That can get very overwhelming because I want to work on multiple things at once and I can’t juggle all of it. But if I limit myself to just making a single bullet work before I move on to more features I will have something ready for testing sooner and I can use that as a starting point for the next feature.

2 Likes

into hello world project folder

Just being able to recognize these things is a huge first step.

The best generic advice I think I can give you is to qualify as best you can the “wall” that you’re hitting. What exactly about your current practices are not scaling to a more complex game? Where do you feel like you have code that’s either redundant, or not general enough to be extensible, or not data-driven enough to be low maintenance?

All of these things you list should be done on an as-needed basis, IMHO. Don’t make something overly complex just because you think that using feature X is more “advanced” or “efficient”, or proper, etc. Add complexity only when you personally see real appreciable benefits from doing so. I personally feel that premature generalization can be every bit as evil as premature optimization. Making everything super general and having lots of abstraction layers you may never need just makes your code less readable. In short, keep things as simple as you can and let your game idea suggest the architecture, not the other way around.

2 Likes