<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>On the way to perfect computing &#187; architecture</title>
	<atom:link href="http://blog.alexzender.com/category/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.alexzender.com</link>
	<description>Just another bunch of coding thoughts by Alexander Vushkan</description>
	<lastBuildDate>Tue, 02 Jun 2009 13:26:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>The Business Model and its Impact on Product Architecture</title>
		<link>http://blog.alexzender.com/2009/03/18/business-model-and-architecture/</link>
		<comments>http://blog.alexzender.com/2009/03/18/business-model-and-architecture/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 19:21:06 +0000</pubDate>
		<dc:creator>Alexander Vushkan</dc:creator>
				<category><![CDATA[architecture]]></category>

		<guid isPermaLink="false">http://blog.alexzender.com/?p=50</guid>
		<description><![CDATA[Today I would like to talk about the impact that business model actually makes on a product architecture. I mean how the way that company uses to earn money affects its growth and profitability via product architecture. When you are writing custom piece of software for particular customer, the strategy is simple &#8211; do your [...]]]></description>
			<content:encoded><![CDATA[<p>Today I would like to talk about the impact that business model actually makes on a product architecture. I mean how the way that company uses to earn money affects its growth and profitability via product architecture.</p>
<p>When you are writing custom piece of software for particular customer, the strategy is simple &#8211; do your best to satisfy the customer as much as possible with the minimal development efforts/investments. In order to achieve that you need to design architecture in that way to predict as much number of future changes as possible, make your product easy to change and move sequentially forward in the future. That&#8217;s why you split your architecture into layers, you create abstract interfaces, you apply concrete implementations, and finally you make your architecture pluggable and easy to extend.  You rely on 3rd party libraries, you try  to re-use previous experience and code snippets/libraries. Of course you are facing a lot of other development challenges here, as everyone does in software world today, but the key question is how to save efforts on product development. Do more with the help of less.</p>
<p>This question leads us to that idea that almost every company that has specialty, tries to build a platform instead of developing an ad-hoc solution each time from scratch. They develop platform that is easy to customize for particular customer. If the job is done properly (by perfect beings in perfect world:), number of your customers will not depend on number of development investments. Profitable model.Write once, sale many times.<br />
That reminds me one of easy to scale patterns &#8211; write once, read many times(read optimized scenario requires you to optimize data at write time)<br />
In this case the challenge is to split you product architecture into bricks. Easy to replace, easy to rebuild, easy to append. Another challenge is how to build ideal platform, the framework that can be easily customized for any customer&#8230;and keep it simple. Both, on UI and code level. That&#8217;s true art, to build the system that&#8217;s complex in a whole, at the same time consisting of simple disjoint blocks.</p>
<p>So, we examined companies that sell products and platforms. But there are companies that don&#8217;t sell products and nevertheless stay alive in software business. They do have own products, but they sell advertising. Google is the best example. This is indirect model. The profitability lies in a number of users using a product. Nobody will use Google AdWords if few clients use Google Search.So, to stay alive in this business you need to keep existing customers and constantly gain ground using new ones. Like a shark, keep moving or you will die. Other competitors will intercept your users.</p>
<p>In order to serve such incredible number of users you need to scale your product easily. You need to do less job with a less number of machines in a cluster. Electricity bills matter here. Performance, fail-over, load balancing, capacity reserve. All these items are answers to one simple question stated by the business model &#8211; how to handle large number of users/content transparently and efficiently without expensive hardware infrastructure at the same time saving development efforts.</p>
<p>The main idea is that everything has its origin, like anything in a universe. Everything starts from something and leads to something. There is a reason for everything around us. And each day, on each page of code you can make your influence on the company in whole.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alexzender.com/2009/03/18/business-model-and-architecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It Reduces Our Coding Fun</title>
		<link>http://blog.alexzender.com/2008/12/12/it-reduces-our-coding-fun/</link>
		<comments>http://blog.alexzender.com/2008/12/12/it-reduces-our-coding-fun/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 11:35:45 +0000</pubDate>
		<dc:creator>Alexander Vushkan</dc:creator>
				<category><![CDATA[architecture]]></category>

		<guid isPermaLink="false">http://blog.alexzender.com/?p=52</guid>
		<description><![CDATA[Yeah, sometimes the code just flies out under our fingers, you don&#8217;t think about typing, you don&#8217;t think about switching between editors, IDE panels and browsers, you do all of this automatically, all you can think is your idea and its implementation. Done, for a couple of hours. In these cases you don&#8217;t need deep [...]]]></description>
			<content:encoded><![CDATA[<p>Yeah, sometimes the code just flies out under our fingers, you don&#8217;t think about typing, you don&#8217;t think about switching between editors, IDE panels and browsers, you do all of this automatically, all you can think is your idea and its implementation. Done, for a couple of hours. In these cases you don&#8217;t need deep debugging cycles, you already thought over every detail, like a painter creating beautiful picture,mirroring it from your mind directly to keyboard&#8230;</p>
<p>Unfortunately, as it usually goes, our coding life is not so appealing. Sometimes you do nothing but just update your Eclipse, you look for new features and bugfixes, but surprisingly some stupid plug-in consumes your CPU cycles and prevent Eclipse from breathing freely.<br />
Sometimes it&#8217;s a set of other non-technical factors that makes your coding muse leave&#8230;</p>
<p>But from time to time some annoying bug appears assigned to you, and you realize that you don&#8217;t want to fix it at all. By no means I&#8217;m telling that you don&#8217;t like fixing bugs at all. Bugs are part of our life, accept it. It&#8217;s a good thing to do &#8211; fix them. But I would like to touch those bugs that are injected because of architecture. Somewhere deep inside you understand that global factors caused these bugs.</p>
<p>Looking around you will find a lot of books on software design. They talk a lot about software quality and how software processes are connected to it. They all tell you not-todo-things. Clear set of things you should avoid to do. Why? Because it&#8217;s simple to describe someone&#8217;s failure and try to guess origins. There is plenty of examples in the field already. They&#8217;ve got a lot todo &#8211; put it on paper.<br />
However, I guess that a couple of guys on our planet still know how to write software in a right way, but usually they don&#8217;t like writing books <img src='http://blog.alexzender.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Each software type is special, it requires a set of specific patterns and approaches. You need to combine a lot of ingredients in order to get perfect soup. In case of software, you should be ready to make another soup at any worth-while point. Moreover, architecture should be self-explanatory, it shouldn&#8217;t take a lot of developer&#8217;s efforts to decide where he should put new piece of functionality. It&#8217;s a function of a lot of params.<br />
So, almost everyone faces a moment when there are no uncovered challenges left in the projects he is working on. You know technologies, you know your domain area, sometimes only introducing new frameworks makes you smile.</p>
<p>So, the truth is, that your next challenge should be <span style="text-decoration: line-through;">re-</span>writing you project in that way, that it will be easy to fix bugs and it will be difficult to discover difficult-to-fix architectural bugs, there will be a minimal of &#8220;chain bugs&#8221;  &#8211; when changes in one places screw up others. Your architecture will protect you. Like technology makes impossible for drunk tram driver to hurt people walking around, due to rails.</p>
<p>And in order to solve this puzzle, you need to question yourself each time you are looking at newly discovered bug &#8211; &#8220;What&#8217;s the origin of this?&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alexzender.com/2008/12/12/it-reduces-our-coding-fun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Memcached Development Story</title>
		<link>http://blog.alexzender.com/2008/07/15/memcached-development-story/</link>
		<comments>http://blog.alexzender.com/2008/07/15/memcached-development-story/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 23:51:26 +0000</pubDate>
		<dc:creator>Alexander Vushkan</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[distributed computing]]></category>
		<category><![CDATA[memcached]]></category>

		<guid isPermaLink="false">http://blog.alexzender.com/?p=30</guid>
		<description><![CDATA[I met the article written by Brad Fitzpatrick in 2004. It&#8217;s interesting to track his thoughts on the memcached development. Now it&#8217;s used everywhere in industry if the distributed memory-based caching needed. The key of its efficiency is an architecture represented by a set of isolated nodes that don&#8217;t know aware of each other. The [...]]]></description>
			<content:encoded><![CDATA[<p>I met the article written by Brad Fitzpatrick in 2004. It&#8217;s interesting to track his thoughts on the memcached development. Now it&#8217;s used everywhere in industry if the distributed memory-based caching needed.</p>
<p>The key of its efficiency is an architecture represented by a set of isolated nodes that don&#8217;t know aware of each other. The client makes decisions on data management. This provides very high scale-out factor.</p>
<p>On the other hand, in regular cluster-based systems there is a master server and slave nodes. Slave nodes are very helpful as they help to distribute and speed up read requests. But as soon as write activities occur in a cluster, it&#8217;s a pain to broadcast all changes to all nodes. The deployment schema becomes inefficient.</p>
<p>As always, it&#8217;s a chain of trade-offs to be considered&#8230;</p>
<p>Enjoy &#8211; <a href="http://www.linuxjournal.com/article/7451">http://www.linuxjournal.com/article/7451</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alexzender.com/2008/07/15/memcached-development-story/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
