The Lounge is rated Safe For Work. If you're about to post something inappropriate for a shared office environment, then don't post it. No ads, no abuse, and no programming questions. Trolling, (political, climate, religious or whatever) will result in your account being removed.
Without intending to denigrate anything said here, there are two guiding principles that have stood the test of time for me in over 40 years of software development: KISS and OCCAM's Razor. Simply expressed they are:
Keep It Simple, Stupid! and the simplest solution to a problem is likely to be the most effective (let alone less work and require less maintenance).
It is so easy - BTDTGTTS! - to get absorbed in the latest frameworks, wizz-bang IDEs, cloud services, paradigms, Agile processes, TDD, new languages, containers, functional programming etc etc etc, that you can lose site of the fact that creating a whole software ecosystem with thousands of lines of code using hordes of complex tools simply to write "Hello World!" onto the screen is perhaps not the right approach!
there are two guiding principles that have stood the test of time for me in over 40 years of software development: KISS and OCCAM's Razor.
I totally agree, which is why I went rogue years ago and still cannot stomach looking at code written with one of those heavyweight frameworks. And nowadays, you have to deal with multiple frameworks: ASP.NET (and flavors) on the back end, Angular (and flavors) on the front end, with yet another layer of obfuscation as well (currently dealing with ExtJs). And any value that these add ends up being completely lost in all the kruft that is required, IMO. Belch.
If you are new to programming i suggest to go for Monolith, then organize your code using like Onion architecture/Clean architecture. After that, you will take-out a module and make into a new service.
You can then play around with Istio, it's a managed service mesh. You can deploy it in Kubernetes or individual virtual machine.
Caveat, i just started playing around with Kubernetes. And i think Istio will surely help in managing your microservices with load balancing, service-to-service authentication, monitoring, etc. I will look into Istio soon.
Bare in mind that there are endless options of separation between monolithic and micro...
Do your design work. Take in count not only the complexity, but also the work-force (knowledge)...
And totally ignore fashion...
"The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge". Stephen Hawking, 1942- 2018
If you can't handle monoliths you probably can't handle microservices.
Both require you to write loosely coupled code, except microservices are harder to maintain, debug and refactor.
I'm currently working on an application that's a monolith, except for a little piece of code that serves as a webhook, which I've put in an Azure Function.
It's like a monolith with a microservice.
If I find more functionality like that I'll put it in another Function, but for most of the work a monolith works fine (no scaling requirements, I'm the only developer, etc.).
By the way, if you're new you should probably focus on learning other things first, like proper database handling, DI, SOLID, SoC...
On the other hand, if you have experience with those and you know how monolith do and don't work it will be cool to use and learn about microservices.
The reason I’m asking this is because I’m a pretty new programmer. I have a hard time organizing my code when it gets larger. So if I was to use a micro service architecture, I would have built-in organization of services.
And here is the rub - making microservices won't organize your code. It will push you to break it up, but you are quite likely not going to divide it correctly the first time. I would suggest keeping as much as possible in a single project. Then it will be easier to move things as you better understand things.
Why would you consider enterprise level practices for a single user application or one which is being designed by an individual?
You do not need micro-services to organize an applications coding structure. You simply need a clean structure that is acceptable to the style of your own development. If you need specific services for your endeavor than there are plenty of third-party libraries available for this.
Also, this is what Object Oriented Programming does quite well with, though many of its other touted benefits have become questionable over the years (ie: re-usability).
The other issue with much of current programming practices is that everything has to go on the Web? Why? For small usage situations or even larger departmental ones, client-server designs are still the most efficient designs available and are much less complex to design and implement.
The implementation of a Web application should only be considered when large numbers of users are expected across multiple domains within a company or if the implementation is to be publicly available...
Sr. Software Engineer
Black Falcon Software, Inc.