Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
Get a devDuck
Rubber duck debugging has never been so cute! Get your favorite coding language devDuckBuy Now
Search - "monolith"
Sometimes I wish I was allowed to just strangle my colleagues...
Example from the 'code base':
except Exception as e:
When I asked why they would redo the same call right after it failed I was told that 'It works the second time because it takes time to raise the Exception '.
Bitch, you've got a race condition in your sensitive banking software. You know it's there. Do you really want to trust the time needed to raise your exception will always be enough to synch that dumpster fire you call code?
Show some fucking respect for your craft and fix that shit. But of course they won't, because it will work flawlessly until it suddenly stops working. Taking down who knows what in this damn, undocumenred monolith with it....
Sometimes I'm honestly afraid to trust banks with my money.7
Like most people I needed some extra cash during uni, so I proceeded to learn CSS + Photoshop (yeah, I know). Followed by PHP and WordPress.
It can be a very shitty platform until you realize that you can stop combining plug-ins from all over the place with dubious code quality and roll your own.
Anyhow I kept at it until I was able to join a niche company doing a quite popular caching plug-in for WP (yeah, W3 Total) when I suddenly became *very* interested in anything and everything performance.
This landed me a very cozy consulting gig in the Nordics - they were using WP for an elephant-traffic website and had run into a myriad of perf issues.
Fixing them and breaking the monolith awarded me with skills in nodejs, linux, asynchronous caching among others.
I was soon in charge with managing the dev boxes for the entire team, and when the main operations dude left, I was promoted to owning the entire platform. (!) Tinkering with Linux for most of my life really came in handy here. (remember Debian potato?)
Used saltstack + aws cloudformation to achieve full parity between all environments. Learned myself some python and all various tips and tricks which in the end amounted to 90% reduction in time-to-first-byte and considerable cost savings.
By the end of the 2yr contract I had turned myself into a fullstack systems engineer and never looked back.
Lawyers not getting along resulted in us having to abandon NewRelic, so I got to learn and deploy the ELK stack as a homegrown replacement, which was super-fun.
Now I work in the engineering effectiveness department of a Swedish fintech unicorn where all languages under the Sun are an option (tho we prefer Python), so the tech stack is unlimited. Infinite tools and technologies, but with strong governing principles and with performance always in mind so as to pick the right tool for the job.
It's like that childhood feeling when you've just dumped a ton of Lego on the floor and are about to build something massive.
I guess the morale here is however disappointed you feel by your current stack - don't. Always strive to make things better, faster, more decoupled, easier to test, etc. and always challenge yourself to go outside the comfort zone.6
Just need to get this off my chest. Started a new job 3 weeks ago at a company that has been around ~18 years, it is only recently that they have started to grow more rapidly. I was brought in under the guise that they wanted to embrace change and better practices and so said I was up for the challenge.
In my 2nd week I was asked to produce a document on tackling the technical debt and an approach to software development in the future for 3 consultants who were coming in to review the development practices of the company on behalf of the private equity firm who has taken a major stake in the company. I wrote the document trying to be factual about the current state and where I wanted to go, key points being:
Currently a tightly coupled monolith with little separation of concerns (73 projects in one solution but you have to build two other solutions to get it to build because there are direct references.).
Little to no adherence to SOLID principles.
No automated testing whatsoever.
Libraries all directly referenced using the file system rather than Nuget.
I set out a plan which said we needed to introduce TDD, breaking dependencies, splitting libraries into separate projects with nuget packages. Start adhering to SOLID principles, looking at breaking the project down into smaller services using the strangler pattern etc. After submitting what I had written to be part of a larger document I was told that it had been tweaked as they felt it was too negative. I asked to see the master document and it turns out they had completely excluded it.
I’ve had open and frank discussions with the dev team who to me have espoused that previously they have tried to do better, tackle technical debt etc but have struggled to get management to allow them. All in all a fairly poor culture. They seem almost resigned to their fate.
In my first 2 weeks I was told to get myself acquainted and to settle myself in. I started looking at the code and was quite shocked at how poorly written a lot of it was and in discussions with my manager have been critical of the code base and quite passionate and opinionated about the changes I want to see.
Then on Friday, the end of my third week, I was invited to a meeting for a catch up. The first thing I was told was that they felt I was being too openly critical in the office and whether I was a good fit for the company, essentially a stay or go ultimatum. I’ve asked for the weekend to think about it.
I’ve been a little rocked by it being so quickly asked if I was a good fit for the company and it got my back up. I told them that I was a good fit but for me to stay I want to see a commitment to changes, they told me that they had commitments to deliver new features and that we might be able to do it at some point in the future but for now I just needed to crack on.
Ordinarily I would just walk but I’ve recently started the process to adopt kids and changing jobs right now would blow that out the water. At the same time I’m passionate about what I do and having a high standards, I’m not going to be silenced for being critical but maybe I will try and tackle it in a different way. I think my biggest issue is that my boss who was previously a Senior Developer (my current position) has worked at the company for 12 years and it is his only job, so when I’m being critical it’s most likely criticising code he wrote. I find it hard to have the respect of a boss who I had to teach what a unit test was and how to write one. It makes it hard to preach good standards when by all accounts they don’t see the problems.
Just wondering if anyone has suggestions or experience that might help me tackle this situation?12
So we started looking into docker. As always I needed to do the research and I was fine with it.
We have 4 projects that are sold into one suite so logically I follow the microservices build structure.
3 months later after everything has been set up, we get called into a meeting. The whole suite should be a monolith as microservices doesn't make sense to the people planning everything.
Ok pulled my current plans out abd made everything a monolith. Just note I also get pulled away to other Business Units to do work for them.
Get pulled into another meeting 2 months later. Why isn't the docker containers in microservices!? It is stupid running as a monolith and we should've done our jobs better etc...
After the meeting my manager and I just sighed and walked to the office. So basically 5 months doing the the exact same thing we did in 3 weeks.
Now they want to develop other services and want to strip every method into a microservice and bundle it together.
Life of a DevOps engineer right!1
When you spend a few days getting a monolithic LAMP app working in Docker so we don’t have to follow a 12 page install procedure... only to have your senior say “that’s not the way we do things around here”7
Let's take a minute of silence for all of our fellow developers currently involved in monolith migration projects.3
So... Manager pulls us in. Meeting in 10 minutes guys. I know it's unplanned, but it's important.
Not only is it the 10th time he's interrupted my workflow, but it's almost time to go home. And I was getting some important shit done.
Anyways, come the meeting: we are going to abandon all the work we've done on our microservice platform (2yrs+ in the making) and make it a monolith. Oh, and we have to do it in 4 weeks, because a client is asking for it. Oh, and you'll probably have to do overtime.
We've worked 5 months to decompose a complex and huge monolith into microservices, deployed in prod with zero defects. And finally moving to AWS, one by one.
How can i explain this work to bunch of 5 year olds? i.e. i've to present this to top level management with no tech knowledge.
I'm thinking of: Lets say a family of 6 people want to travel for 30 holidays to another country. A monolith can be equivalent to having everyone's luggage in huge bag, microservices can be packing luggage in sizable chunks acceptable by airlines.
I'm bad at explaining, can someone help with better example?10
if you're gona write huge monolithic, 1 file, 1000s of lines, code...at least have the gusto to go all or nothing
don't carve out function after function, for actions only called once, and end up having 100 functions.
or were you trying to reach 69 "static void"s ?2
So the group announced a merge of several systems into my platform. Growing it from 5000 sites to 75000. Lead time of a year, time enough to build it properly, finish the split of the current monolith into microservices, make it fast.
Suddenly, they reduced the time to three months, no explanation given. Solution is to keep the current PHP shit pile, but "scale" it using magic hardware or something. Oh and add 258 features, including things like "intuitive navigation" and "progressive web app" which some junior PM wannabe got off wikipedia or something.
And my boss has bent over to these morons and basically said yes, instead of informing them that this is a fool's errand.
Fuck em. I've said that they're nuts, and if they force the issue, I will resign. And my team probably will too.
But first I will take an inconveniently timed holiday.2
!rant this is just a shoutout, how fucking happy I am. Clean code valued over fast but hacky push of features!
Backstory. I work for a startup. Long story short a guy with an idea needed a developer. I've worked for about a year without pay but now since we're live I get paid. Recently a new field of bussiness came up. I told tge guy with the idea (a.k.a. my boss) that we either could just "hack" the current code to just make it "fit" well kind of... Or refactor our main code base, as requirements where changing at least monthly and we just built on top of the monolith.
Don't get me wrong. It still isn't perfect. However I was able to refactor the main business logic for the last few days, as he understood, it's an investment into the future.
P.S. On another note: happiness or happyness? :O1
Two months ago I started working at a new company, who's system is a huge monolith. The company is a bit over one year old, and the code base is huge. The desire to move to more of a microservices architecture is on the radar, but one of the biggest issues in moving towards it is how we should keep our models. The stack is basically Node.js and Mongoose, where there's about a few dozen mongoose models that the whole system uses, and the issue is that, if we moved to a microservices architecture, how could we keep the models in sync. One idea I had was to keep the models in a separate (node) package that would be shared across all microservices, but then there's the issue that if one model needs changes, all microservices that use that model will need to be updated. Another idea we had was to not share models, but instead let every microservice be in charge of everything to do with a certain type of data (eg. Users are only directly accessed by one microservice, companies by another, and no two microservices share responsibility over data), but that might bring problems when one microservice depends on a certain set of data from another microservice. How do you guys manage all that? Any ideas or tips? Thanks ^^14
Laravel app, monolith structure, with 50+ model, 48 controller (+20 report), had 2 month to make it module based as they will add 10 or some more "modules" to it ..3
What do you guys do when youre sick to death of working on the giant ass monolithic code base with no documentation a million layers of abstraction and breaks everytime you sneeze on it?6
I'm the lead dev on this team. The project is split into multiple separate modules to comply with separation of concerns, and so new devs don't need the whole fucking codebase (risking them running away with everything) to contribute to the project as a whole.
So we don't need a fucking config file to enable and disable features.
So we don't need to upload a 500mb monolith every time we want to test a change.
So we can test old fucking versions of modules without merging it back into the entire codebase.
What did this fucking dev do? He was having one small issue with Maven. One. It wasn't updating his local snapshots to the correct Artifactory version.
He decided, instead of trying to fucking fix it: HEY, LETS IGNORE THE LEAD DEV'S DEMAND TO KEEP THEM SEPARATE. IM GOING TO MERGE THEM INTO ONE MODULE FOR SOME FUCKING REASON.
I refuse to continue working with this dev if he's going to sidestep my demands and undermine my authority. He wants to go it alone? Be my fucking guest. I'm not touching his shitty single-codebase monolithic monstrosity.
If this is going to be a regular fucking occurrence, he can eat a dick and choke on it.2
For the love of GOD, if you're an architect or someone in the position where you can make drastic changes to the overarching design of a software system, if you're so keen on enforcing something "cool" just because you've read about it in a blog post/seen it on a youtube video, READ ABOUT IT THOROUGHLY, as in, pick up a fucking book or do actual research. An architect overseas just informed us that a whole legacy PHP application (a fucking monolith with a dysfunctional database, yes, I think someone demented designed it) should be rewritten to a microservice architecture (without a messaging broker, just plain API interaction through HTTP) AND WE'RE KEEPING THE DATABASE WHICH BEGS TO BE PUT DOWN FOR GOOD. So now we're gonna have a clusterfuck of tons of PHP microservices (Q_Q) which interact through plain HTTP APIs (swagger's gonna be put to a test) and all have a single broken database in the center. Talk about a microlithic design. Jesus Christ.9
Job advertisement :
Ongoing project in
- .Net Core
- DDD and microservices
- For now we have one monolith solution with 60 projects in .Net Framework, hosted on premise.
- But on the jobs board it was described as something completely opposite.
- We are going to migrate maybe this year, if we will have time6
So,the company I work for has a giant application that runs Java fucking 6
Every time i need to restart it I need to wait 15 minutes.
Fuck giant monolith
Fuck java 6
I fucking miss micro services :/2
Build this as a monolith, microservices are to complicated..
Said no and did the docs first, to make it look easy. Problem solved ;)
I really don't like this trend of building command line applications for controlling some <buzzword> cloud app or <buzzword> framework.
Why should I need or want to learn the exact wording of your gcloud command, or the path to your Ng cli, or some ass-backwards AWS search syntax when I can get the same functionality from your web app, where I can use my FUCKING EYES to work out where the "Create Instance" button is and how to click it!!!??
Stop pushing your shitty python monolith of a client where possibilities for the above task range from:
- google-cloud instances --add "subfjfechye thiq"
- gcloud /create /type=INSTANCE "rogdhyuffhue"
"BuT iT mAkEs iT MoRe aUtomaTaBLe"
I DON'T CARE. What is the point when I can use a proper programming language instead of bash, with actual code-completion and syntax rather than the horrendous excuse for a suggestion system that is the Tab key where it probably doesn't even work in the first place and I have to copy and paste some mysterious dbus command buried in an old documentation page on the Wayback Machine using a utility I don't have installed and a broken URL?
Rails, React, React-Native, Docker, Kubernetes, Openstack, Jenkins, AWS, Microservices, Realm, MongoDB, PostgresQL, GraphQL (list goes on...), and I'm not even done yet.
6 months was spent learning all of the above because I found a Rails-only monolith on Heroku unsettling. My first batch of containers was just deployed and I couldn't be happier. Love my job.3
Hopefully at work we have successfully migrated from a combination of MySQL and Mongo to only Postgres. Also we finally split up our monolith into medium sized services, so we can actually do something interesting and update our dependencies.
And port one of the services from Java Struts to Django..
..but that is only if developers were to set the plan...if sales/management: new feature here! new feature there! sell sell sell! No time for maintenance!
Lets take an example: Products service & orders service.
When I want to save an order for a user, data saved as
1. UserId, ProductId, Quantity, Date
2. UserId, Name, Email, ProductId, ProductName, Quantity, Date
I'm a bit confused here because if I'm going to fetch that purchase, in example 1, it will return IDs requiring another trip to server to get user & product info
In example two it takes only one trip BUT if any changes is made to either user info or product info it means I'm returning wrong info to the user.
What do we do in this scenario? Excuse my questions first time applying Microservices and been using monolith all my life6
My team is in charge of an old and huge monolith. Many times we have to write dirty hacks because otherwise we would need to rewrite lots of things just to make even 1 tiny addition.
- When my supervisor makes a hack: "yeah I know it's bad, but it's a shortcut that should temporarily satisfy the business now, we'll fix it later hahaha"
- When I make a hack: "it's a hack, can you not do that?"1
Just joined a new company and can only describe the merge process as madness.....is it or am I the one that is mad?!
They have the following branches:
UAT#_Branch (this kicks of a build to a machine named UAT#)
Each developer has a branch with the # being a number 1 to 6 except 5 which has been reserved for UAT_Testing branch.
They are working on a massive monolith (73 projects), it has direct references to projects with no nuget packages. To build the solution requires building other solutions in a particular order, in short a total fucking mess.
Branch from master with a feature or hotfix branch
Make commits to said branch and test manually as there are no automated tests
Push the commits to their UAT#_Development branch, this branch isn't recreated each time and may have differences to all the other UAT#_Development branches.
Once happy create a pull request to merge from UAT#_Development to UAT#_Branch you can approve your own pull request, this kicks off a build and pushes it to a server that is named UAT#.
Developer reviews changes on the UAT# server.
QA team create a UAT/year/month/day branch. Then tell developers to merge their UAT#_branch branches in to the previously created branch, this has to be done in order and that is done through a flurry of emails.
Once all merges are in it then gets pushed to a UAT_Testing branch which kicks off a build, again not a single automated test, and is manually tested by the QA team. If happy they create a release branch named Release/year/month/day and push the changes into it.
A pull request from the release branch is then made to pre-live environment where upon merge a build is kicked off. If that passes testing then a pull request to live is created and the code goes out into production.
Ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh it's a total mess. I knew when I took on this job it would be a challenge but nothing has prepped me for the scale of the challenge!! My last place it was trunk based development, commit straight to master, build kicks off with automated testing and that just gets pushed through each of the environments, so easy, so simple!
They tell me this all came about because they previously used EntityFramework EDMX models for the database and it caused merge hell.9
Quess who's back again, php oudated piece of shit monolith codebase. So we have a relatively huge client we need to migrate to AWS.
It is written with yii, all object-oriented. The way it's implemented makes me question my love for object oriented as well my sanity for even accepting this project.
I probably could talk about this piece of shit for hours but the fact they save 3 gigabyte of qr code images is the fucking worst. It's literally a few one hundred thousand images who could be generated on the fly.
Please for the love of god, let me finish this migration tomorrow.6
Any one running Symfony on a Docker container in production? I currently try to migrate our dev env to a docker compose setup (from a "monolith" vagrant vm). I'm atually not stuck at a Symfony specific thing, but on a, I guess Docker specific one(?), The issue is, I need to read and write with two users to one folder (in my case the /application/var/cache folder). Since I mount my whole code into the docker container (to use an IDE on the local files), I've got a volume (not mounted to the outside world) for that folder. (As far, as good). Now this folder is owned by root and root is also the user I get when I enter the container. When I then run a cli script, that writes to this folder, every thing works (as it's run by root) and the resulting entries in the cache dir are owned by root. Trouble starts when the php fpm process tries to write stuff in there too (as it's run by www-data).
If I add `USER www-data` (or create a new user foobar and add `USER foobar`) the container exits with status 0
So I guess the question is, is anyone running an Symfony app on Docker in Prod, if so how do you solve this? Or another question would be what is the best practice to do this? Sure on dev I could just `chmod 777` the whole folder or run the php-fpm process as root, but if that thing ever goes to prod, I wouldn't sleep very well...
Remind me again why we have to use/support a weird entity creating framework across all microservices? So that every entity is consistent? (Who cares? Microservices shouldn't) Because hibernate is hard? (It isn't, and it's better documented than this, which needs hibernate anyway).
I'm just building a fragile distributed monolith.
The effect of “Enterprise Architecture”1
The struggle when you're just starting with Ansible and you are tasked to orchestrate the deployment of a giant monolith on a fully customised AWS infrastructure in two weeks
I started using Go for private projects a few weeks ago.. now when I'm at work having to deal with a java monolith. 😩
Question directed to devs who know a bit about setting up middle sized architecture.
Prestory: Joined into development of a middle sized online game. Figured they created a monolith over the last 6 years up to a point where nothing works properly and nothing can be changed without wrecking the whole system. Figured a monolithic approach isn't such a great idea.
Current Situation: In a different, same scale online game development team, game itself working but team is struggling with architecture.
My job is to come up with an approach on how to set up masterserver/matchmaking/database etc. Reading through various articles about common principles (SOLID etc.), i figured that a microservice+event-/servicebus architecture may work for that kind of project.
The idea would be to have a global interface in which microservices can be hooked. So a client registers to a client handler on startup, then starts to queue for a game, the client handler throws an event on the bus to register the user to matchmaking. The matchmaker happens to listen to those events (Observer Pattern) and adds him to matchmaking, when a match is found it throws an event on the bus to connect the user to the server, etc. One can easily imagine a banhandler throwing in a veto to cancel such an action, metrics and logging is fairly simple to add (just another service listening to all events), additionally Continuous Delivery, FRP and such are also beneficial advantages and it is said to scale well.
The question is, would you do the same, is there maybe something i might be overlooking? Do you have better ideas?
Keep in mind that we are not too experienced and are bound to different languages (python, C++ and java mostly) and are a small (4 Devs) Team with different strengths.
Thank you for your feedback and criticism!1
That thing where you stay up way too late and end up dereleasing and refactoring a huge chunk of The Monolith....
Monolith oriented micro service.
All the coupling and evolving resistance without the simplicity or consistency...