Obamacare Websites Failed because it looks like Spaghetti.
Best way to not build a massive website: load up a canon of nerds and fire them at said website.
Ok, let’s define that a little better! In a nutshell:
A very large complex software system, has to be designed as a set of smaller independent systems, that communicate with each other using a common set of protocols. These systems/software, should be have a fairly narrow scope in terms of what they do. That means, don’t try to make your software into a ‘swiss army knife’ of functionality.
… This is basic OOP programming but it seems that in real life, many software developers seems to forget this simple principle.
Separating Concerns, or Defining the Logical Parts of Software
The hardest part of architecting software, is figuring out how to break it down into its’ logical components. One common way to do this, is to look at a software from the point of view of the users … for example:
So in this case, you might break your software down by ‘user’ functionality and ‘administrator’ functionality. So you would have one team working on the ‘user’ app and another working on an ‘administrator’ app.
Connecting the two Apps together
In case of most PHP apps, you will be tracking information with a MySQL database and so you can use the database as the bridge between the user part of your program and the administrator part. Doing so can really simplify development and it makes it easier to have programmers work independently – without having to talk too much with people working on the other app.
A good Software Architect is Needed!
Of course, when you are developing apps like this, you first need to have an experienced architect who can properly structure the project so that the developers of each part (user and admin) are not stepping on each others toes!
What to take away?
The above example is just an example. For many projects, dividing the app by user type may not make any sense! The key thing you want to take away is that you should look to create your software so that the major functions (and the code associated) is isolated from the code used in other major functions found in your system.
I hope that helps,