<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Serious Technobabble</title>
    <description>Iván Stepaniuk's blog about software craftsmanship</description>
    <link>https://blog.istepaniuk.com/</link>
    <atom:link href="https://blog.istepaniuk.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 27 Oct 2020 17:23:31 -0500</pubDate>
    <lastBuildDate>Tue, 27 Oct 2020 17:23:31 -0500</lastBuildDate>
    <generator>Jekyll v4.1.0</generator>
    
      <item>
        <title>Implementation Inheritance Last</title>
        <description>&lt;h3 id=&quot;tldr&quot;&gt;TL;DR:&lt;/h3&gt;
&lt;p&gt;When designing, consider class composition and delegation BEFORE extending or designing classes for extension. Extension is less reusable and less maintainable. Don’t be very “clever”.&lt;/p&gt;

&lt;h3 id=&quot;a-bit-longer&quot;&gt;A bit longer:&lt;/h3&gt;
&lt;p&gt;Implementation inheritance is often not the best pattern to reuse code or make code reusable.&lt;/p&gt;

&lt;p&gt;Implementation inheritance breaks encapsulation and forces us to peek at the parent implementation to be able to inherit from it safely, the interface of the base class is not a safe contract to extend on.&lt;/p&gt;

&lt;p&gt;Inheritance is the tightest form of code coupling. It is especially dangerous in Ruby when mixed with concerns out of sight, mixins, and the fact that Ruby does not have a ‘final’ or ‘sealed’ mechanism to prevent unsafe inheritance.&lt;/p&gt;

&lt;p&gt;More often than not, it is better to compose or delegate rather to extend, especially when there is no clear and orthodox inheritance pattern (template method, strategy, etc.) It is often impossible to get inheritance right when adding features to existing code that does not follow OCP, not to mention trying to reuse these bits afterwards! Impossible.&lt;/p&gt;

&lt;p&gt;Composition is normally accomplished by DI through the constructor in the object that needs the behavior. DI in the Ruby world is kind of a controversial thing, mainly because of people misread and missquote @dhh. That aside, let’s just refrain from further designing “clever” inheritance-first designs. Even hardcoding dependencies in a service is a better way! (but you better not http://goo.gl/tLMGGb)&lt;/p&gt;

</description>
        <pubDate>Tue, 24 May 2016 00:00:00 -0500</pubDate>
        <link>https://blog.istepaniuk.com/implementation-inheritance-last/</link>
        <guid isPermaLink="true">https://blog.istepaniuk.com/implementation-inheritance-last/</guid>
        
        
        <category>Design</category>
        
        <category>Ruby</category>
        
      </item>
    
      <item>
        <title>The Shapes of Bad Code, Part 2</title>
        <description>&lt;p&gt;I have noticed that when looking at some not-so-awesome piece of code for the first time, I can tell many things about it even before putting my glasses on, and while scrolling at a speed at which it is actually impossible to read anything at all.&lt;/p&gt;

&lt;p&gt;This is Part 2, check out &lt;a href=&quot;/the-shapes-of-bad-code-part-1/&quot;&gt;Part 1&lt;/a&gt;!&lt;/p&gt;

&lt;h3 id=&quot;the-shape-of-bad-code-part-2&quot;&gt;The Shape of Bad Code, Part 2&lt;/h3&gt;

&lt;h4 id=&quot;abuse-of-vertical-spaces&quot;&gt;Abuse of vertical spaces&lt;/h4&gt;

&lt;p&gt;&lt;img src=&quot;/img/shape-vertical-space.png&quot; alt=&quot;Vertical space abuse&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The single-responsibility principle applies at many levels, and it definitely does at a method level. When a method does more than one thing but has not been split in separated methods, it is common to see vertical spaces separating this different functions. If you need to add vertical space to understand the body of a method, wouldn’t it be better to extract that second section as a separated method and give it a &lt;strong&gt;good name&lt;/strong&gt;?&lt;/p&gt;

&lt;h4 id=&quot;comment-delimited-sections&quot;&gt;Comment-delimited sections&lt;/h4&gt;

&lt;p&gt;&lt;img src=&quot;/img/shape-vertical-comments.png&quot; alt=&quot;Section comments&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This is a somewhat improved version of the previous shape. Each section is separated by vertical space, but comments have been added at the start of each section to try to make the reader’s life easier.&lt;/p&gt;

&lt;p&gt;Again, more often than not, this sections can be extracted into several methods, and those comments can be transformed into the names of the extracted methods. If there where many sections to extract, it is also probable that these methods actually belong to a &lt;strong&gt;new class&lt;/strong&gt;!&lt;/p&gt;

&lt;h4 id=&quot;stay-tuned-for-the-last-ugly-code-shapes&quot;&gt;Stay tuned for the last ugly code shapes!&lt;/h4&gt;
</description>
        <pubDate>Wed, 28 Jan 2015 00:00:00 -0600</pubDate>
        <link>https://blog.istepaniuk.com/the-shapes-of-bad-code-part-2/</link>
        <guid isPermaLink="true">https://blog.istepaniuk.com/the-shapes-of-bad-code-part-2/</guid>
        
        
      </item>
    
      <item>
        <title>I will never work for you</title>
        <description>&lt;p&gt;There are a couple of industry sectors that I would rather not write software for, ever. The most important ones are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Weapons, Military &amp;amp; Defense&lt;/li&gt;
  &lt;li&gt;Most Coal, Oil &amp;amp; Gas&lt;/li&gt;
  &lt;li&gt;Financial Services&lt;/li&gt;
  &lt;li&gt;High Speed Trading&lt;/li&gt;
  &lt;li&gt;Investment Banking&lt;/li&gt;
  &lt;li&gt;Most Adult Entertainment&lt;/li&gt;
  &lt;li&gt;Casinos &amp;amp; Gambling&lt;/li&gt;
  &lt;li&gt;Most Health Insurance&lt;/li&gt;
  &lt;li&gt;Digital Rights Management&lt;/li&gt;
  &lt;li&gt;Religious Organizations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are many others, the common denominator being that I do not believe these activities have a positive impact in our society.&lt;/p&gt;

&lt;h3 id=&quot;invitation&quot;&gt;Invitation&lt;/h3&gt;

&lt;p&gt;I make this list public as an invitation to you, software developer, to examine the &lt;strong&gt;social and ethical consequences&lt;/strong&gt; of our professional activity.&lt;/p&gt;

&lt;p&gt;It is undeniable that programmers have an increasing impact in our world through the software we write. If our only concern is doing our job right but we not mind about the consequences of what do, &lt;strong&gt;we risk becoming mercenaries&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At any point I suggest that my list is universal, different persons have different thresholds and sensibilities. It is nonetheless important that you ask yourself whether you are being consistent with your own values and principles, and perhaps, make your own list.&lt;/p&gt;

</description>
        <pubDate>Fri, 02 Jan 2015 00:00:00 -0600</pubDate>
        <link>https://blog.istepaniuk.com/i-will-never-work-for-you/</link>
        <guid isPermaLink="true">https://blog.istepaniuk.com/i-will-never-work-for-you/</guid>
        
        
        <category>Idle</category>
        
      </item>
    
      <item>
        <title>Dear recruiter</title>
        <description>&lt;p&gt;I am not actively looking for a new job at the moment. Nonetheless, &lt;strong&gt;thank you&lt;/strong&gt; very much for thinking about me for a position, or offering your help with my professional career.&lt;/p&gt;

&lt;p&gt;I am always open for new opportunities, and it is always good to keep an eye on our industry’s needs. I receive many requests or proposals like yours every week. Unfortunately, I could not possibly answer them all personally. That is why I have created this page on my site, I hope you do not mind.&lt;/p&gt;

&lt;p&gt;Even if I were actively searching for a new challenge, there are a couple of things I need to know &lt;strong&gt;upfront&lt;/strong&gt;, before actually considering it. Because this is &lt;strong&gt;non-negotiable&lt;/strong&gt;, I do not deal with external recruiters, headhunters or employment agencies of any sort. Understandably, they cannot provide this information. I am sorry if that is your case.&lt;/p&gt;

&lt;p&gt;The list may seem a bit extensive, but after all, these are basic things I would look for if I was applying for a position myself.&lt;/p&gt;

&lt;h4 id=&quot;basic-company-details&quot;&gt;Basic company details&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Mission, vision, purpose, market/customers.&lt;/li&gt;
  &lt;li&gt;The company founders, key people, who they are &amp;amp; what drives them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;is-there-a-dev-team-already&quot;&gt;Is there a dev team already?&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Who are the key team members&lt;/li&gt;
  &lt;li&gt;What have they done?&lt;/li&gt;
  &lt;li&gt;What are their team practices and values?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Furthermore, if you are an internal recruiter or HR person and can actually point or link to this essential information, note that there are a couple of industries and markets I rather not write software for, ever. See the list in &lt;a href=&quot;/i-will-never-work-for-you&quot; title=&quot;I will never work for you&quot;&gt;this post&lt;/a&gt;.&lt;/p&gt;

&lt;h1 id=&quot;thanks-for-understanding&quot;&gt;Thanks for understanding!&lt;/h1&gt;

&lt;h3 id=&quot;my-cv&quot;&gt;My CV&lt;/h3&gt;
&lt;p&gt;My &lt;a href=&quot;http://www.linkedin.com/in/istepaniuk&quot; title=&quot;Iván Stepaniuk LinkedIn profile&quot;&gt;LinkedIn profile&lt;/a&gt; is complete and updated. You can easily export a PDF from it if you need it.
There is also more information about me in &lt;a href=&quot;/about&quot;&gt;&lt;strong&gt;this page&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.linkedin.com/in/istepaniuk&quot; title=&quot;Iván Stepaniuk LinkedIn profile&quot;&gt;&lt;img alt=&quot;LinkedIn&quot; src=&quot;/img/icons/linkedin.png&quot; width=&quot;43&quot; height=&quot;43&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;contact-me&quot;&gt;Contact me&lt;/h4&gt;
&lt;p&gt;If you have further questions, you can mail me at istepaniuk@ Google’s well known free email service.&lt;/p&gt;

</description>
        <pubDate>Wed, 31 Dec 2014 00:00:00 -0600</pubDate>
        <link>https://blog.istepaniuk.com/dear-recruiter/</link>
        <guid isPermaLink="true">https://blog.istepaniuk.com/dear-recruiter/</guid>
        
        <category>recruiter</category>
        
        <category>hiring</category>
        
        
        <category>Idle</category>
        
      </item>
    
      <item>
        <title>The Shapes of Bad Code, Part 1</title>
        <description>&lt;p&gt;I have noticed that when looking at some not-so-awesome piece of code for the first time, I can tell many things about it even before putting my glasses on, and while scrolling at a speed at which it is actually impossible to read anything at all.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h4 id=&quot;-oh-my-god-look-at-this-code&quot;&gt;– &lt;em&gt;“Oh my god, look at this code!”&lt;/em&gt;&lt;/h4&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;the-shape-of-bad-code&quot;&gt;The Shape of Bad Code&lt;/h3&gt;

&lt;p&gt;So what is that I see? The only thing you can see while scrolling that fast and squinting is shapes, the shapes formed by different blocks of text filling the screen, plus the colors of your syntax highlighting.&lt;/p&gt;

&lt;p&gt;So I decided to make some screenshots of my text editor to illustrate some of these bad code shapes, and I will write a post for two of these at a time. I also distorted the images to make sure we are not actually reading this code.&lt;/p&gt;

&lt;h4 id=&quot;code-duplication&quot;&gt;Code Duplication&lt;/h4&gt;

&lt;p&gt;&lt;img src=&quot;/img/shape-duplication.png&quot; alt=&quot;Code duplication&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This is probably the best example so it goes first. This is JavaScript, but that is completely irrelevant in this case. This image shows two near-identical functions, both fit the screen and what’s going on is quite obvious. Sometimes a few scroll up &amp;amp; down movements are required to reveal a block of code that has been mercilessly copy-pasted, even more than once. I will not tell you why having duplicated code is bad, you probably learned that the first time you write a program with more than 30 lines.&lt;/p&gt;

&lt;p&gt;This duplication was probably introduced because it would have taken 120 more seconds to understand the original functionality and modify the existing code accordingly. Of course, it will now take 10 minutes to revert the damage, or even more if the different copies started to diverge.&lt;/p&gt;

&lt;h4 id=&quot;too-many-dependencies&quot;&gt;Too Many Dependencies&lt;/h4&gt;

&lt;p&gt;&lt;img src=&quot;/img/shape-imports.png&quot; alt=&quot;Too may dependencies&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This is Python code, but the same shape is valid for any other language that requires you to declare the dependencies before using them, and that would be most of them.&lt;/p&gt;

&lt;p&gt;We do not know what is that this piece of code does, but there is something I can be sure of; There is practically no way that a this file/module/class is doing &lt;strong&gt;only one thing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If it needs this all these &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;import&lt;/code&gt; statements, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Single_responsibility_principle&quot;&gt;single responsibility principle&lt;/a&gt; is clearly not being observed. If the file/module had many smaller classes with different dependencies each, it’s also time to split this file into smaller ones, as almost every reason to observe SRP in classes and methods also applies for entities at the file (or module, package, assembly, etc.) level.&lt;/p&gt;

&lt;h4 id=&quot;more-ugly-code-shapes&quot;&gt;More ugly code shapes!&lt;/h4&gt;
&lt;p&gt;Check out &lt;a href=&quot;/the-shapes-of-bad-code-part-2/&quot;&gt;Part 2&lt;/a&gt;, and also &lt;a href=&quot;/the-shapes-of-bad-code-part-3/&quot;&gt;Part 3&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 29 Dec 2014 00:00:00 -0600</pubDate>
        <link>https://blog.istepaniuk.com/the-shapes-of-bad-code-part-1/</link>
        <guid isPermaLink="true">https://blog.istepaniuk.com/the-shapes-of-bad-code-part-1/</guid>
        
        
        <category>Idle</category>
        
      </item>
    
      <item>
        <title>Something Is Terribly Wrong with Wordpress</title>
        <description>&lt;h3 id=&quot;warning-this-is-just-a-rant-probably-you-should-not-read-it&quot;&gt;WARNING: This is just a rant, probably you should not read it.&lt;/h3&gt;

&lt;p&gt;This 2014 was a year of many changes, new company, new country, new house, all excellent excuses to stop writting posts! Lately, for these and other reasons I was not finding a lot of oportunities to write here. To make it even worse, every time I logged into my wordpress admin interface to write a draft or post, I remembered how hard Wordpress sucks. Really.&lt;/p&gt;

&lt;p&gt;Some years ago I decided to start blogging and went with Wordpress. It was the obvious choice, popular, and very easy to install and use. The problem is that what you get from &lt;strong&gt;Wordpress out of the box is not good enough&lt;/strong&gt;, at least if you are anywhere close to serious about it.&lt;/p&gt;

&lt;p&gt;As soon as you go online the spam will start pouring down. The built-in comment system can drive you crazy when you have 1 real comment for every 5000, but that’s easy, just spend half a day trying plugins until you find the one that does not cost you an eye and actually filters something.&lt;/p&gt;

&lt;p&gt;The same goes for social buttons, analytics, your twitter card, &lt;strike&gt;google authorship&lt;/strike&gt;,… &lt;strong&gt;Plugin magic!&lt;/strong&gt;. Do you want to add some code snippets to your posts? No problem, 3 or 4 plugins latter you will find something that does not completely destroy the theme or brings the whole server down.&lt;/p&gt;

&lt;p&gt;Wordpress releases updates quite often, but many of those installed plugins will start failing with even minor version upgrades, not only because they are hacky (some really are, even the popular ones) but because everything seems to be so tightly coupled to the Wordpress core that &lt;strong&gt;they shouldn’t be called plugins but grafts.&lt;/strong&gt; Good luck trying to keep all those updated. 17 in my case.&lt;/p&gt;

&lt;p&gt;All these hacks slow down your site, but don’t worry, there is a cache plugin to solve that! there is even a plugin to make Wordpress secure enough (WTF!) so your hosting provider does not shut you down when some script tries to brute-force your admin credentials, or when spammers bring your site to it’s knees.&lt;/p&gt;

&lt;h3 id=&quot;back-to-square-one&quot;&gt;Back to square one&lt;/h3&gt;

&lt;p&gt;With all those hacks, the site can respond reasonably fast for the public, but that doesn’t make the admin interface any faster, specially if you are on a cheap hosting provider. Bet your bottom dollar that any support ticket about Wordpress performance is going to contain “disable all the plugins” in the very first answer.&lt;/p&gt;

&lt;h3 id=&quot;questions&quot;&gt;Questions&lt;/h3&gt;

&lt;p&gt;Given that:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I have &lt;strong&gt;less than 200KB&lt;/strong&gt; of written content.&lt;/li&gt;
  &lt;li&gt;I have less than 4MB of pictures.&lt;/li&gt;
  &lt;li&gt;The site gets an average of 100 daily sessions with only 1.2 views per sessions.&lt;/li&gt;
  &lt;li&gt;It has very, very ocasional traffic bursts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Why do I need all these plugins?&lt;/li&gt;
  &lt;li&gt;A cache plugin? Why isn’t it just fast enough for this?&lt;/li&gt;
  &lt;li&gt;A security plugin? Why isn’t it secure enough?&lt;/li&gt;
  &lt;li&gt;Why is that the built-in comment system is not practical, even for a small site?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Why do I need a full-fledged RDBMS to power a simple blog?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I just want to write some stuff, it shouldn’t be so damn complicated.&lt;/p&gt;

&lt;h3 id=&quot;the-solution&quot;&gt;The solution&lt;/h3&gt;
&lt;p&gt;If you are not a developer or sysadmin or you would rather spend your time blogging and not dealing with this nightmare, get somebody to manage your Wordpress for you, or get a paid &lt;a href=&quot;http://wordpress.com&quot;&gt;wordpress.com&lt;/a&gt; account, or a &lt;a href=&quot;http://ghost.org&quot;&gt;ghost.org&lt;/a&gt; one, etc. Running it yourself is an incredible waste of time.&lt;/p&gt;

&lt;p&gt;If you ARE a developer or sysadmin wanting to run a tech blog, &lt;strong&gt;there is a solution!&lt;/strong&gt; it’s called &lt;a href=&quot;http://www.jekyllrb.com&quot;&gt;Jekyll&lt;/a&gt; and I will tell about it very soon!&lt;/p&gt;
</description>
        <pubDate>Sun, 28 Dec 2014 00:00:00 -0600</pubDate>
        <link>https://blog.istepaniuk.com/something-is-terribly-wrong-with-wordpress/</link>
        <guid isPermaLink="true">https://blog.istepaniuk.com/something-is-terribly-wrong-with-wordpress/</guid>
        
        
        <category>Idle</category>
        
      </item>
    
      <item>
        <title>Linux Counter</title>
        <description>&lt;p&gt;I just remembered I have one of these, and look! It still works!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://linuxcounter.net/cert/325954.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Soon it’s going to be 15 years since I started using Linux, time flies.&lt;/p&gt;

</description>
        <pubDate>Sat, 15 Feb 2014 00:00:00 -0600</pubDate>
        <link>https://blog.istepaniuk.com/linux-counter/</link>
        <guid isPermaLink="true">https://blog.istepaniuk.com/linux-counter/</guid>
        
        
        <category>Idle</category>
        
      </item>
    
      <item>
        <title>Just installed Ghost on Heroku!</title>
        <description>&lt;h3 id=&quot;check-it-out-and-you-can-continue-reading-there-it-is-a-copy-of-this-post&quot;&gt;&lt;a title=&quot;This post Ghost, on Heroku&quot; href=&quot;http://istepaniuk.herokuapp.com/just-installed-ghost-on-heroku/&quot; target=&quot;_blank&quot;&gt;Check it out!&lt;/a&gt; (And you can continue reading there, it is a copy of this post)&lt;/h3&gt;

&lt;p&gt;I was looking for alternatives to WordPress for my blog, I wanted it to be:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Opengraph compatible&lt;/li&gt;
  &lt;li&gt;Good SEO support&lt;/li&gt;
  &lt;li&gt;Markdown based&lt;/li&gt;
  &lt;li&gt;Fast&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my search, I’ve found &lt;a href=&quot;http://www.tryghost.org&quot; target=&quot;_blank&quot;&gt;Ghost&lt;/a&gt;, it was REALLY fast on my old laptop and It seemed like a nice oportunity to give Heroku a try.&lt;/p&gt;

&lt;p&gt;I always liked the heroku concept, and my current &lt;a href=&quot;http://www.quijost.com&quot; target=&quot;_blank&quot;&gt;hosting&lt;/a&gt; does not support Node.JS anyway (though it does suport Python and Ruby!)&lt;/p&gt;

&lt;p&gt;Editing text on Ghost is just awesome! Writting in markdown with side-by-side instant preview, is just awesome. Check it out at their site, or watch the video.&lt;/p&gt;

&lt;p&gt;&lt;iframe src=&quot;//www.kickstarter.com/projects/johnonolan/ghost-just-a-blogging-platform/widget/video.html&quot; height=&quot;480&quot; width=&quot;640&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;Ghost is free and open source, they also plan to have their own hosting service, similar to wordpress.org, I guess.&lt;/p&gt;

&lt;h1 id=&quot;asking-for-trouble&quot;&gt;Asking for trouble&lt;/h1&gt;

&lt;p&gt;I had to crazy-patch Ghost to make it work on Postgres as this database is not yet supported. It comes with SQLite as default and besides that, it only supports MySQL officially.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is not a good idea to run Ghost on a free Heroku account&lt;/strong&gt;, as MySQL is not available and your uploaded images will be erased by the Heroku’s ephimerous filesystem.&lt;/p&gt;

&lt;p&gt;In any case, Ghost is probably my next blogging platform.&lt;/p&gt;
</description>
        <pubDate>Sun, 17 Nov 2013 00:00:00 -0600</pubDate>
        <link>https://blog.istepaniuk.com/just-installed-ghost-on-heroku/</link>
        <guid isPermaLink="true">https://blog.istepaniuk.com/just-installed-ghost-on-heroku/</guid>
        
        
        <category>Idle</category>
        
        <category>JavaScript</category>
        
      </item>
    
      <item>
        <title>What Is Enterprise Software?</title>
        <description>&lt;p&gt;Big IT vendors market their products as “enterprise ready”, basically meaning “ready to rip you off”. This, and other misuses of the term explain why using the word “enterprise” to describe a piece of software triggers horrified looks and trying-not-to-vomit faces. The &lt;a href=&quot;http://www.urbandictionary.com/define.php?term=intertubes&quot; target=&quot;_blank&quot;&gt;intertubes&lt;/a&gt; have excellent definitions for what Enterprise Software is, but it seems there is place for yet another answer to this question.&lt;/p&gt;

&lt;p&gt;Not so surprisingly, in the first pages of Martin Fowler’s &lt;a href=&quot;http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420&quot;&gt;&lt;em&gt;Patterns of Enterprise Application Architecture&lt;/em&gt;&lt;/a&gt;, there is a good definition of what Enterprise Software is, and what isn’t.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“&lt;strong&gt;Enterprise applications&lt;/strong&gt; are about the display, manipulation, and storage of large amounts of often complex data and the support or automation of business processes with that data.” -Martin Fowler&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fowler’s book also gives some examples of what is not Enterprise Software:* “Automobile fuel injection, word processors, elevator controllers, chemical plant controllers, telephone switches, operating systems, compilers and games”*&lt;/p&gt;

&lt;p&gt;The English Wikipedia has a fairly good article on what &lt;a href=&quot;http://en.wikipedia.org/wiki/Enterprise_software&quot;&gt;Enterprise Software&lt;/a&gt; means:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;“Enterprise software&lt;/strong&gt;, is purposed-designed computer software used in the furtherance of the needs and objectives of the organizations; such purposes can vary widely as in a business, schools, interest-based user groups and clubs, retailers, or government, as opposed to software used by individuals.” (from the English Wikipedia)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, next time you hear “Enterprise Software”, &lt;strong&gt;try not to think about the dark side&lt;/strong&gt;, let’s recover the term.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.thinkgeek.com/product/e732/&quot;&gt;&lt;img class=&quot;size-full wp-image-551&quot; alt=&quot;Darkside&quot; src=&quot;/img/dark-side.jpg&quot; /&gt;&lt;/a&gt;
&lt;span style=&quot;color: #aaa;&quot;&gt;This image copyright is owned by ThinkGeek, it is used here to represent and link to their product.&lt;br /&gt;This site has no affiliation with ThinkGeek whatsoever.&lt;/span&gt;&lt;/p&gt;

</description>
        <pubDate>Sun, 29 Sep 2013 00:00:00 -0500</pubDate>
        <link>https://blog.istepaniuk.com/what-is-enterprise-software/</link>
        <guid isPermaLink="true">https://blog.istepaniuk.com/what-is-enterprise-software/</guid>
        
        
        <category>Idle</category>
        
      </item>
    
      <item>
        <title>Conferencia Agile Spain 2013</title>
        <description>&lt;p&gt;I will be speaking at this year’s CAS, the most important Agile conference in Spain, held yearly in a different city each time: &lt;a href=&quot;http://conferencia2013.agile-spain.org/en/la-conferencia/&quot; target=&quot;_blank&quot;&gt;http://conferencia2013.agile-spain.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://conferencia2013.agile-spain.org/en/la-conferencia/&quot; target=&quot;_blank&quot;&gt;&lt;br /&gt; &lt;img alt=&quot;CAS 2013 Logo&quot; src=&quot;/img/logo-cas.jpg&quot; width=&quot;621&quot; height=&quot;180&quot; /&gt;&lt;br /&gt; &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My talk title will be “&lt;strong&gt;Effective Pair Programming&lt;/strong&gt;“. The idea with the title (besides not being very original) is to emphasize that it won’t be yet another pair programming evangelism talk, but rather a talk about improving the way developers pair, targeted at those who failed, are struggling with, or want to improve their pair programming skills.&lt;/p&gt;

&lt;p&gt;Below is the talk abstract/proposal. &lt;strong&gt;See you in Bilbao!&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&quot;effective-pair-programming&quot;&gt;Effective Pair Programming&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pair programming is a central element in Extreme Programming (XP) and its correct practice dramatically improves software quality. The technique is however quite difficult to master, and not doing it properly will not only be frustrating for the developers but also a waste of the company resources. This talk introduces different approaches to the technique and shows the audience how to avoid the common pitfalls that developers will encounter in their path to effective pair programming.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this presentation, I will cover the principles underneath the technique’s productivity gains and why it increases the amount of error-free code over solo programming without spending more resources. I will also show how its practice reduces the team bus factor, and how pair rotation distributes information, effectively eliminating knowledge islands in the team.&lt;/p&gt;

&lt;p&gt;Different developers have different experience levels and personalities. I will talk about different combinations and how to overcome these mismatches to enable the pair to become greater than the sum of its parts, thus producing software of greater quality and maintainability. I will cover the classical XP driver/navigator roles but also tag-teams and less formal approaches.&lt;/p&gt;

&lt;p&gt;Pair programming is a challenging practice, and though it is not a novelty, it is still surrounded by many misconceptions. I will step through DO’s and DON’ts based on both documented and my own grounded experience on the topic, how it tightly fits other agile development practices such as Test Driven Development, and what to expect when introducing this technique in a team.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://cas2k13.ideascale.com/a/dtd/Effective-Pair-Programming/4166-24662&quot; target=&quot;_blank&quot;&gt;Link to the proposal on IdeaScale&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 09 Sep 2013 00:00:00 -0500</pubDate>
        <link>https://blog.istepaniuk.com/conferencia-agile-spain-2013/</link>
        <guid isPermaLink="true">https://blog.istepaniuk.com/conferencia-agile-spain-2013/</guid>
        
        <category>Agile-Spain</category>
        
        <category>CAS</category>
        
        <category>conference</category>
        
        
        <category>Agile</category>
        
        <category>Community</category>
        
      </item>
    
  </channel>
</rss>
