Fubaredness Is Contagious

Dmitriy Samovskiy’s Blog

Entries Tagged as 'software engineering'

On Dangers of Prematurely Making API Public

February 6th, 2010 · 2 Comments

From time to time, I come across a statement that every service on the Internet must have an API, or people behind this service are doing it wrong. This phrase usually applies specifically to publicly available API.
As a user who stands to benefit from increased number of services allowing third-party applications and mashups, I certainly [...]

[Read more →]

Tags: Internet · software engineering

Normal Accidents in Complex IT Systems

January 11th, 2010 · 3 Comments

Designing a fully-automated or nearly-fully-automated computer system with many moving parts and dependencies is tricky, whether a system is distributed, hyper distributed or otherwise. Failures happen and must be dealt with. After a while, most folks grow up from “failures are rare and can be ignored” to “failures are not that rare and can not [...]

[Read more →]

Tags: distributed · infrastructure development · software engineering

Standalone Web Front Door a Must in EC2?

October 13th, 2009 · 4 Comments

Most of you have probably heard about a recent outage at BitBucket. In a nutshell, their systems hosted at AWS came under a UDP flood DDoS attack, which led to significantly increased traffic, which led to saturation of their local network interface, which led to their being unable to connect to their data stored on [...]

[Read more →]

Tags: cloud computing · infrastructure development · software engineering

The Concept of Hyper Distributed Application

August 18th, 2009 · 1 Comment

Most folks in the industry are familiar with “distributed applications.” If app components are running on multiple hosts and need to communicate with each other using network, the app is said to be distributed.
Distributed applications are known for complexity of assuring all components are on the same page as to what’s going on around them. [...]

[Read more →]

Tags: Internet · distributed · software engineering

Electrical and Plumbing Analogies in Application Monitoring

August 10th, 2009 · Comments Off

Water and electricity are two components without which a modern home can’t function well. Both are provided as a utility, and both have strictly defined access points from which they can be consumed – taps for water and outlets for electricity.
But there are also differences. Every child knows that electric shock can cause injury even [...]

[Read more →]

Tags: software engineering

Developer’s Attempt to Define Cloud Computing

July 6th, 2009 · 6 Comments

I have been closely following cloud computing for many months now. As a developer, I get often frustrated by lack of clear and widely accepted definition of what cloud computing actually is. This is a problem, because without a definition, every imaginable operation performed over the Internet all of a sudden became a “cloud.” It [...]

[Read more →]

Tags: cloud computing · software engineering

Full Data vs Incremental Data in Messaging

June 25th, 2009 · 1 Comment

My recent experiments with messaging for a distributed application led to a realization that I would like to share with you in this post. It’s not an earth shaking discovery but you may still find it interesting.
Do you remember an old Unix command to create tape backups called dump? Remember its concept of levels? To [...]

[Read more →]

Tags: rabbitmq · software engineering

Why I Sometimes Prefer Shell To Ruby or Python

June 11th, 2009 · Comments Off

Shell was among the first things I got familiar with when I was introduced to Linux. It’s not a typical programming language, primarily due to lack of easy-to-use high-level data structures such as hashes and arrays (anticipating your objection to this – note I said “easy-to-use”). This may explain why I often get funny looks [...]

[Read more →]

Tags: python · ruby · software engineering

Branching In Git When Working On Big New Features

May 31st, 2009 · Comments Off

A note to self.
When starting to work on a new big feature, always set up 2 branches for it. Say FEATURE_work and FEATURE_integration. Do your regular development in FEATURE_work committing as often as you want. When you reach certain milestones (but entire feature is still not ready yet), squash merge FEATURE_work into FEATURE_integration. When entire [...]

[Read more →]

Tags: software engineering