New-age Transactional Systems - Not Your Grandpa's OLTP
John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.
The content has been bookmarked!
There was an error bookmarking this content! Please retry.
Posted by Shane Hastie on Mar 19, 2010
Alixx Skevington posted a Manifesto of Done as the beginning of a discussion thread, talking about the commitments team members make to each other about the quality of their work and clearly expressing their commitment to delivering business value through the code.
The post generated a number of comments on LinkedIn with suggestions for additional items to be added to the list, such as:
I would add "I will re-run unit tests before check-in". The reason I suggest this is seemingly unrelated code in one place can break tests and/or code in another place. This happened several times at my last job. (David Kramer)
Re: the bits about unit tests: in fact I would change that to "I will write the unit tests before I write the code", because I'm a big believer in TDD. Another thing to say about tests: they are production code, treat them like it. (Scott Ames)
as for the line about commenting code, I can't say that I disagree more. Comments frequently lie, or just captain obvious stuff (eg. /* set x to y */ x=y;), and always just add extra baggage that has to be maintained in line with the actual code. Good clearly written, clearly designed code doesn't need "succinct comments to explain what I have done" - it's obvious from the code what it does, and the SCM commit comment and version diffs should illuminate *why* it was done. And if it doesn't refactor until it does. API documentation is a different beast, but this is usually aimed at users of the public methods, not readers of the code files, and it forms part of the released artifacts.
The most important definition of done is implied but merits explicit attention and I'd put it at the top of the list: * "All Acceptance Criteria defining 'done' for a feature are expressed as tests and pass."
Shane Hastie is an agile coach, trainer and consultant working for Software Education in Australia & New Zealand
18 agile and lean practices for effective software development governance
Case Study: IBM's Agile Transformation
SCM best practices for multiple processes, releases & distributed teams
In today’s hyper-competitive world, later may be too late to adopt Agile development and this Roadmap for Success will help you get started. Download "Agile Development: A Manager's Roadmap for Success" now!
If it's a manifesto, it should be general enough to apply to many situations. I really like the "the use of my code a pleasurable experience" because from that many good things will follow.
I would not be so strict on a few other things. Commenting every method and every change? That's sure to make your code unreadable. The code should represent the current state clearly, not convey its history. Furthermore, code should itself be readable, good naming and good practices (such as not returning null) diminish the need for comments.
The code coverage of 80% is arbitrary and should only be attained in situations where it adds value. I'd rather have 60% coverage with good unit tests for the tricky parts than 80% coverage with unit tests of the smoke-test kind.
How about, instead of "I will comment every change of my code", say "my code will read as if it were documentation, and everything it does will be self evident?
If this defines done, then we still only have checked-in, auto-tested code. It has not been auto-deployed to QA, it has not been approved by QA, it has not been approved by the Product Owner, and it certainly has not been staged for production. All of these steps are expensive and expose a multitude of problems that leave developers blissfully ignorant of how un-ready their solutions are for business users. Definition of done: staged for production.
John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.
Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.
Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.
Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).
Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.
Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.
One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.
InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.
3 comments
Watch Thread Reply