Search This Blog

Culture vs Process

Process is overrated

Many large companies and organizations focus on their process, how they develop, deploy, or simply go about doing a particular task. This isn't just for software development, this is also done in colleges, schools, even construction companies use a specific process to make sure that certain things are done right. The unfortunate aspect is that process alone doesn't do anything; it's simply a set of guidelines that typically end up injecting complication without actually assuring any real success. Process is something anyone can duplicate, what's more important to develop is culture.

Culture is the work environment that you create for your employees, and the people you hire. It's not about the software you purchase or forms you fill out, it's about how you go about communicating with your staff, and the attitude and atmosphere you create. When you have political goals with every communication, you provide a negative culture, which completely destroys any productivity.

Process in Development

When you're a single developer, making applications can be incredibly simple and fast. You don't have to worry about process overhead, or merging your changes with someone else. However, your bandwidth of what you can get done is incredibly small, and you realistically can only work on a single project at once if you want to get things done in a timely manor. Once you start to grow to multiple people, it's often practice to inject a complex Process including code reviews and automated test, which often tend to slow down your individual development. Once you inject a complex process into your development cycle, it typically takes at least twice the amount of developers to get the same amount of work done.

However, if you instead focus on culture, and be very specific about the types of people who can commit to your code base, you'll find that the work throughput increases. By removing the need for added overhead of a complex process, you begin to find that people are more important then process.

Process in Schools

When choosing to further your education, most colleges are identical in class structure. There's even a set process that almost every classroom handles, a specific lesson plan, even down to the homework is all planned out. There's virtually no difference between going to a place like RIT or MCC, even MIT when it comes to the classes. Yes, some classes have a few better tools, but that's really not where you're learning, and often they are not even needed. Even now you can go online to places like http://www.khanacademy.org/ and learn everything you would in a traditional school for free.

The difference you get is with the culture of these places. For example, at RIT they've noted very quickly that you don't learn nearly as much in the classroom as you do outside the classroom, in the real world. This is why they force almost every major to take at least 12 months worth of co-op work. These are real-world jobs that you're sent out to after they believe you've been prepared. Additionally, they provide a very good culture of students and faculty that's designed around helping you learn. You don't learn from a book, you learn from a person.

Focus on culture

It's not nearly as important to focus on a strict process that involves code reviews, unit tests, and hand-holding developers as it is to make sure you get the rightkind of developers. Focus on creating a good atmosphere and culture and your developers will prosper.

Popular Posts

Ever wonder how sites like battle.net support things like this in Google Chrome?

Well I did, so I did a little bit of digging. It turns out Google Chrome supports an open standard called Open Search. This format is relatively simple, and very easy to add to your own site. I just added it to some of our systems in under 5 minutes.

Adding OpenSearch to your site is incredibly simple, you just have to add a simple tag to your index HTML page, and add a simple XML file that it points to. The link tag looks like this:
<link rel="search" type="application/opensearchdescription+xml" href="http://my-site.com/opensearch.xml" title="MySite Search" />

For a while, I have been creating command line tools provided right with boto which I used to manage AWS. Recently, others have become interested in these tools as well, and I've seen several other contributors adding to these tools to make them even more useful to others. One recent submission by Ales Zoulek added some nice features to my list_instances command, which I use on a regular basis to list out the instances that are currently active for my account in EC2.

Amazon now lets you add Tags to EC2 objects such as Instances and Snapshots. This allows you to actually "Name" your EC2 instance, as well as add some metadata that could be used for AMI initialization, etc. Ales added the ability to list these tags by name within the list_instances command line application:

Last week, Amazon announced the launch of a new product, DynamoDB. Within the same day, Mitch Garnaat quickly released support for DynamoDB in Boto. I quickly worked with Mitch to add on some additional features, and work out some of the more interesting quirks that DynamoDB has, such as the provisioned throughput, and what exactly it means to read and write to the database.

One very interesting and confusing part that I discovered was how Amazon actually measures this provisioned throughput. When creating a table (or at any time in the future), you set up a provisioned amount of "Read" and "Write" units individually. At a minimum, you must have at least 5 Read and 5 Write units partitioned. What isn't as clear, however, is that read and write units are measured in terms of 1KB operations. That is, if you're reading a single value that's 5KB, that counts as 5 Read units (same with Write). If you choose to operate in eventually consistent mode, you'r…