#antipatterns
Explore tagged Tumblr posts
Text
This is some fucking bullshit.
I used to be able to share cool things I found on Tumblr with other people. Now I can't.
They pulled a fucking pinterest. I literally never made a Pinterest account because of this crap.
Fuck you, Tumblr. Get rid of this horseshit.
#fuck tumblr#enshittification#modal windows suck#Web design sins#antipatterns#ux fail#stop the stop classified#stop classified#login wall
5 notes
·
View notes
Text
JavaScript In Anger: Global Test Timeouts
For the past number of years, I've worked with a variety of NodeJS-based test frameworks. These frameworks include Mocha, Jasmine, and Playwright. Interestingly - to me at least - these frameworks tend to have patterns and constructs in common. While some of these patterns are good (using a config file by default, for example), there is one that I frankly hate: implementing a global test timeout, and that timeout is turned on by default.
Dear reader, I don't like this feature. Not in the slightest.
The idea is straightforward: there is some timeout value - let's say 30 seconds - where if a test run's total execution time exceeds this timeout, the tests either fail or raise an error with a message along the lines of "your test run has exceeded 30 seconds". In many cases, this timeout is by default around 30-60 seconds. Having such a feature configured this way is, flatly, bonkers.
Test frameworks come in all shapes and sizes, just like software projects. Some are lean and mean, with a small number of relatively fast tests. Others are large and slow, with test code that is far from optimal. If you are creating a framework for test automation, you should anticipate each of these kinds of projects might use your tooling. For some, it may take 30 seconds to set up and connect to the system under test. Your test will fail out before it even gets started.
Remembering the power of defaults in software, a default value can greatly influence how your tooling works. A failed test is a failed test, regardless of the reason. If the reason ends up being that someone on a different team years ago decided that 30 seconds is "too long" for a test run, then that can lead to some awkward conversations. Coding frameworks should help your team and work, not be a stumbling block. Having a test fail because it took longer than some unclear value seems like a violation of the design principle of least astonishment.
Of course there are cases where you can disable this timeout, but that just makes me wonder why it was enabled in the first place? For example, in Jasmine there is a DEFAULT_TIMEOUT_INTERVAL value that is the max time a spec can take before timing out and failing. But why not disable this by default? How long should an arbitrary spec take to run? It's a completely open question based on context. These are questions and discussions that could be avoided simply by not allowing this feature to exist in the first place.
I will say I can see some good use cases for a global test timeout. In mature continuous delivery pipelines, tests that exceed some threshold of runtime could be taken out of the pipeline and re-evaluated, but this would require other pieces in place. A global timeout could also be a rough signal of performance problems, but again, other checks and balances would likely need to be in place for this work.
Having this timeouts like this enabled by default are something that do not spark joy in me, and I think this is the same for many teams working with JS testing for the first time.
0 notes
Text
8 Super Powerful OKR Anti-Patterns For Crying
8 Super Powerful OKR Anti-Patterns For Crying
Continue reading if you are interested in what you can do to sabotage your OKR (Objectives and Key Results) implementation. Here are 8 useful tips how to harm OKR on different levels and avoid progress or improvements. In case you are not familiar what OKR is, read “What are OKRs?” first. Cover all work with OKRs Why would you do that? There will always (at least I can’t think of case were it…
View On WordPress
#anti patterns#anti-patterns#antipatterns#framework#OKR#okr anti-patterns#okr framework#organization development
0 notes
Text
Enough time has finally passed since its release for me to lose my ardor against it, and I finally started watching One Piece Netflix. The bonkers thing I realized is that this show is right up Tumblr's alley. It's camp, it's very gender, it's asexual, it's diverse, it's a satisfying watch. But I haven't heard a thing about it in my general Tumblr radius. I suspect that it's due to the same reason I avoided it, which was the completely over-the-top marketing campaign they did on Tumblr, at Tumblr users. It put such an incredibly bad taste in my mouth that I haven't even tried looking at the show even after coworkers recommended it to me. I can't be the only one. Seems like an expensive marketing mistake!
#some of these media folks don't seem to realize that a highly aggressive ad campaign generally feels hostile to users#how do they not know this#it's not a great call on a platform like tumblr#where users are usually the ones doing their own marketing for any given show they love#even if they wanted to participate in any hype at the time#they couldn't authentically celebrate your art very well#because it would just look like they're joining a shilling party for the corpo bs#that my friends is what they call#an antipattern#netflix#corpo rats#tumblr meta
3 notes
·
View notes
Text
Calling by reference in C++ Also known as STOP OVERTHINKING EVERYTHING
So I have now seen a specific type of horrible code from several programmers at my internship who really should know better. The code will look something like this:
And when I ask how on earth they managed to overcomplicate "calling a function" I get the answer "I am calling by reference!" Which... no... no you are not. So, there are two ways to feed arguments to a function. Known as calling by value, and calling by reference. When you call by value, the compiler takes a COPY of whatever you send in, and your function works on that copy. (By the way, that is faster than calling by reference when you need to send in small primitive variables, since playing with a 64bit address is harder than moving the 16 bits an int often is ) What is happening in the... abomination of a function call here, is that they use a shared pointer. And shared pointers are a great tool! It gives you all the safety and easy of use of working in a single thread environment with a statically allocated variable (IE, a variable allocated on the stack) when you are working with dynamically allocated memory in a multi-threaded environment. But when you use it on a statically allocated variable in a single threaded environment... then.... it gives you all the safety and easy of use... that you already had... When I asked why on earth they were doing this to that poor poor pointer, I got told that it was because using raw pointers was bad... Ok... first of all, yes, raw pointers are bad. Not really in of themselves, but because c++ have better tools than them for 99% of use cases... But that is not a reason to use a pointer at all! When I told him he was calling this function by value... just in a really weird complicated way, he disagreed. He was using a pointer! Yes... you are putting in a pointer... which gets copied... And together with the work on creating the pointer and the more complicated syntax of using a pointer... it is just bad. You know how you call by reference? You do it... by calling... with a reference... Not a pointer, a REFERENCE. The hint is in the name! This is the refactored code:
THAT is calling by reference. It is quick. It is clean. It is easy. The ONLY change from calling by value is in the signature. Both from the perspective of someone who uses the function and from inside the function, it works JUST like a call by value. Just like using a pointer, it allows you to work directly on a variable from an outher scope instead of copying the variable into the function. And unlike a pointer, a reference guarantees that whatever you are being feed is instantiated. You can send in a null pointer, you cannot send in a null reference (Well...Technically you can, but you have to work really hard to be able to.) Like... often in programming, the easiest way, that requires the least amount of work, is also often the most efficient and the easiest to maintain... just... just do it simply. I beg of you. Code models reality, and as a result can get really really complicated. So let us keep the simple things simple, yeah? ( By the way, I am grumping at programmers who should know better. When newbies makes weird coding choices, that is simply them learning. That is obviously fine )
11 notes
·
View notes
Text
7 Anti-Pattern Umum dalam Scrum: Sebuah Analisis
Scrum, sebagai salah satu kerangka kerja Agile yang populer, memberikan struktur bagi tim untuk menghasilkan nilai secara iteratif dan inkremental. Namun, meskipun memiliki keunggulan, sering kali tim terjebak dalam anti-pattern, yaitu kebiasaan atau praktik yang terlihat bermanfaat tetapi justru merusak prinsip dasar Scrum. Visual yang diberikan menggambarkan tujuh anti-pattern umum dalam Scrum, yang menunjukkan kesalahpahaman terhadap peran, ritual, dan tujuan Scrum. Berikut adalah analisis setiap anti-pattern beserta dampaknya terhadap efektivitas Scrum:
1. Scrum Master sebagai Project Manager
Salah satu anti-pattern yang paling sering terjadi adalah memperlakukan Scrum Master seperti Project Manager tradisional. Pemahaman ini bertentangan dengan inti peran Scrum Master, yaitu sebagai fasilitator, pelatih, dan penjaga praktik Scrum. Ketika Scrum Master mengambil alih tugas manajemen proyek, seperti pembagian tugas dan penegakan tenggat waktu, hal ini merampas otonomi tim dan merusak prinsip self-organizing dalam Scrum.
2. Scrum Goals sebagai Project Mister
Anti-pattern ini menggambarkan penyalahgunaan sprint goals sebagai deliverable proyek yang kaku. Alih-alih menjadi tujuan yang memberikan makna, sprint goals sering kali direduksi menjadi sekadar daftar tugas tanpa konteks. Padahal, sprint goals seharusnya mencerminkan nilai yang ingin dicapai tim, bukan hanya daftar hasil keluaran. Ketika tujuan tidak selaras dengan visi yang lebih besar, fokus tim dalam memberikan nilai kepada pemangku kepentingan menjadi kabur.
3. Three Sprint Goals sebagai Wish List
Membebani sprint dengan terlalu banyak tujuan mengaburkan fokus dan prioritas tim. Anti-pattern ini mencerminkan kurangnya pemahaman akan pentingnya menetapkan tujuan yang ringkas dan dapat dicapai untuk membimbing tim. Pendekatan seperti “wish list” melemahkan kejelasan sprint, yang pada akhirnya menyebabkan pekerjaan tidak selesai dan menimbulkan rasa frustrasi dalam tim.
4. Sprint Goals sebagai Wish List
Mirip dengan anti-pattern sebelumnya, ini terjadi ketika sprint goals ditetapkan secara tidak realistis atau terlalu abstrak. Sprint goals bertujuan memberikan arahan dan nilai yang dapat diukur. Ketika tujuan hanya bersifat aspiratif alih-alih dapat dieksekusi, tim kehilangan kriteria keberhasilan yang jelas, sehingga retrospektif menjadi tidak efektif dan upaya perbaikan berkelanjutan terhambat.
5. Daily Standup sebagai Swish List
Daily standups adalah elemen penting dalam Scrum, dirancang untuk meningkatkan keselarasan tim dan mengidentifikasi hambatan. Namun, anti-pattern ini muncul ketika standup berubah menjadi daftar keinginan atau laporan status, sehingga kehilangan fokus utamanya untuk menyelesaikan masalah. Standup yang efektif harus singkat, kolaboratif, dan berpusat pada tiga pertanyaan inti: Apa yang dikerjakan kemarin? Apa yang akan dikerjakan hari ini? Hambatan apa yang ada?
6. Daily Standup sebagai Status Debt
Dalam anti-pattern ini, daily standup hanya menjadi ritual formal tanpa diskusi bermakna. Anggota tim mungkin hanya melaporkan progres tanpa membahas kendala atau mencari solusi. Pendekatan yang dangkal seperti ini menghasilkan status debt, di mana masalah yang tidak terselesaikan terus menumpuk, menghambat progres sprint secara keseluruhan.
7. Technical Debt sebagai Irnositechnal Debt
Anti-pattern terakhir ini menyoroti kegagalan dalam mengelola technical debt, yaitu akumulasi kompromi teknis dalam desain atau kode yang menghambat pengembangan di masa depan. Mengabaikan atau salah mengelola technical debt merusak skalabilitas, performa, dan maintainability produk. Tim Scrum harus secara aktif memasukkan resolusi technical debt ke dalam backlog untuk memastikan kesehatan produk dalam jangka panjang.
Kesimpulan
Anti-pattern ini menekankan pentingnya memahami dan menjalankan prinsip Scrum dengan benar. Tim harus ingat bahwa Scrum lebih dari sekadar serangkaian proses; ini adalah sebuah pola pikir yang mengutamakan kolaborasi, pemberian nilai, dan perbaikan berkelanjutan. Dengan mengenali dan mengatasi anti-pattern, tim dapat kembali selaras dengan nilai inti Scrum dan memaksimalkan potensinya. Praktik Scrum yang efektif membutuhkan kewaspadaan, disiplin, dan komitmen untuk membangun budaya kepercayaan dan transparansi.
0 notes
Text
youtube
In this video, you'll gain insights into Agile anti-patterns, why they should be avoided, and 10 examples related to Scrum roles, events, and artifacts. Subscribe for more on Agile methodologies, Scrum practices, and how to navigate common pitfalls. #AgileAntiPatterns #ScrumAntiPatterns #JogoAgileCoaching
#agileantipatternexamples#agileantipatterns#agileantipatternsexamples#agileeventantipattern#antipatternexamples#antipatternexample#antipatterninsoftwareengineering#antipatternsforagiletesting#antipatternsinagile#antipatternsscrum#antipatternsinscrum#antipatternssoftwaredevelopment#DailyScrumAntiPatterns#productownerantipatternexample#scrumantipatternexamples#ScrumAntiPatterns#scrumantipatternscrossfunctionalteam#scrumantipatternsexamples#scrumantipatternsinagile#scrumantipatternslisttcs#scrumeventantipattern#scrumeventantipatternexample#scrummasterantipatternexample#ScrumMasterAntiPatterns#antipattern#ScrumProductBacklogAnti-Patterns#ScrumSprintAnti-Patterns#ScrumSprintAntiPatterns#whatisanagileanti-pattern#whatisantipatterninagile
0 notes
Text
Can we just talk about how dogshit the UX for comments in the Android YouTube app is? When you tap on a comment, including a long one that has been collapsed, the default action is to start a reply. This is insane. It is far more likely that I'll want to expand a long comment than that I'll want to reply to a comment. It's the YouTube comments, after all. But the "Read more" text you have to hit to actually expand it is a tiny target and very easy to miss.
What's more, once you're jolted into the reply mode and the unexpected appearance of the keyboard, the standard "back" gesture (swiping in from the side of the phone) is often misinterpreted as swipe typing, which means that by the time you manage to dismiss the reply, it hits you with an additional dialog since you "entered text." So boom, yet another button to hit before I can get back to attempting to expand the original comment.
My guess is that this is yet another example of intentional awful UX because their goal isn't good UX, it's more comments.
0 notes
Text
How about you leave me the shut the fuck off?
1 note
·
View note
Text
A Technological Antisolution is a product that attempts to replace boring but solvable political or social problems with a much sexier technological one that probably won’t work. This does not mean that we should stop doing R&D, a technology that is worth pursuing can become a technological antisolution depending on its social and political context.
#solutions#solutionism#technology#antipattern#antisolution#what could possibly go wrong?#research#luddism
1 note
·
View note
Text
Let's talk about hostile architecture.
This is a "slide" that recently went in at a playground near me. If it looks weird, that's because it's made of a couple dozen rollers instead of something rational. This might provide a fun texture to slide down until nature starts to win.
So, this machine has two obvious failure modes: The rollers break, the rollers stick. You should expect both to happen over time until the slide Breaks Down (what?) and turns into its opposite: a ramp. This is an unfortunate antipattern.
But this is so much worse than mere bad engineering. That's because the purpose of this slide does not appear to be speed, texture, or even discrimination against the long-haired.
This is an an anti-climbing design.
Any time you design something to "prevent people" or "stop people" or "discourage people", that's hostile architecture and it should be Discouraged. Very. Hard. I'm not gonna do the whole essay here, but feel free if you have Feelings that you want to share. I'll link the Wikipedia page at the bottom. But this is an attempt to control people disguised as a "safety measure" and DAMN IT LET KIDS PLAY THE WAY THEY WANT! The goal of a playground should be to FACILITATE play, not CONTROL it.
When kids can do stupid stuff in a semi-controlled environment, they learn to balance risk and fun before they get let loose on the world as young adults.
... I'ma stop before I go full rant. Hostile architecture bad, "dangerous" playground good.
59 notes
·
View notes
Text
i don't think software development is a humanities because i think humanities would have named them malpatterns or dyspatterns instead of antipatterns
14 notes
·
View notes
Text
currently at most major tech companies the "siloing" antipattern is generally preferred over the "spaghetti" antipattern, but this paradigm might change again over the next five years or so due to a phenomenon known as "turnover"
4 notes
·
View notes
Photo
antipatterns of inevitability
16 notes
·
View notes
Text
Just a quick project...
"Ok Moose, you can do this. We just need to make the robot take commands, drive around and report odometry. Keep it simple, keep it quick". So anyway, I implemented the software in layers. Hand crafted a automated testing framework from scratch and implemented it via CMAKE, and then made full suite unit tests for every layer, a full functional test suit for the HAL layer, and a system test Suite. I also came up with a unique way to calculate odometry that makes it super light on CPU time (Only works for stepper motors... which are a bad choice on mobile robots... I really need a word that means being both clever and dumb...)... And now something that should have taken weeks, will end up having taken months... Why... why am I so very unable to pick simple projects... and after picking harder projects, I just MUST decide to "Do it properly" and spend time implementing something that could pass industry certification... despite it in no way, shape or form NEEDING to be made like that... It would be like wanting to make a small block of wood to stabilize a wobbling table, and then spending weeks polishing, painting, measuring and documenting it... it... it does not need that... calm down...
How I handle that problem professionally is having a team around me to keep me in check... but I have too much depression, anxiety and no clear roadmap to find people to do projects with... I have been a member of a maker space for... 2 years now, and have not yet... you know... shown up... Despite it only being 40 min away... Blaaaaa!
1 note
·
View note
Text
Close to 10am. Re-occurring challenges: The uncomfortable taste of luke-warm coffee. The smell of coding antipatterns, both named and unnamed ones, same as uncomfortable. The tendency of fast thinking to always roll back into known tracks, and the difficulties of keeping a different route for longer. (Sun through windowblinds, just a short moment before clouds close up again. But at least the storm has settled.)
#outerworld #office hours #concrete city
4 notes
·
View notes