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 - "wk114"
I am a PHP developer.
Yeah, "another PHP is awful" rant... no, not really.
It's just unsuitable for some ambitious projects, just like Ruby and Python are.
First of all, DO NOT EVER use Laravel for large enterprise applications. The same goes for RoR, Django, and other ActiveRecord MVCs.
They are all neat frameworks for writing a todo app, as a better-than-wordpress flexible blogging solution, even as a custom webshop.
Beyond 50k daily users, Active Record becomes hell due to it's lazy fat querying habits. At more than a million users... *depressed sigh*.
PHP is also completely unsuitable for projects beyond 5M lines of code in my opinion. At more than 25M lines... *another depressed sigh*.
You can let your devs read Clean Code and books about architecture patterns, you can teach them about SOLID & DRY, you can write thousands of tests... it doesn't matter.
PHP is scaffolding, it's made of bamboo and rope. It's not brick or concrete. You can build quickly, but it only scales up to a certain point before it breaks in multiple places.
Eventually you run into patterns where even 100% test coverage still doesn't guarantee shit, because the real-life edge cases are just too complex and numerous.
When you're working on a multi-party invoicing system with adapters for various tax codes, or an availability/planning system working across timezones, or systems which implement geographical routefinding coupled to traffic, event & weather prediction...
PHP, Python, Ruby, etc are just missing types.
Every day I run into bugs which could have been prevented if you could use ADTs in a generic way in PHP. PHP7 has pretty good typehints, and they prevent a lot of messy behavior, but they aren't composable. There is no way to tell PHP "this method accepts a Collection of Users", or "this methods returns maybe either an Apple or a Pear, and I want to force the caller to handle both Apple/Pear and null".
Well, you could do that, but it requires a lot of custom classes and trickery, and you have to rewrite the same logic if you want to typehint a "Collection of Departments" instead of "Collection of Users" -- i.e., it's not composable.
Probably the biggest issue is that languages with a (mostly) structural type system (Haskell, Rust, even C#/JVM languages to some degree, etc) are much slower to develop in for the "startup" era of a project, so you grab a weak, quick prototyping language to get started.
Then, when you reach a more grown up phase, you wish you had a better type system at your disposal...29
Hey, wanna hear a disappointing stack?
- vanilla inline CSS
- shitty random legacy PHP
The author is NOT responsible nor liable for any injuries, mental health issues, sanitary problems, asexuality, crippling depression, triggered by this rant nor liable for any damaged walls, hurt animals or deaths.13
Being a sysadmin, it's pretty difficult to get around the whole development of front-end stuff.. positioning, scaling, and everything... I hate it. So many ideas but only the ability to make the back-end and if it involves electronics that as well as networking. But building a pretty UI is beyond me... I love hating on all the frameworks and Node, but in all honesty.. front-end people, I kind of envy you 😅6
The time my Java EE technology stack disappointed me most was when I noticed some embarrassing OutOfMemoryError in the log of a server which was already in production. When I analyzed the garbage collector logs I got really scared seeing the heap usage was constantly increasing. After some days of debugging I discovered that the terrible memory leak was caused by a bug inside one of the Java EE core libraries (Jersey Client), while parsing a stupid XML response. The library was shipped with the application server, so it couldn't be replaced (unless installing a different server). I rewrote my code using the Restlet Client API and the memory leak disapperead. What a terrible week!2
I'm a PHP dev.
I still accept WordPress Websites.
I usually use bootstrap but haven't tried 4.0 yet.
I occasionally touch jQuery.
:3 still wanna hear my disappointment stories?7
The tech stack at my current gig is the worst shit I’ve ever dealt with...
I can’t fucking stand programs, especially browser based programs, to open new windows. New tab, okay sure, ideally I just want the current tab I’m on to update when I click on a link.
Ticketing system: Autotask
Fucking opens up with a crappy piss poor sorting method and no proper filtering for ticket views. Nope you have to go create a fucking dashboard to parse/filter the shit you want to see. So I either have to go create a metric-arse tonne of custom ticket views and switch between them or just use the default turdburger view. Add to that that when I click on a ticket, it opens another fucking window with the ticket information. If I want to do time entry, it just feels some primal need to open another fucking window!!! Then even if I mark the ticket complete it just minimizes the goddamn second ticket window. So my jankbox-supreme PC that my company provided gets to strugglepuff along trying to keep 10 million chrome windows open. Yeah, sure 6GB of ram is great for IT work, especially when using hot steaming piles of trashjuice software!
I have to manually close these windows regularly throughout the day or the system just shits the bed and halts.
RMM tool: Continuum
This fucker takes the goddamn soggy waffle award for being utterly fucking useless. Same problem with the windows as autotask except this special snowflake likes to open a login prompt as a full-fuck-mothering-new window when we need to open a LMI rescue session!!! I need to enter a username and a password. That’s it! I don’t need a full screen window to enter credentials! FUCK!!! Btw the LMI tools only work like 70% of the time and drag ass compared to literally every other remote support tool I’ve ever used. I’ve found that it’s sometimes just faster to walk someone through enabling RDP on their system then remoting in from another system where LMI didn’t decide to be fully suicidal and just kill itself.
Our fucking chief asshat and sergeant fucknuts mcdoogal can’t fucking setup anything so the antivirus software is pushed to all client systems but everything is just set to the default site settings. Absolutely zero care or thought or effort was put forth and these gorilla spunk drinking, rimjob jockey motherfuckers sell this as a managed AntiVirus.
We use a shitty password manager than no one besides I use because there is a fully unencrypted oneNote notebook that everyone uses because fuck security right? “Sometimes it’s just faster to have the passwords at the ready without having to log into the password manager.” Chief Asshat in my first week on the job.
Not to mention that windows server is unlicensed in almost every client environment, the domain admin password is same across multiple client sites, is the same password to log into firewalls, and office 365 environments!!!
I’ve brought up tons of ways to fix these problems, but they have their heads so far up their own asses getting high on undeserved smugness since “they have been in business for almost ten years”. Like, Whoop Dee MotherFucking Doo! You have only been lucky to skate by with this dumpster fire you call a software stack, you could probably fill 10 olympic sized swimming pools to the brim with the logarrhea that flows from your gullets not only to us but also to your customers, and you won’t implement anything that is good for you, your company, or your poor clients because you take ten minutes to try and understand something new.
I’m fucking livid because I’m stuck in a position where I can’t just quit and work on my business full time. I’m married and have a 6m old baby. Between both my wife and I working we barely make ends meet and there’s absolutely zero reason that I couldn’t be providing better service to customers without having to lie through my teeth to them and I could easily support my family and be about 264826290461% happier!
But because we make so little, I can’t scrap together enough money to get Terranimbus (my startup) bootstrapped. We have zero expendable/savable income each month and it’s killing my soul. It’s so fucking frustrating knowing that a little time and some capital is all that stands between a better life for my family and I and being able to provide a better overall service out there over these kinds of shady as fuck knob gobblers.5
you guys complaining about doing PHP and WP because you needed money sounds like confessing about doing porn in college
"Sorry mom, but I really needed the money ..."1
Anytime I have to deploy to iOS store. Part of the stack includes human review... Need I say more?
If I had a dollar for every fucking time they ignored our flagging to not put it on iPad, and returned with their review 2-3 days later saying:
"App UI did not run on iPad resolution cleanly."
Then having to submit an appeal and wait 2-3 more days...10
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
School thought me which "cutting-edge" technologies I should avoid at all costs:
"I want to fucking die" - tier:
- JQuery UI
- Vanilla PHP
- Java 5 and earlier
- Java and Rest
- Old Eclipse
"Mastering the art of headbanging" - tier:
You may argue that some of them are not as bad as I think of them but the I was introduced to them made me despise them. We were never introduced to the documentations. Only to the sheets our teacher prepared and I think he completely pissed the point of some of them.
PHP is my main language, but I haven't had a single problem with it yet.
Nodejs it is.
How can you possibly make it SO GODDAMN HARD to just implement ANYTHING synchronous. THERE ARE REALLY FUCKING GOOD REASONS YOU *WANT* YOUR CODE TO STOP EXECUTION WHILE DOING SOMETHING
EVER HEARD OF HARDWARE PROGRAMMING? YEAH, APPARENTLY NOT
The Android framework
The most basic of things are nightmares to implement. There is no functions like:
And yet all of these are asked for everyday.
Ironically, the not so needed things are more than available. For example, you can make an song using the vibration API
Not to mention the hell that's called LifeCycle. I would pay half of my soul to a developer who has mastered the Android LifeCycle... there's always a catch
Oh and... fragments/Activities. Ask 1000 developers about their view on them, and you'll get 1000 different answers. You know why? Because Android's official docs for a fragment is "A fragment is sort of like an activity" SORT OF LIKE...
Yeah fuck you Android!
PS: Im an Android user, anf love the UI and all. Just development on Android is hell!20
Cannot run one service which is depended on by another before that service is instanced because everything within the cotainer is asynchronous 👍1
My preferred stack is Rails/NginX/Postgres, or Node using the same.
I have a fair amount of material for this week's rant, but in my stack's defense, the quantity is primarily because I've been using it for so long, and I'm apparently a talented breaker. I may share other stories if the motivation arises.
However, today I ran into something definitely deserving of calling out.
The default datatype for a Date+Time column in Postgres is `datetime` which means "date+time without timezone". (while `datetimetz` instead stores the timezone).
Apparently when comparing a datetime with a datetimetz, Postgres doesn't compute the timezone difference correctly, leading to some very unexpected and confusing query results.
Today, I had a record that was both pending (expires_at > now) and expired (expires_at <= now), where now is a DateTime (with tz) literal from Rails. After half an hour's frustrated delving and baffled expressions at query results, I finally figured out that the database's math was incorrect when comparing UTC (+0) and PST (-7).
This during a semi-high-priority bugfix that's blocking for a coworker.
While Time and all of its nuances are honestly extremely difficult to handle correctly, I didn't expect Postgres to get this relatively simple part wrong.
Shame on you, Postgres.
I expected better.3
When I began my sandwich course in a big French company, I was dreaming about cutting edge stack, rocket computer and stuff...
I was disappointed when I came to my office with an old Windows 7 computer, coding via LANDesk to an old server with Windows Server 2008 on it, with Eclipse ... INDIGO...
I have to use Java 1.7 ...
PRTG for monitoring...
Microsoft SQL Server 2008 ...
Coding on a codebase where, indubitably, MVC pattern was just a weird thing in books.
Well it really disappointed me.
Luckily, the Information Service was very open minded and gave me a laptop with Fedora, 3 screens, updated the servers, and let me update the stack, with Java 10, Angular for the front, they are okay for using Docker.
So ... even if it seems to be fucked up, there’s still hope !!4
Just now... Got a job to create patch files for a couple of jars, which may or may not have varying class files. In total, I have to decompile, check, add and synchronize about 30 class files in 6 jars with a new functionality (that I didn't write). 🙂
FUCK PRODUCTION! WHY CANT YOU MAINTAIN ONE MOTHERFUCKING JAR?
OH? YOU'RE SUPERSTITIOUS THAT ONE TINY, ANT-SHIT SIZED CHANGE IN ONE SIMPLE FUNCTIONALITY WILL FUCK UP *OUR* PRODUCT?
FUCK MANAGEMENT! YOU DON'T HAVE CONFIDENCE IN YOUR *OWN* PRODUCT!
OH? CUSTOMER COMES FIRST? HAVE THE BALLS TO DEFEND YOUR OWN FUCKING SELF AND PRODUCT TO THE CLIENT OR THEY'RE GONNA MAKE YOU YOUR BITCH AND TIE A GAGBALL DIPPED IN HOT SAUCE AROUND YOUR MOUTH! HOW.. THE FUCK.. DID YOU MISS THAT LOGIC??????
Best part, they want it by tomorrow, and they don't wanna test it. Guess who's gonna get slaughtered after a week? ME! 🙂5
When I discovered that our awesome eForm solution for paramedics was a web frame in an iOS app containing a crappy HTML form powered by a 2000 line JS file3
Just love it when the client discloses their requirements in phases. M sitting here with the complete stack waiting for him to come online and fuck me a little more as he discloses the next phase. Client's done this 3 times already. Fuck that asshole.
Docker swarm. All i want is a 'zero-downtime' system and everytime i try to set it up there's three damn things missing. Load balencer, service updater, and a good distributed storage. I finally got pissed off and am working on those but fuck it's been how fucking long docker has been out why the hell somebody else hasn't done this yet.3
I was flash developer once, it was great when macromedia was around, then adobe acquired them, now flash is gone.
Years are passing and most of industry is the same as always. Trying to drag you into this rat race of learning new amazing technologies, amazing projects that are actually doing same job as 50 years ago but using more memory and cpu cycles. Because all has it’s roots in algorithms from previous centuries.
So youngsters loose your best life time, be innovative by doing nothing more then copy paste from stackoverflow and duck typing shitty code.
Be a slave and sit in the amazing office, that has everything but not your real life that meanwhile is sucked by corporate squeezer till your last breath.
Be piece of shit that can be kicked around.
Watch youtube, facebook, instagram or whatever social network that shows you pictures that are fooling your mind that you’re someone special and you need this stuff.
Then be ready to suck some dicks to earn money and buy stuff you don’t need, live where you don’t want and do what you don’t like. You piece of shit.
Well that’s what disappoints me from my tech stack.
Now chill out, turn off your electronic gadgets, go out and enjoy real world.2
Rails. Fucking rails...
God damn monoliths, built by a cowboy coder.
Every one I have ever worked with becomes (or already is) a house of fucking cards that will blow over at the slightest gust of wind.
The worst part is that you always hear the same justifications from rails developers, then after they convince the higher-ups that “we will build it right, not like those other monoliths” we find ourselves F’ed right in the A a few months later.
It’s this frustration that lead me to MUCH better paradigms like Microservices, Event-Sourcing, CQRS, Domain Driven Design and the like.
When someone says “our backend is in rails” my first response is “so when are you replacing it?”8
It promised full-blown CRDT functionality. So I decided to adopt it.
Disappointment number one: you have to use CouchDB, so your data model is under strict regulations now. Okay.
Disappointment number two: absolutely messed up hack required to restrict users from accessing other users’ data, otherwise you have to store all the user data in single collection. Not the most performant solution.
Disappointment number three: pagination is utter mess. Server-side timestamps are utter mess. ANY server-side logic is utter mess.
Just to set it to work, you need PouchDB itself, websocket adapter (otherwise only three simultaneous syncs), auth adapter (doesn’t work via sockets), which came out fucking large pile of bullshit at the frontend.
Disappointment number four, the final one: auth somehow works but it doesn’t set cookie. I don’t know how to get access.
GitHub user named Wohali, number one CouchDB specialist over there, doesn’t know that either.
It also doesn’t work at Incognito mode, doesn’t work at Firefox at all.
So, if you want to use PouchDB, bear that in mind:
1. CouchDB only
2. No server-side logic
3. Authorization is a mess
4. Error logs are mess too: “ERROR 83929629 broken pipe” means “out of disk space” in Erlang, the CouchDB language.
5. No hosting solutions. No backup solutions, no infrastructure around that at all. You are tied to bare metal VPS and Ansible.
6. Huge pile of bullshit at frontend. Doesn’t work at Incognito mode, doesn’t work at Firefox.8
Every time I see WordPress running on it.
I refer to it as shitepress, because I've never seen so much shite crammed into a single piece of software before
2 years back when I was onshore, we were in the bad situation due to the size and complexity of handling big webserivces simulators. A single change makes the build red hence the face of other developers too.
These simulators were created using J2EE and VM templates 5 years back. With the time, application and data size grown. We were supposed to maintain consistensy in dummy data accross the applications. But some programmers made a copy of these simulators to finish their applications fast and made the situation worst.
Finally one of the team member dare to use stubby4j to solve this problem. Choosing the stubby4j was a good decision as it was the specialized tool written to create simulators only. But as the stubby4j was not having all the features a simulator need, he customized it's build for our simulators. All the team members were happy.
After few weeks, I picked a story to transform other simulators using stubby4j. The story was previously closed as it was hard to implement in stubby4j. I ingonred the comment and started working on. I spent 2 weeks but couldn't solve the problem. I read the comment in between but It was very late to take the step back. I was not able to give proper status update in the daily standup. Other team members (working from offshore) were thinking that I'm just passing the time. However my manager handled the situation very well and asked if I need some help.
This was friday, I took the leave as it was my wife's birthday. We couldn't go out due to the bad weather. I was thinking about the code all the time. Hence I started to write a new utility to handle all the requirement a webseervice simulator need. I took 2.5 days to complete it. On Tuesday, I demoed it to the whole team. And published it as an opensource application "STUBMATIC". In few weeks I received the good response from other teams as well.
I'm a full time open source developer now.
When I realised ruby on rails doesn't serve requests fast enough. It's response times are in 100s of milliseconds while the corresponding framework in elixir serves requests that are sometimes around 100 microseconds
Still using a database from 90' - Enea Polyhedra:
- no decent visual sql client
- utterly limited scripting language
- weird communications protocol
- no redundancy beyond master-replica
- no encryption of communication protocols
The lack of community support for NGINX is horrible (though it is getting better).
I was an NGINX disciple from the beginning; I switched over from Apache as soon as I found it and used it everywhere. The issue with that is that most services only provided Apache configuration files, forcing me to do my own research and translate them.
Thankfully the NGINX community has done a lot of work already; I was able to find a lot of the configurations I needed online, but I also spent a lot of time learning how to use it. Now, if you give me a few hours, I have the knowledge and resources to make it do whatever you need it to do (within reason, of course).2
I'm in love with Webpack but jeeeeeesus when it breaks in obscure ways maaaaan
Like, I got it working earlier, no errors, everything looks great... aaaaand website is blank. No page, no source, not even anything in the console, just blank. Over an hour later... turns out removing the output target fixes it. Why? No idea. Nothing.2
Let me create the Drupal train.
Fuck Drupal, its verbose shit, how it's supposed to inherit from Symfony, how it's not (at all), how it needs to create a WHOLE FUCKING TABLE FOR EVERY SINGLE TEXT INPUT, how it's required to write TWO LONG ASS PHP lines of code to display ONE FUCKING IMAGE.
Fuck these millions of hooks that allows you to do "incredible stuff" that you could normally do without Drupal.
Fuck how templates are generated, you wouldn't believe how bad it is, and how web integrators are loosing their mind to try to correctly display datas that are contained
Finally, the people who wants some "modern stuff" and make the tests even harder to write and the site uglier.
I just can't believe that recruiters still want to hire people for some Drupal shit.2
Right now, in my student job.
Create a multi-department + multi-lingual intranet, only using SharePoint and out of the box features. Can't add my own scripts or web parts. I'm now the master of workarounds1
Making containers of all your projects and then realizing that the containers are no where near public since they run in thair own bridge adapter 😅1
nothing new, just another rant about php...
php, PHP, Php, whatever is written, wherever is piled, I hate this thing, in every stack.
stuff that works only according how php itself is compiled, globals superglobals and turbo-globals everywhere, == is not transitive, comparisons are non-deterministic, ?: is freaking left associative, utility functions that returns sometimes -1, sometimes null, sometimes are void, each with different style of usage and naming, lowercase/under_score/camelCase/PascalCase, numbers are 32bit on 32bit cpus and 64bit on 64bit cpus, a ton of silent failing stuff that doesn't warn you, references are actually aliases, nothing has a determined type except references, abuse of mega-global static vars and funcs, you can cast to int in a language where int doesn't even exists, 25236 ways to import/require/include for every different subcase, @ operator, :: parsed to T_PAAMAYIM_NEKUDOTAYIM for no reason in stack traces, you don't know who can throw stuff, fatal errors are sometimes catchable according to nobody knows, closed-over vars are passed as functions unless you use &, functions calls that don't match args signature don't fail, classes are not object and you can refer them only by string name, builtin underlying types cannot be wrapped, subclasses can't override parents' private methods, no overload for equality or ordering, -1 is a valid index for array and doesn't fail, funcs are not data nor objects when clojures instead are objects, there's no way to distinguish between a random string and a function 'reference', php.ini, documentation with comments and flame wars on the side, becomes case sensitive/insensitive according to the filesystem when line break instead is determined according to php.ini, it's freaking sloooooow...
enough. i'm tired of this crap.
it's almost weekend! 🍻2
Disclaimer: Technically it's not "our" stack, but we have to use it so....
A webapp we built runs inside the company's network we built it for. Their IT are windows lovers, so everything has to run on Windows servers, even the tablets which are used to access said web app need to have windows.
Their company network isn't accessable from the outside world, so we have access via VPN to get into their network. But this isn't enough to access that shitty windows server our software runs on. After that VPN, you have to connect to a different VPN to which you can only connect to while you're inside the company's network. Then you have access to two servers, one the application is running on and one, well to see if you're changes were deployed correctly because the production server doesn't have a browser on it other than shitty internet explorer 8.
The only way to connect to the server is using RDP. Not even samba or so. To deploy the changes we made to our app, you need to copy paste the files from your local machine to the server. And don't get me started on running mssql migration with the shitty mssql console 😤😤
Why would anyone who isn't a complete idiot use Windows for servers or mssql in the first place????2
I start website with Databases, it work well but I want to upgrade with new feature.
Some features could be better in an other site.
So I build another website with many features and think about new widget and concept.
I start another one again and again and again...
Does I am the only one to do that?
So this is more like an accident rather than a dissapointment but the thing goes like this.
I make multivariant stacks with vagrant, shell script loaded as stated in yaml config and every bit and piece done from there the only times it disapointed me was the first time i lost it and when i got asked to make it tomcat compatible, not that the person really needed tomcat but just because i called it a stack initialiser it must have tomcat support.
My word. The way how bad and patchy the Atlassian Server SDK is documented makes development of JIRA and Confluence plug-ins an absolute horror story.
Nothing fucking works the way you'd expect it to, the development server takes upwards of 5 minutes to simply refresh a page and oooh the shit ton of money this wacky piece of horseshite costs my employer makes my head explode.
But the worst thing is:
We just have to fucking make some easy stuff we could completely just use static pages for to talk to JIRA's REST API, but someone in management made using confluence an acceptance criteria, cause some asshats somewhere else in our company made a custom confluence space - based thingy for another customer "and that's cool"
My manager was asking for a whiteboard cleaner(duster as we call it). He said ‘duster’ and put his right hand in forth of me. He was obviously expecting me to offer him the duster. I thought he wants to shake hands. And we shook hands..
hope he didn’t realise what was going on. I was not drunk at that time. But just a bit hangover.2
As a noob developer, I once scaffold a sample project using JHipster, left it for awhile, went back, tried to run it again and basically, spent a whole day downloading updates and recreating the project from scratch (not to mention being lost in the whole stack and project itself, enabling it to run but failing to understanding each stack components)
Any time I touch the front end of the admin tool for a client I cringe at angularjs. yes, not angular 2.
Mix in datatables (yup, the jQuery one) you have a real recipe there.
Relatively often the OpenLDAP server (slapd) behaves a bit strange.
While it is little bit slow (I didn't do a benchmark but Active Directory seemed to be a bit faster but has other quirks is Windows only) with a small amount of users it's fine. slapd is the reference implementation of the LDAP protocol and I didn't expect it to be much better.
Some years ago slapd migrated to a different configuration style - instead of a configuration file and a required restart after every change made, it now uses an additional database for "live" configuration which also allows the deployment of multiple servers with the same configuration (I guess this is nice for larger setups). Many documentations online do not reflect the new configuration and so using the new configuration style requires some knowledge of LDAP itself.
It is possible to revert to the old file based method but the possibility might be removed by any future version - and restarts may take a little bit longer. So I guess, don't do that?
To access the configuration over the network (only using the command line on the server to edit the configuration is sometimes a bit... annoying) an additional internal user has to be created in the configuration database (while working on the local machine as root you are authenticated over a unix domain socket). I mean, I had to creat an administration user during the installation of the service but apparently this only for the main database...
The password in the configuration can be hashed as usual - but strangely it does only accept hashes of some passwords (a hashed version of "123456" is accepted but not hashes of different password, I mean what the...?) so I have to use a single plaintext password... (secure password hashing works for normal user and normal admin accounts).
But even worse are the default logging options: By default (atleast on Debian) the log level is set to DEBUG. Additionally if slapd detects optimization opportunities it writes them to the logs - at least once per connection, if not per query. Together with an application that did alot of connections and queries (this was not intendet and got fixed later) THIS RESULTED IN 32 GB LOG FILES IN ≤ 24 HOURS! - enough to fill up the disk and to crash other services (lessons learned: add more monitoring, monitoring, and monitoring and /var/log should be an extra partition). I mean logging optimization hints is certainly nice - it runs faster now (again, I did not do any benchmarks) - but ther verbosity was way too high.
The worst parts are the error messages: When entering a query string with a syntax errors, slapd returns the error code 80 without any additional text - the documentation reveals SO MUCH BETTER meaning: "other error", THIS IS SO HELPFULL... In the end I was able to find the reason why the input was rejected but in my experience the most error messages are little bit more precise.2