Website development engineering and workflow

Hello fellow developers!
Just like I mentioned in the topic, and I apologize if this has been faced already, but I really couldn’t find any REAL answer on this, I would like to ask / talk about the workflow of building a website or a web application.

Suppose, for example, I have one client who asks for a simple “showcase” website, the typical home, about, contact site, and maybe he also wants a platform to be able to publish news and posts in a CMS fashion. Out there there are lots and lots of tutorials about specific technologies, like how to use React or Laravel or Java or PHP and so on, there is one for anything; what I could not really find was some guidance about how to proceed to engineer all of that. For example:

  • How does one plan the database design, especially knowing he needs flexibility in case in the future new data arises (maybe for a data science department to tap into)? How does he even choose between SQL and NoSQL for a website so “simple” but at the same time with such a need for flexibility?
  • How does one plan the routing of the site?
  • How does one choose where to deploy?

Many times since I have been here, I found myself starting Django or Express projects, and at some point realized I didn’t really know where I was going, because I lack the experience to face these things beforehand?
Any answer (constructive, remember I’m a noobie) will be hugely appreciated.

So the general concept around “engineering” that stuff is called Software Engineering. (which sounds obvious but let me break it down hehe)

Software Engineering usually consists of more than just “coding”. It encapsulates the entire process of building software. We will use the example you gave, where the client more or less wants a CMS style application for their business. So as a starter you’d probably proceed with the following in vague steps:

1. Determine the problem the client is trying to solve with software.
“Why do you want a site? What goals do you have for this site? What sort of user’s would you want to reach with this software?” etc etc. You can think of a whole bunch of questions to get an idea of the mindset of your client. If you noticed this has nothing to do with the implementation, rather it has to do with what the client wants/needs. Its possible you and the client might find different requirements by going over the problem together, this is normal, as its very easy to get hung up on one thing or another and not realize what anyone is trying to solve.

2. Determine the requirements for the project, which will more or less solve the problems you’ve understood from the first step

This is where you can define what the software will accomplish, focus on, need to do from the list of problems. Its possible some problems wont be covered by your software due to one reason or another. Its also here you usually start formulating an idea in your mind how much “work” will be involved, and how much it will cost. A CMS system can be really simple, or really complicated. A key thing to consider is how complex something could get, and if building a custom solution is better than just providing an off the shelf one yourself.

3. Determine how to implement the defined requirements

This is where you plan out the actual coding/architecture/technologies to match the requirements you have. Going back to the fact a custom CMS system might scale to massive complexity or stay fairly simple means there is a wide range of possible routes you could take, all the way down to building nothing and using an existing off the shelf CMS system with your client.

4. Implement

This is where you take your plannings and implement them. Odds are you will need feedback over time, depending on how you want to execute your project workflow, this could include continuous updates to the client (agile) and updates over short sprints, or 1 larger update near the end (waterfall).

5. Get feedback, tweak, learn

You could end up going back to a previous step during this step, or you could be done. I purposely made the overall process more vague in terms of when and how often you want to execute these steps.
I personally like taking a more “agile” feedback driven approach. This means deploying and getting feedback early, often and quickly so you can keep iterating. This is what a lot of larger tech companies do and you could do to, but again it depends on what your building and your own experience in executing such tasks this way. Do what you can how you know, just keep in mind that you are building for the client first and foremost.

These aren’t rock solid steps, and if you noticed I more or less 100% skipped over actual technical details, as they are inherit to the underlying goal of building a solution to a problem using technology. For specific questions such as:

The answer more or less lies with your understanding of the client needs, and your ability to answer to the client needs with the skills you know and have.

Even a more complex problem like “how do I design my database”? All goes back to the client needs. Technically even the existence of a database, or you building any software at all could be on the table, from there what the client needs or could need should all be taken into account when building your database models and schemas.

I think the biggest misconception is that there is a “right way” to do every single project. There are usually multiple ways to do the same thing, and solve your client’s problems. The “most right” way is understand the underlying problem and execute to the best of your ability a solution that solves that problem, learning and iterating as you go along to keep getting closer.

PS. if you have more specific questions about what you could do or should do, getting more focused feedback is usually better over time. From your client and from the community as a whole. :+1:


One way that might help is to distinguish between stand alone technologies and full stack technology Frameworks such as laravel.

The out the box install of the laravel framework has a set of default options, that effectively select a certain combination of technologies for you. Furthermore the laravel developer community tend to use conventions, such as resourceful routing, to act as a tried/tested/consistent way to use the framework.

One of the reasons Frameworks are popular is because they make some engineering decisions for you and provide guide rails for you to make other decisions. They also have a range of support tools and services the community has built to help - e.g. laravel forge is a hosting wrapper to make it super easy to deploy laravel apps to cloud servers, preconfigured and optimised for laravel

That is a lot quicker than you using stand alone technologies from scratch.

1 Like

Database design is not an easy task and the question should be more detailed. To only mention one single example is to avoid ENUMs. You get more flexibility by creating a separate lookup tables with key and value and store only the value instead of hardcoded ENUMs. The lookup values are stored within the database and can easily been added, modified and deleted.

The best way I know is to use Postgresql. It can handle both noSQL and SQL. So you do not have to chose :slight_smile:

I use a VPS. Note the need for GDPR, which excludes vendors in some countries.

1 Like

Sorry guys, I don’t know why I don’t get the notifications.

Thank you for all your answers, it’s much more clear now! :slightly_smiling_face:

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.