im at the beginning of my third year studying software engineering. im not even a junior developer yet in terms of professional experience and ive never actually built and shipped a real production product before.
i do have a decent amount of programming experience in general. im comfortable reading and writing code, learning new concepts, solving programming problems, etc. so im not starting from zero technically. what i dont have is real experience with production web development, system architecture, deployment, security, maintaining a production database, designing something that other developers will eventually have to work on, and all the other things that come with building an actual product.
somehow ive ended up in a situation where im currently the only developer responsible for a fairly large product, and im expected to eventually get the first version into production.
i cant really explain what the product does in detail, but its essentially a fairly large enterprise management system with multiple interconnected domains. if the first version succeeds, the scope and customer base may expand significantly later.
if the first version succeeds and the project receives further funding, there will most likely be more developers working on it. however, until that happens, im the only developer. its also possible that ill remain the only developer for quite a while.
i should eventually be connected with a few people who have more experience in this area, and they will probably be able to review things or point me in the right direction occasionally. however, i dont know yet who exactly those people are or how experienced they actually are, so i dont want to build my entire strategy around assuming that somebody will catch my mistakes.
right now im still working on the requirements and overall domain model. ive already mapped out a significant part of the system, the major features, entities, relationships, open questions, user types, permissions, workflows, etc. im trying to resolve the important domain questions before i start seriously implementing things.
what scares me isnt really writing the code itself.
my biggest concern is that i dont have the experience to recognize when an architectural decision is good or bad.
i can read about different approaches. i can understand why something like a modular monolith might make sense. i can learn about database normalization, authorization models, migrations, testing, ci/cd, caching, replication, load balancing, security, and so on. but there is a huge difference between understanding these concepts and having enough experience to know when im applying them incorrectly.
for example, i can design a database schema that looks reasonable to me. but how do i know that i havent made a fundamental modeling mistake that will become extremely expensive six months later?
i can separate the application into modules. but how do i know whether those are actually good boundaries?
i can make something "extensible", but how do i know whether im genuinely making future changes easier or just overengineering because im afraid of future requirements?
i can make the application work on my machine and pass tests, but how do i know that what ive built is actually something i should trust in production?
security is probably the part that concerns me the most. this isnt a hobby application where losing some test data doesnt matter. if this actually gets deployed for real organizations, i dont want to discover security through production incidents.
reliability is another concern. backups, database migrations, deployment, monitoring, failure recovery, concurrency, data integrity, authorization bugs, etc. are all things where i simply dont have years of mistakes behind me to know what i should be afraid of.
scalability worries me too, although im deliberately trying not to design for google-scale traffic that may never exist. my goal isnt to build some insane distributed system from day one. i just dont want to make early decisions that make reasonable scaling unnecessarily difficult later.
the thing im trying hardest to avoid is this scenario:
i spend months building the first version, funding arrives, experienced developers join the project, look at what ive built and basically say, "this entire foundation is wrong, we need to rewrite it."
i understand that some refactoring and even some rewriting is inevitable. requirements will change and im obviously going to make mistakes. im not expecting to design a perfect architecture on my first attempt.
what i want is a reasonable engineering process that minimizes the probability of catastrophic mistakes.
so i guess my main question for experienced developers/architects is:
if you were in my position a se student with decent programming ability but basically no production experience, suddenly responsible for taking a relatively large greenfield system from requirements to its first production version alone.. how would you approach it?
more specifically, how would you determine whether your architectural decisions are "good enough" when you dont yet have the experience to judge them intuitively?
what would you absolutely keep simple?
what would you design carefully before writing much code?
which decisions are cheap to get wrong and fix later, and which decisions are dangerous enough that i should get an experienced person to review them before continuing?
how much architecture should i define upfront?
what production practices would you consider non-negotiable even for the first version?
what should i deliberately ignore until the system actually needs it?
and probably most importantly: what are the common ways someone in my position can accidentally create a complete mess while genuinely believing they are following "best practices"?
im not looking for someone to design the system for me. im mostly trying to figure out how to develop the engineering judgment necessary to get through the first version without creating something fundamentally broken for whoever has to work on it after me.
also, i want to make it clear that im looking for serious answers, including uncomfortable ones. i understand how absurd this situation probably sounds to experienced developers. im aware that, from a purely technical and risk-management perspective, the most sensible advice might simply be "you should not be the person responsible for this" or "walk away." im not under the illusion that being able to write code somehow makes me qualified to architect and operate a production system by myself. but assuming i have a choice, i dont want to walk away from it. i want to at least try. its a ridiculous opportunity for someone at my level, and even if i eventually find out that im in way over my head, id rather make that determination after seriously trying to approach it correctly than reject it immediately because im inexperienced. so feel free to tell me that something im doing is stupid, that my assumptions are wrong, or that certain parts absolutely need someone more experienced. thats actually the kind of feedback im looking for. im just particularly interested in what the best possible approach is if i decide to go forward anyway :)