Diablo II claimed hundreds of hours of my life. I'll never get them back, but I won't miss them, either. Enjoy the oral history of one of the most enduring and popular action RPGs of all time.Read the rest
Ever been assigned a user story which looks like this? (Taken almost verbatim from a real life customer project some time ago)
Headline: Improve Pagination Description: As a user I want to have proper pagination functionality so I can scroll through my item list without a long loading period Acceptance Criteria: It is possible for a client to implement a proper pagination
Do you know what the hell you are supposed to do here? No?
Good, me neither. A classic example of an anemic user story.
As a rule of thumb: If you look at a user story (or feature request or task) one day after it has been written and you have literally no clue what exactly to do, you have an anemic user story.
Imagine you got the story above from one of your colleagues who went on vacation. Feel like joining him immediately, huh?
Absence of length is also a very good indicator: One or two-line user stories like "implement the new text processing logic", which literally could mean anything.
Anemic user stories or requirements in general are almost always "shot from the hip", often under pressure. Your boss shouts over "uuh, pagination takes too long, have a look at that urgently.”
Now, you might have an idea why pagination for your e.g. shopping basket is so slow. But there is 100 more pressing tasks and so you decide to take a shortcut and come up with that anemic placeholder story instead. I mean you roughly know what to do, right? Customers will be able to live with slow pagination for a couple of more weeks.
And then some time you finally come around to implement the story. Chances are very high that you will go like: “Erm, what am I supposed to do again?”
There are mainly three things that go wrong with stories like that: You do not know
In short: A developer’s dreamland!
The headline is about "improving" pagination, so pagination seems to be in place, but is supposedly too slow. (Mental Leap: check this link for those interested in a technical solution if you are fighting with SQL pagination)
The description is your general vague user story resulting from "agile" brainwashing saying that everything consisting of "as…I want to do this.." is good enough as a user story. It is not.
Additionally, the acceptance criteria says something about "clients". And "implementing"? What the hell is that supposed to mean? Could it be that we should actually expose parts of our API for other e.g. third-party REST clients and that we promised them some specific response times in an SLA? And we maybe need to improve our current response times by 10% for that? For which calls? For all of them?
If you encounter a story like this in real life you have to delete it and rewrite it. No really, hit delete in JIRA or equivalent tool. The story will not be of any use for you or your programming team. When you finally rewrite the story, take the following steps:
See the questions that came up in the last paragraph? We already talked a bit about asking the right questions a couple of weeks ago. To write a proper user story, you need to ask questions – except if you have every little detail of the story already sorted out in your head.
As with all writing, from books to movies to technical user stories it pays off to have an outlining system in place. You should not make the wrong assumption that writing a user story is done in 2 minutes and you can just bang them out one after another.
You need a bit of dedicated time and then your quickest way forward is to outline the user story and only then write it. As opposed to trying to fill a blank JIRA page with everything that comes to your head regarding one specific feature.
When you have the outline in place then fleshing out your story in detail is almost just a formality.
I can assure you that in any software team with size 1+ anemic user stories will take up a lot more time in the long run, than spending 5 minutes on some questions, outlining and then writing a sound user story.
But feel free to take “shortcuts” if you are into having constant debates with your boss,clients or teammates about what to implement, whether it was the right thing to implement and when it is done.
In the next article we will first look at what this anemic pagination user story should have looked like. Then what the outlining and writing process for this new, good version of the user story were. Stay tuned!
As always, if you liked this article, join our newsletter below!
Java developers are flooded with a plethora of libraries and tools for their day-to-day work. We compiled a little list of stuff that we use everyday in primarily business line development (CRM, banking, web dev etc.) and that we can wholeheartedly recommend. There’s also a very opinionated section of people that we’d like to give some props to, if you are not on it, give us a shout
Please feel free to comment or post your own personal suggestions. Our personal New Year’s wish, though: Please link to this page when referencing this list and do not reproduce it in its entirety. Props go out to Scott Hanselman for „inspiring“ this list.
Happy new year!
And that’s it for this year! Enjoy and let us know your recommendations!
So many things can go wrong and often do, but I spend a good third of my time working on infrastructure, monitoring, and analytics so that they don’t.
Here’s what happened: At approximately 4:30pm PT feed fetching ceased. The feed fetchers were still working, which is why my monitors didn’t fire and alert anybody. But I have a second large Mongo database server used exclusively for collecting data about feeds being fetched. There are approximately 75 servers dedicated to feed fetching. These analytics look at average fetch times on a per task server basis. I use these analytics to ensure that my task servers are humming along, as they each use a ton of network, cpu, and memory.
This Mongo analytics servers works in a curious way. If you right-click on a feed and go to Statistics you’ll see the feed fetch history for a feed, stretching back a hundred fetches if the feed has had any issues in fetching. I keep these statistics on an analytics server separate from the regular Mongo server. I do this so that if the mongo analytics server goes down, everything will operate normally.
But the mongo server didn’t go down. It merely gave this error:
OperationError: Could not save document (Can't take a write lock while out of disk space)
Mongo continues serving read queries while not allowing write queries. I didn’t plan for that! And it gets worse. The way MongoDB stores data is that is just keeps growing, even as you delete data. NewsBlur only saves the last few fetches, but deleting old fetches doesn’t give you back any disk space. Every other database server I use has an autovacuum process that takes care of this maintenance work (PostgreSQL, Redis, Elasticsearch, but not MongoDB). It’s unfortunate that this is yet another instance of MongoDB being the cause of downtime, even though the fault lies with me.
The server that is meant to only be used to ensure things are working correctly was itself the culprit for feeds no longer being fetched. This is the ironic part.
Now comes the painful part. On Wednesday morning (yesterday) I packed my car and headed down to Big Sur to go backpack camping for the first time. I’ve car camped plenty of times, but I felt confident enough to pack my sleeping bag and tent into a big bag and head ten miles into the woods of coastal California.
I headed out, away from cellular service, at 4pm PT, half an hour before the analytics server ran out of disk space. And then returned nearly 24 hours later to a bevy of alarmed tweets, emails, direct messages, and a voicemail letting me know that things were haywire.
But the real problem is that I set a vacation reply on both my personal and work email accounts to say that I’d be out until September 3rd. Now, I hired a firm to watch the servers while I’m at Burning Man starting this Saturday. But I figured I could get away with leaving the servers for twenty four hours. And I neglected to tweet out that I’d be gone for a day, so theories cropped up that I was injured, dead, or worse, ignoring the service.
If you’re wondering, I think about NewsBlur first thing in the morning and last thing at night when I check Twitter for mentions. It’s my life and I would never just give up on it. I just got cocky after a year and a half of nearly uninterrupted service. NewsBlur requires next to no maintenance, apart from handling support requests and building new features (and occasionally fixing old ones). So I figured what harm could 24 hours of away time be? Boy was I wrong.
If you made it this far then you probably care about NewsBlur’s future. I want to not only assure you that I will be building better monitoring to ensure this never happens again, but to also offer anybody who feels that they are not getting their money’s worth a refund. Even if you are months away from payment, if you aren’t completely satisfied and think NewsBlur’s just about the best thing to happen to RSS since Brent Simmons released NetNewsWire back in 2004, then I want to give you your money back and let you keep your premium account until it expires.
I would like to also mention how much I appreciate the more light-hearted tweets that I read while on the frenetic three hour drive back to San Francisco from Big Sur. I do this for all of your happiness. If I did it for the money I’d probably find a way to juice the data so that I could at least afford to hire an employee. This is a labor of love and your payment goes directly into supporting it.
Oh, France. You hate new things. You hate foreign things, particularly American things (or so you like to say). You hate business. Of course you’re going to hate Netflix.
Netflix is currently expanding around the world, and it wants to set up shop in France. The company has said it has aggressive expansion plans in Europe, and the French press has reported that executives from the company have met with President Hollande’s staff twice. To Reed Hastings I say: good luck, you’re going to need it.
Since the era of Jean-Baptiste Colbert, Sun King Louis XIV’s Minister of Finance, the French economy has functioned as a government-managed oligopoly. Consumers exist to reward friends of the state. This is why France’s socialist government has sicced tax inspectors on virtually every significant US tech company that has a presence in France (Microsoft, Google, Facebook…), and created rules preventing Amazon from offering free shipping on certain orders, to protect bookstores from competition, nevermind that it makes it harder for actual people to buy and read books, which one would think would be the goal of a cultural policy.
The taxes, regulation, and protectionist mindset that make doing business in France a nightmare are well-known. But there’s something else. Netflix is not just coming in as a foreign, innovative American company, thus presumed untrustworthy. It is wandering into another minefield: what the French like to call l’exception culturelle, the cultural exception. In the story France tells itself about itself, France is exceptional because it is so cultured. What does that mean? It means that the French government supports French movies and TV shows and other cultural products, and mandates that a certain percentage of programs on TV and radio be French.
This is actually one of the least offensive parts of the French compact. After all, French cinema does produce a regular smattering of masterpieces and, looking at the rest of Europe, it’s hard to believe that this vitality would be there without government support, however wasteful and occasionally corrupt.
But the way this all is funded is through a set of taxes paid by French TV networks. Basically, if you want to operate a TV network in France, you are mandated by law to also become a movie producer and set aside a percentage of your profits to produce movies. Does Netflix count as a TV network? Netflix has described itself that way before; its French competitors—and the French government (which, if you’ve been paying attention, is the same thing)—certainly think it should count as one for those burdensome rules. France’s culture minister has said that the government would not accept Netflix as a “stowaway” in the French market. They might, for example, set up shop outside France’s borders, offer their online service from there, and not be bound by French rules. But is the alternative for Netflix to set up a film-producing company in France especially for France?
There’s another problem for Netflix: net neutrality. In France, the important technology companies are not the internet services companies—they are the telcos. The biggest one, Orange, used to be a state company. The state is still a major shareholder and usually picks the CEO. The current CEO, Stéphane Richard, was previously chief of staff to then-Finance Minister Christine Lagarde (Colbert lives!). Orange has also made it clear that it views itself as having a future in media. Telcos don’t like that Netflix sucks away their bandwidth even as it threatens their business model. In the US, while the government is certainly not immune from regulatory capture, there is no national broadband company. In France, the ISP Iliad/Free already deliberately slows down YouTube’s traffic.
France has been in a bad place for 30 years. Slow growth, mass unemployment. Countries that go into this kind of funk become resentful and fearful of foreigners and new things. This will be the mindset that Netflix will have to navigate.
Now, none of this means no one will buy Netflix. That’s the big paradox. In this matter, it’s as if there were two Frances. You have the sort of Platonic France—the idea of France, the one lived by the upper-middle classes, the cultural world, and government elites, where people eat fancy food, dislike anything vaguely American and write off the internet (still, yes, today) as a fad, and spend their time sitting at cafés sipping on espressos. Then you have the France that actually exists, where the most thriving restaurant company is McDonald’s and 8 of the 10 top-grossing movies last year were made in Hollywood. French people, like people everywhere else, are fine with innovation that makes their lives easier.
Netflix’s value proposition, with the cheap subscription, the good-enough content, and the convenience of being able to watch whatever you want on whatever platform, will surely appeal to plenty of French consumers.
I just don’t envy the endless headaches Netflix France’s management team will suffer.