the blog for developers

Why NoSQL Will Not Die

Reading the recent flamory piece “I Can’t Wait for NoSQL to Die” from Ted Dziuba, I thought the author is wrong on so many levels. Or as Jeremy writes:

Well done, Ted. I laughed to myself a few times reading your post.

Not that I’m a NoSQL zealot, see my The Dark Side of NoSQL, but Ted is hilarous. On to our first laugh:

Never mind of course that MySQL was the perfect solution to everything a few years ago when Ruby on Rails was flashing in the pan.

No it wasn’t, without heavy memcaching MySQL never worked for websites. Or:

Well, no. Did you know that Cassandra requires a restart when you change the column family definition? Yeah, the MySQL developers actually had to think out how ALTER TABLE works, but according to Cassandra, that’s a hard problem that has very little business value. Right.

It seems to me, Ted has never worked with real live MySQL applications. ALTER TABLE is a pain, for tables with several millions of rows it will take hours to alter a table, mostly because MySQL creates temp tables. Which is no problem if your domain and market is static – as I assume Teds is - or if your MySQL schema is meta. But for others this is hell. All the while it does locks and your website is heavily impaired during the change. Even dumping the table, recreating it and importing all data (which is faster than ALTER TABLE) takes usually hours. You can work around this with hardware, SSDs, a clever slave setup, but you need a MySQL wizard to get this working.

The real solution to schema changes with high volumes of data is not to have a schema at all in your store – something most NoSQL databases support. This is mostly done by storing XML or (B)JSON into the store, and the store does not care about your schema. Your app then needs to deal with different versions of a schema (with at least two) and migrate data from the old schema to the new one between reads and writes (NoSQL to the rescue: Store JSON data with a version string, read old version, change, write new version). Or deal with optional values from the beginning, something a lot of code already does with sparse filled social media data. A background job can also migrate data piece by piece to a new version. With this setup, schema changes are easy, without a complicated slave setup or downtimes.

The problem with RDBMS doesn’t end there. In a post to High Scalability Joe Stump writes:

Precompute on writes, make reads fast. This is an oldie as a scaling strategy, but it’s valuable to see how SimpleGeo is applying it to their problem of finding entities within a certain geographical region.

I wrote in more detail about this in “Essential storage tradeoff: Simple Reads vs. Simple Writes” and how RDBMS wrongly optimize wirtes (I know about materialized views).

m3mnoch speculates about the reasons for Teds laughable post:

it doesn’t look like he’s ever done anything for a large, mainstream audience. i bet he still thinks getting slashdotted or techcrunched is the definition of “a lot of users.” [...] my point is, this isn’t 1998 anymore.

Agreed, even my humble Wordpress blog on one server survives this. The reason MySQL works for Ted is:

because i totally believe that google adwords runs on mysql. IT’S READ-ONLY! that’s what mysql is good for — lots of read-heavy, cacheable data you can map against other read-heavy cacheable data.

Back to Ted:

You Are Not Google. The sooner your company admits this, the sooner you can get down to some real work.

He’s right. You are not Google, so you will not have those MySQL wizards around who write patches for InnoDB. And he’s wrong. You will get into scaling troubles with MySQL far before you’re as big as Google.

DBAs are a reason for NoSQL

DBAs should not be worried, because any company that has the resources to hire a DBA likely has decision makers who understand business reality.

Another real gem. One of the reasons people go for Cassandra is that they do not need as many DBAs as with MySQL. Clustering and Scaling works out of the box for a wide range of scenarios – cases which you would have needed a MySQL wizard to reach. In Joe Stump words, CTO and co-founder of SimpleGeo:

How much time are your DBAs spending administering your RDBMSs? How much time are they in the data centers? How much do those data centers cost? How much do DBAs cost a year? Let’s say you have 10 monster DB servers and 1 DBA; you’re looking at about $500,000 in database costs.

The cost of RDBMS operations

And more about the cost of operating RDBMS with large websites:

I’m running a 50 node cluster, which spans three data centers, on Amazon’s EC2 service for about $10,000 a month. Furthermore, this is an operational expense as opposed to a capital expense, which is a bit nicer on the books. In order to scale a RDBMS to 6,000 reads/second I’d need to spend on the order of five months of operation of my 50 node cluster. [...] I’m happy to put my $/write, $/read, and $/GB numbers for my NoSQL setup against anyone’s RDBMS numbers.

SQL databases will survive, but for a much smaller niche (transcational data) than today. For sure NoSQL will not die in the near future: They support schema changes better, they scale better for write heavy applications and they are cheaper to scale all in all.

Other NoSQL posts on CodeMonkeyism:

You can leave a Reply here. Of course, you should follow me on twitter here.

You can share this post!
Do you want to tell others about this article? Use the social bookmark icons to submit this artice to the service of your choice. Thanks.

About the author: Stephan Schmidt has more than 15 years of internet technology experience and 10 years experience in agile. He was head of development, consultant and CTO and is a speaker, author and blog writer. He specializes in organizing and optimizing software development helping companies by increasing productivity with lean software development and agile methodologies. Want to know more? All views are only his own.

46 Comments 69 Tweets

Leave a reply.

Comments

Unfortunately I don’t work on a project that could use NoSql yet and initially I was agreeing – in some points – with Ted Dzibua, but your points are much better and well explained, doesn’t sound like some who hates SQL (like Ted hates NoSQL). All in all, there’s no silver bullet.

You said that SQL will survive because transactional data. But isn’t possible to do atomic operations with nosql?

@Felipe: No, I do not hate SQL, you’re right. It’s the best tool for some scenarios. But it isn’t for others, like scaling write heavy web applications.

You can, but I think transactional data like payments, orders, … are easier in RDBMS than in (current) NoSQL storages. Some support distributed transactions, most don’t and do not follow ACID principles (ACID make transactions easy). Conflict resolution is often done during read times are left otherwise to the client.

Great post!

You’re correct on so many levels and I wish more people would take NoSQL as what it is — another option — not necessarily meant to straight replace “foo” with “bar”.

Well done! :)

@Felipe: You *could* do atomic operations with NoSQL, but, as Stephen points out, it’s difficult to do. This is because of CAP. Most NoSQL storage systems focus on A and P (availability and network partitioning), while atomic and transactional operations definitely fall into C. You can only choose two in CAP. :)

@Till: Thanks, exactly, “another option” not the ultimate hammer.

Judging from another blog post by Ted (about Diggs transition to NoSQL), he isn’t a MySQL guy but he rather a MS SQL Server guy though he says he isn’t a DBA.

I think the point of his post is that he sees “NoSQL” as a hype that he rather want to die because he fears everybody jumps the NoSQL train and rewrites his or her software just because of that. See your first laugh in that light (usage RoR + MySQL are very popular).

Richard

Only a minor quibble but I’m not sure it’s accurate to say that transactional data is a “much smaller niche”. In the world of consumer-facing, web-based applications it may well be; full-fat databases were always overkill here anyway and it makes sense that something like NoSQL could gain traction as an alternative. I guess that when web applications really started to take off in the late 1990s the choice was only between SQL or flat files!

Just remember there’s a ton of software out there (most of it proprietary stuff that is never seen outside the company that wrote it) that is massively empowered by the solid transactional databases that sit underneath it. So it’s not so much a “much smaller nice” as a “more focussed use-case” – your points still stand though, and I think it may be a good thing for RDBMS vendors if people stop expecting databases to “do everything for everyone”…

@Richard: You are right. One one hand. But my thinking was:

- Transactions that need to scale: Banks, Airlines, … in sum fewer than there are web sites that need to scale – my impression at least, especially as some have outsourced and pooled their databases.

- There are many more transactional datastores than scaling web apps, but those data stores (our intranet :-) do not need to scale

So transactional, web site scaling niche would have been better to write.

Richard

Ah… yes, I see what you mean. Dealing with heavyweight transactionality AND heavyweight scalability in the same system is indeed a rather exotic (niche!?) situation to be in.

dm

@Felipe, some of the NoSQL productions support “single document” atomic operations. However, as I define it, none of them support complex transactions involving many entities. I do not think they will in the future either as distributed transactions are hard to scale. Simple atomic operations on a single entity can be scaled out (theoretically) without a lot of difficulty – you will see that (and do now to some extent).

RDBMS will still be around (of course) for cases needing:
- complex transactional semantics
- legacy SQL support
- where the data model fits relational naturally (e.g., general ledger)
- in reporting applications, as SQL and GROUP BY are quite powerful there

dwight/mongodb

Mike

“The real solution to schema changes with high volumes of data is not to have a schema at all in your store – something most NoSQL databases support.”

Maybe the real solution is just to use a relational database that doesn’t fall apart when you do an ALTER TABLE? I’m not DBA, but I use ALTER TABLE on my Oracle databases that have millions of rows and its back in a few seconds.

I’m not against NoSQL, but this whole ALTER TABLE thing is really just a Mysql problem, isn’t it?

@Mike: A, Oracle, the mystical solution. I agree Oracle goes much further than MySQL, but it still breaks with data and changes. At least I have seen enough downtimes for schema changes with Oracle and crashing RACs due to data volume. YMMV of course.

So, from my point of view, it isn’t “just a MySQL problem”.

Stu

“At least I have seen enough downtimes for schema changes with Oracle and crashing RACs due to data volume. YMMV of course.”

Ahh, anecdotes, the mystical support to any claim…

My experience is that most complaints about RDBMS’ are complaints about MySQL and PostgreSQL, not Oracle, MS SQL, or DB2. They scale well for most mainstream purposes, and Oracle in particular is in heavy use at Amazon.com, Yahoo, eBay, etc.

NoSQL is useful if
- you’re really dealing with data structures & documents, not “structured information”
- you’re a startup and can’t afford a real database
- you’re a small team and want to tinker

But let’s not kid ourselves and think that it’s the only game in town for write scalability. The RDBMS is returning. VoltDB is certainly an RDBMS, with SQL, though arguably an AltDB since it is an “in-memory data grid” that uses replication for durability instead of a disk log. In pre-release it can hit 80,000 transactions per second (yes, you read that right) with a single node, and 1 million transactions per second on a 12-node cluster. Then, there’s ScaleDB , which is releasing RAC-like shared disk clustering for MySQL. Jim Starkey is working on NimbusDB. Oracle & Microsoft aren’t sitting still.

“Ahh, anecdotes, the mystical support to any claim…” – an anecdote is the best answer to an anecdote I think.

“My experience is that most complaints about RDBMS’ are complaints about MySQL and PostgreSQL, not Oracle, [...]”

Ah, an anecdote! Wonderful.

” They scale well for most mainstream purposes, and Oracle in particular is in heavy use at Amazon.com, Yahoo, eBay, etc.”

Ahh, another anecdote. Could be a collection.

See the post about Oracle. Oracle should work well, considering the M$ for hardware and M$ for licenses. But still – another anecdote from me and to quote Roy Batty: “I’ve seen things you people wouldn’t believe. Oracle Real Application Clusters on fire.”

Another difference: I’m quite confident I can scale Cassandra to a 10 server cluster without much help for $2000 a month, I couldn’t manage that with RACs and not for the money.

“[...] you’re really dealing with data structures & documents, not “structured information”

Dealing with data structures, which are not structured information? You’ve lost me there, this is too meta for me.

“[...] you’re a startup and can’t afford a real database.”

Uhuh, the 160 node Cassandra cluster at Facebook is not a “real database”? I beg to differ.

“The RDBMS is returning.”

Nope. Go the stony way of read/write splitting, partitioning and sharding and one will never want to go back there. And the “mystical” scaling RAC is thorny as hell too.

“80,000 transactions per second (yes, you read that right”

In memory? Durable? On what disk? Which size? With parallel reads or append-only?

Raymond

I’m surprised that you like Cassandra because it is schemaless. I read in the documentation on Cassandra’s site two things:

1. “Unlike with relational systems, where you model entities and relationships and then just add indexes to support whatever queries become necessary, with Cassandra you need to think about what queries you want to support efficiently ahead of time, and model appropriately.”

http://wiki.apache.org/cassandra/DataModel

And

2. “Can I add/remove/rename Column Families on a working cluster?

Yes, but it’s important that you do it correctly.

Restart and wait for the log replay to finish.
Shutdown Cassandra and verify that there is no remaining data in the commitlog. (as of 0.6, you can do this using “nodetool drain”)
Delete the sstable files (-Data.db, -Index.db, and -Filter.db) for any CFs removed, and rename the files for any CFs that were renamed.
Make necessary changes to your storage-conf.xml.
Start Cassandra back up and your edits should take effect.”

http://wiki.apache.org/cassandra/FAQ#modify_cf_config

After reading Cassandra’s documentation I had the impression that a change in application requirements still can cause down time and the need to move a big amount of data from one “place” to another “place”. Why else do I need to think ahead about what queries I want to support? When the requirements change, the queries change.

@Raymond: All agreed, if you need server side queries. And with the trouble of the order preservering partioner, I’m not sure many people will.

I assume many people will start/use Cassandra as a plain DHT, not with it’s SCF/CF schema. Then you can change the value as much as you like without down time (see Akkas Cassandra store for an example).

http://akkasource.org/

[...] 随后的codemonkeyism博客便发出一篇名为《Why NoSQL Will Not Die》的文章予以回应。 [...]

[...] Why NoSQL Will Not Die [...]

Let’s not forget that one thing you just plain can’t do with a SQL backend, is offline replication. Forget about it.

There are folks who try to keep a mobile SQLite in sync with a server SQL DB, but they are playing a game of wack-a-mole, as the sync code is application specific, and each time they add an application feature, they have to write new sync code with new bugs.

Synchronization should not live in the app layer. CouchDB handles sync (offline replication) transparently, leaving devs to write apps, not debug conflict resolution strategies.

@Chris: Yes, CouchDB is impressive with this, and I think will spawn a lot of new applications in the future.

Leave a Reply

What people wrote somewhere else:

Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

@sulzberger aca tenes un reply de lo que mandaste http://codemonkeyism.com/nosql-die/

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

So much better RT @codemonkeyism Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

RT @codemonkeyism Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

RT @codemonkeyism Code Monkeyism: Why NoSQL Will Not Die http://bit.ly/9EmpIk

This comment was originally posted on Twitter

RT @lombo: @sulzberger aca tenes un reply de lo que mandaste http://codemonkeyism.com/nosql-die/

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT #dev

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

Why NoSQL Will Not Die http://ff.im/-ikRhO

This comment was originally posted on Twitter

Why NoSQL Will Not Die http://bit.ly/aRl3ix

This comment was originally posted on Twitter

http://codemonkeyism.com/nosql-die/ Code Monkeyism: Why NoSQL Will Not Die // MySQL alter table 就是 alter 到死

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

RT @ingramchen: http://codemonkeyism.com/nosql-die/ Code Monkeyism: Why NoSQL Will Not Die // MySQL alter table 就是 alter 到死

This comment was originally posted on Twitter

Why NoSQL Will Not Die http://bit.ly/aRl3ix (via @ajlopez)

This comment was originally posted on Twitter

why nosql will not die http://bit.ly/9qUoqx #nosql

This comment was originally posted on Twitter

RT @andreisavu: Why NoSQL Will Not Die http://ff.im/-ikRhO

This comment was originally posted on Twitter

@danishkirel Apparently http://bit.ly/aAbEVb http://bit.ly/9HRMrx

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk

This comment was originally posted on Twitter

@joestump http://bit.ly/9qUoqx #nosql

This comment was originally posted on Twitter

Why NoSQL Will Not Die http://ff.im/-ilg3o

This comment was originally posted on Twitter

++RT perfect reply: couldnt agree more, wondering how lame was ted’s post @codemonkeyism “Why NoSQL Will Not Die” http://bit.ly/9EmpIk

This comment was originally posted on Twitter

RT @jfarcand: Why NoSQL Will Not Die http://bit.ly/aRl3ix (via @ajlopez)

This comment was originally posted on Twitter

RT @jfarcand: Why NoSQL Will Not Die http://bit.ly/aRl3ix (via @ajlopez)

This comment was originally posted on Twitter

Reading: Why NoSQL Will Not Die http://bit.ly/aNIhnj /via @codemonkeyism /source @proggit

This comment was originally posted on Twitter

Why NoSQL Will Not Die http://codemonkeyism.com/nosql-die/

This comment was originally posted on Twitter

RT @codemonkeyism Code Monkeyism: Why NoSQL Will Not Die http://bit.ly/9EmpIk

This comment was originally posted on Twitter

and counter to “I can’t wait for NoSQL to die” http://bit.ly/9JO38o people need to remember NOSQL is an option, not the final word.

This comment was originally posted on Twitter

Someone else’s thoughts on NoSQL. http://codemonkeyism.com/nosql-die/ @davidstrauss PLEASE DON’T ATTACK ME !!

This comment was originally posted on Twitter

RT @ingramchen: http://codemonkeyism.com/nosql-die/ Code Monkeyism: Why NoSQL Will Not Die // MySQL alter table 就是 alter 到死

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

MySQL は ALTER TABLE で再起動なくスキーマを変更できるといってもうん時間かかるだろという突っ込みに一人 orz したのであった > Why NoSQL Will Not Die (codemonkeyism.com) http://bit.ly/bj3Zen

This comment was originally posted on Twitter

RT @codemonkeyism: Just blogged on CodeMonkeyism.com: “Why NoSQL Will Not Die” http://bit.ly/9EmpIk Please RT

This comment was originally posted on Twitter

http://codemonkeyism.com/nosql-die/ — seems that people have treated Ted Dziuba as someone worth discussing with, not just a troll

This comment was originally posted on Twitter

@sam_alba et voila une des réponses http://bit.ly/9JO38o

This comment was originally posted on Twitter

RT @florentsolt: @sam_alba et voila une des réponses http://bit.ly/9JO38o

This comment was originally posted on Twitter

interesting: “I Can’t Wait for NoSQL to Die” http://tinyurl.com/y9kqp64 and a response http://tinyurl.com/yza9roe

This comment was originally posted on Twitter

RT @ljouanneau: interesting: “I Can’t Wait for NoSQL to Die” http://tinyurl.com/y9kqp64 and a response http://tinyurl.com/yza9roe

This comment was originally posted on Twitter

RT @ljouanneau: interesting: “I Can’t Wait for NoSQL to Die” http://tinyurl.com/y9kqp64 and a response http://tinyurl.com/yza9roe

This comment was originally posted on Twitter

RT @ljouanneau: interesting: “I Can’t Wait for NoSQL to Die” http://tinyurl.com/y9kqp64 and a response http://tinyurl.com/yza9roe

This comment was originally posted on Twitter

So pleasant #MySQL vs #NoSQL flamewar http://bit.ly/bj3Zen

This comment was originally posted on Twitter

“No it wasn’t, without heavy memcaching MySQL never worked for websites.” http://bit.ly/9PW0Uo

This comment was originally posted on Twitter

RT @cmaussan: “No it wasn’t, without heavy memcaching MySQL never worked for websites.” http://bit.ly/9PW0Uo

This comment was originally posted on Twitter

If you’ve had NoTime for the #NoSQL debate, read these: http://bit.ly/cENyoU http://bit.ly/bKBTVZ http://ff.im/-ikRhO

This comment was originally posted on Twitter

RT @jfarcand: Why NoSQL Will Not Die http://bit.ly/aRl3ix (via @ajlopez)

This comment was originally posted on Twitter

RT @alexatkeplar: If you’ve had NoTime for the #NoSQL debate, read these: http://bit.ly/cENyoU http://bit.ly/bKBTVZ http://ff.im/-ikRhO

This comment was originally posted on Twitter

Why NoSQL Will Not Die http://codemonkeyism.com/nosql-die/

This comment was originally posted on Twitter

[del] [from farnulfo] Code Monkeyism: Why NoSQL Will Not Die: http://url4.eu/299hn

This comment was originally posted on Twitter

NoSQL will not die in the near future: They scale better for write heavy applications. http://bit.ly/aAQASo

This comment was originally posted on Twitter

#database #transaction handling – discussion in comments on #NoSQL & #RDBMS http://bit.ly/9ASB2G #architecture

This comment was originally posted on Twitter

RT @rjhintz: #database #transaction handling – discussion in comments on #NoSQL & #RDBMS http://bit.ly/9ASB2G #architecture

This comment was originally posted on Twitter

Why NoSQL Will Not Die – http://bit.ly/aAQASo

This comment was originally posted on Twitter

Uy, se pone la discusion buena con el NoSQL http://tr.im/UACy

This comment was originally posted on Twitter

Code Monkeyism: Why NoSQL Will Not Die http://bit.ly/d6MKgX

This comment was originally posted on Twitter

http://tinyurl.com/yza9roe
Code Monkeyism: Why NoSQL Will Not Die

This comment was originally posted on Twitter

Why NoSQL Will Not Die http://bit.ly/9qUoqx

This comment was originally posted on Twitter

http://is.gd/bplK2 – Have a read – Why NoSQL Will Not Die

This comment was originally posted on Twitter

Stephan Schmidt: Why NoSQL Will Not Die http://bit.ly/bA3any

This comment was originally posted on Twitter

Stephan Schmidt: Why NoSQL Will Not Die http://bit.ly/bA3any (via @PlanetScala)

This comment was originally posted on Twitter

RT @jeppec: Stephan Schmidt: Why NoSQL Will Not Die http://bit.ly/bA3any (via @PlanetScala)

This comment was originally posted on Twitter

Additional comments powered by BackType

Guide to CodeMonkeyism

Over the last 4 years I wrote many articles on this blog. To make it easier for you to find the relevant ones, I've organized them into topics.

Top 10

6 reasons why my VC funded startup did fail

Go Ahead: Next Generation Java Programming Style

Java Interview questions: Write a String Reverser

The dark side of NoSQL

7 Bad Signs not to Work for a Software Company or Startup

Is Java dead?

Scala vs. Clojure

Never, never, never use String in Java

No future for functional programming in 2008 – Scala, F# and Nu

Clojure vs Scala, Part 2

Java Developer

Is Java Dead?

Go Ahead: Next Generation Java Programming Style

Be careful with magical code

All variables in Java must be final

Never, never, never use String in Java

Bending Java: More readable code with methods that do nothing?

NoSQL Guy

NoSQL: The Dawn of Polyglot Persistence

The dark side of NoSQL

Essential storage tradeoff: Simple Reads vs. Simple Writes

Sharding destroys the goals of your relational database

The unholy legacy of databases

Startup/CTO

Development Dream Teams

6 reasons why my VC funded startup did fail

American vs. European style of Software Development

12 Things to Reduce Your Lead Time and Time to Market

The high cost of overhead when working in parallel

Essential storage tradeoff: Simple Reads vs. Simple Writes

Job Seeker

Another Good (Java) Interview Question

7 Bad Signs not to Work for a Software Company or Startup

Java Interview questions: Write a String Reverser (and use Recursion!)

Java Interview questions: Multiple Inheritance

As a Manager: What I value in developers

Top 10 Tips (+1) to Get a Pay Raise

Agilist

What Developers Need to Know About Agile

5 Practices Better to Change in Your Scrum Implementation

Scrum is not about engineering practices

ScrumMaster and ZenMaster: The joke of certification

What is Trans-Scrum?