<?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>Leonidas Oy</title>
	<atom:link href="http://leonidasoy.fi/feed" rel="self" type="application/rss+xml" />
	<link>http://leonidasoy.fi</link>
	<description></description>
	<lastBuildDate>Fri, 20 Aug 2010 12:38:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Now Hiring: Passionate People</title>
		<link>http://leonidasoy.fi/2010/08/20/now-hiring-passionate-people</link>
		<comments>http://leonidasoy.fi/2010/08/20/now-hiring-passionate-people#comments</comments>
		<pubDate>Fri, 20 Aug 2010 12:29:45 +0000</pubDate>
		<dc:creator>Kari Peltola</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://leonidasoy.fi/?p=820</guid>
		<description><![CDATA[
We&#8217;re in the business of bringing new ideas ...]]></description>
			<content:encoded><![CDATA[<div>
<p>We&#8217;re in the business of bringing new ideas to life. It is our responsibility—our commitment to our clients—to exceed their expectations. As we all know, this mandate never comes without a price.</p>
<p>There are numerous, glorious (and even more inglorious) battles to fight against technical obstacles, internal/external resistance and, sometimes, even against the customer.</p>
<p>If you feel driven to exceed customer expectations and develop yourself as a software wizard, join us in our quest.</p>
<p>Leonidas develops software that matters. Our customers are industry-leading multinationals and startups positioned to create substantial value for their own customers using IT solutions. Our core competence lies in understanding the value-creation mechanisms of our customers. We create superior solutions by exploiting years of experience in agile methodologies, alongside technical excellence and business acumen. Our operations concentrate on Web and mobile domains and technologies.</p>
<p><strong>Interested? Let&#8217;s see how you can become a part of our team.</strong></p>
<p>Passion rules the game. As I have met people from different walks of life—be it teachers, software developers or architects— I have found one thing those making a difference have in common: passion. It&#8217;s that drive—that inner urge to create something new or improve something old. When you have it, there&#8217;s nothing that can stop you.</p>
<p><strong><em>We&#8217;re looking for people with passion.</em></strong></p>
<p>Understanding is essential. Let me clarify this a bit: You need to be able to understand what those things are that create value for the customer. I know they didn&#8217;t teach you that in school—they taught you how to write code. Well, in our world, writing code is not enough. Every developer makes hundreds of decisions every day. Some of them are major; some are minor; but every single decision is potentially meaningful. In order to make good decisions, the developer has to be able to understand the context and the dynamics of value creation.</p>
<p><strong><em>We&#8217;re looking for people who understand.</em></strong></p>
<p>Knowledge of preferred technologies and experience, however, do give you an edge in the interview. Currently, we&#8217;re looking for developers who are familiar with Ruby on Rails, Java and mobile frameworks. Now, if you have 3-5 years (or more) of relevant work experience accompanied with references and a spectacular track record, let us know you exist.</p>
<p><strong><em>We&#8217;re primarily looking for people with relevant work experience.</em></strong></p>
<p>The next step? Just send me an open application, and we&#8217;ll see how it goes. :)</p>
<p>Some tips:</p>
<p>- There are a million places that describe how to make an impression during the job interview. Check out at least one of those.</p>
<p>- Rehearse what you&#8217;re going to say…  <em>before</em> you come to the interview.</p>
<p>- Bring a piece of code with you, and prepare to explain what you have done.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://leonidasoy.fi/2010/08/20/now-hiring-passionate-people/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Software Quality and the Next Big Language, Part I</title>
		<link>http://leonidasoy.fi/2010/03/07/on-software-quality-and-the-next-big-language-part-i</link>
		<comments>http://leonidasoy.fi/2010/03/07/on-software-quality-and-the-next-big-language-part-i#comments</comments>
		<pubDate>Sun, 07 Mar 2010 10:00:41 +0000</pubDate>
		<dc:creator>Edvard Majakari</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming language]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software architecture]]></category>

		<guid isPermaLink="false">http://www.leonidasoy.com/?p=722</guid>
		<description><![CDATA[In  this post, I’ll attempt to explain ...]]></description>
			<content:encoded><![CDATA[<p>In  this post, I’ll attempt to explain one of the most important principles  in software engineering and show how it affects the design and use of  programming languages.</p>
<p><span id="more-722"></span></p>
<h3>Nature of Software Quality</h3>
<p>Software quality is still one of the  great challenges in the industry. Due to the inherent and unique nature  of computer programs, there are no universally accepted methods for  ensuring apparent program quality and even fewer practical methods for  program verification. However, both of these are not only very  important, but also are related. Furthermore, final product quality  takes much more than ensuring good source code quality: there is the  user interface and overall user experience, documentation, etc. Quality  has to permeate the whole project, not just the software and implicit  byproducts. There is requirement analysis, customer communication,  project management, support. Customers are not seeking quality software  tools for their problems—what they really want is <em>quality solutions</em> to  their problems. That aside, my scope here is limited to the source code  quality.</p>
<p>Curiously enough, many professional developers  seem to be able to distinguish intuitively between a poorly written  program and a quality one. Yet most tools capable of producing  comparable, numeric values somehow denoting a specific, qualitative  aspect of source code are frowned upon. This is not because such tools  are useless; the problem is that it takes more than a glance at the  final aggregated figure(s) to really benefit from them. In particular,  static source code analysis takes you only so far. Many important  aspects in the source code do not deal with syntax but with semantics,  something of which our computers are blissfully ignorant.</p>
<h3>The Principle</h3>
<p>I have  often pondered a question that an apprentice programmer might pose: <em>What is the single most important thing I  should learn to become a Good Programmer?</em> Recently, I think I  have found the answer. It is the principle known as <a href="http://trese.cs.utwente.nl/taosad/separation_of_concerns.htm"><em>Separation of Concerns</em></a> (SoC). It  seems that <a href="http://www.research.ibm.com/hyperspace/workshops/icse2001/Papers/habra.pdf">I am not alone</a>. To put it loosely, SoC means that a  module, class, function, or method in a computer program should deal  with only one thing, with no functional overlap with others. It is  closely tied to the concept of loose coupling, and is considered so  important that most programming paradigms aim to help developers achieve  SoC.</p>
<p>All <a href="http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29">design patterns</a> separate the specific  composition of objects and functionality as a whole (the pattern) from  the objects’ individual, domain-specific functionality. Procedural  programming helps achieve SoC by separating concerns into procedures,  whereas object-oriented programming uses objects for the very same  purpose. The famous <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC </a>pattern is based on the very core idea of SoC by  separating the actual logic (model) from the user interface (view and  controller). Functional programming allows complex composition of  functions irrespective of function arguments, thus separating actual  data structures from program flow. Splitting methods to smaller pieces  by level of abstraction is applying SoC.</p>
<p>Many other ideas  derive from or result in SoC as a direct consequence, such as “A class  should have one and only one reason to change.”</p>
<h3>Impact on software</h3>
<p>The  benefits of SoC are numerous. First of all, it helps us understand any  given computation unit (module, class, method or function) because it  deals with only one “thing.” Second, it makes encapsulation and hiding  easier, as a change in one unit usually does not require changes in  other units. Third, it makes automated testing much easier, as both the  state set-up for the test and testing the outcome are simple: given this  input, expect this output (or state change, but not both). As such, SoC  is one of the core tools in managing software complexity. <a href="http://www.cs.au.dk/%7Eeernst/papers/splat03.pdf">[1]</a></p>
<p>What  about performance and reusability? Because SoC leads to indirection and  due to extra instantiation and chained method calls, performance does  suffer a bit, at least in principle. But the benefits far outweigh the  incurred costs, as it allows for very aggressive local optimization  without fear of breaking other parts of the system. Increased  orthogonality and tightly restricted functionality lead to more reusable  components as well.</p>
<p>However, sometimes applying SoC is  very difficult. There might be pervasive features such as logging and  security that are used throughout the project. Maintaining loose  coupling and avoiding repetition could amount to anything between  trivial design issues to very difficult ones, depending on the language  and/or supporting libraries. For example, the <a href="http://www.ruby-lang.org/en/">Ruby language</a> makes it relatively simple to, say,  decorate certain types of calls with custom callbacks without modifying  the source code of affected computation units. This is because Ruby has  very powerful <a href="http://en.wikipedia.org/wiki/Metaprogramming">metaprogramming </a> facilities such as dynamic method  definition, re-openable as well as executable class definitions and  method introspection. On the other hand, programs written in <em>Java </em>usually require AOP-style  extensions such as <em>AspectJ </em>to  achieve similar results, adding extraneous dependencies and new syntax  to learn.</p>
<p>The point is that if SoC is so crucial, then  surely the programming language should help the developer in achieving  it, even coerce the developer to that direction. On the next part, we’ll  see what kind of programming language would be ideal from this point of  view.</p>
<h3>References</h3>
<p>[1] <a href="http://www.cs.au.dk/%7Eeernst/papers/splat03.pdf">http://www.cs.au.dk/~eernst/papers/splat03.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://leonidasoy.fi/2010/03/07/on-software-quality-and-the-next-big-language-part-i/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Deliver Software In 7 Days, Part III</title>
		<link>http://leonidasoy.fi/2010/02/19/how-to-deliver-software-in-7-days-part-iii</link>
		<comments>http://leonidasoy.fi/2010/02/19/how-to-deliver-software-in-7-days-part-iii#comments</comments>
		<pubDate>Fri, 19 Feb 2010 12:16:50 +0000</pubDate>
		<dc:creator>Harri Lammi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[product development]]></category>
		<category><![CDATA[prototyping]]></category>

		<guid isPermaLink="false">http://www.leonidasoy.com/?p=707</guid>
		<description><![CDATA[This is the last post in my rapid ...]]></description>
			<content:encoded><![CDATA[<p>This is the last post in my rapid prototyping series. Previously, I wrote about <a href="http://www.leonidasoy.com/2010/01/25/how-to-deliver-software-in-7-days/">preparation</a> and <a href="http://www.leonidasoy.com/2010/02/04/how-to-deliver-software-in-7-days-part-ii/">the development process</a>. Today&#8217;s topic is <a title="Kaizen" href="http://en.wikipedia.org/wiki/Kaizen">Kaizen</a>, continuous improvement. We&#8217;ll go through a few steps that will help you be more productive, shorten the learning curve, and make your life easier.</p>
<p><span id="more-707"></span></p>
<h3>Lesson #11: Review the project.</h3>
<p>Process is best improved by those who do the actual work. Our project team gathers for a <a title="ScrumAlliance.org - Sprint Retrospective Meeting" href="http://www.scrumalliance.org/articles/39-glossary-of-scrum-terms#1113">retrospective </a>the day after the prototype is delivered — while we still have the ideas and problems fresh on our minds. We discuss things that went well, things we could do better, and what actions we are going to take to improve the process.</p>
<p>For learning how to organize good retrospectives, I recommend the awesome book <a href="http://www.pragprog.com/titles/dlret/agile-retrospectives">Agile Retrospectives</a> by Esther Derby and Diana Larsen.</p>
<h3>Lesson #12: Update your process.</h3>
<p>We keep our process documentation as light as possible. Currently, our entire process is described with a one-page how-to and a checklist. To inject our improving understanding into our process, we update these documents after each retrospective.</p>
<p>We also use how-tos that describe the most important technical tasks, such as setting up a new web application to our production server. These guides help us avoid stupid mistakes, and they save time when a team member does the task for the first time.</p>
<h3>Lesson #13: Share what you learned.</h3>
<p>Rapid prototyping gives us feedback in seven days. When we get positive experiences, we share our findings with the rest of the company. We use wiki, Google Wave, and <a title="Leonidas hour" href="http://www.leonidasoy.com/2009/12/31/leonidas-hour/">Leonidas hour</a> to spread information within the company. To share our experience with the world, we write blog posts such as this.</p>
<h3>Lesson #14: Enjoy the results.</h3>
<p>Everybody loves getting feedback on their work. When our sales team returns from the demo shop, they share the customer reaction with us developers. Having worked hard for seven days, we find that it&#8217;s great to hear that the client said the results were awesome.</p>
<p>I hope that this journey in rapid prototyping gave you something to use in your own work. If you have any questions, please feel free to leave a comment.</p>
<p>If you&#8217;re interested in agile development, I gave a presentation last week in <a title="Demola" href="http://demola.fi">Demola</a>; the material is available on <a title="Agile Development" href="http://www.slideshare.net/secret/bJbGgSVK9Ad3vB">SlideShare</a>.</p>
<p>By the way, we have a post coming on software quality written by <a href="http://fi.linkedin.com/in/edvardm">Edvard Majakari</a>, who recently joined our company. Ed is a great guy, and he&#8217;s always there to help when it comes to making better software.</p>
]]></content:encoded>
			<wfw:commentRss>http://leonidasoy.fi/2010/02/19/how-to-deliver-software-in-7-days-part-iii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Deliver Software In 7 Days, Part II</title>
		<link>http://leonidasoy.fi/2010/02/04/how-to-deliver-software-in-7-days-part-ii</link>
		<comments>http://leonidasoy.fi/2010/02/04/how-to-deliver-software-in-7-days-part-ii#comments</comments>
		<pubDate>Thu, 04 Feb 2010 11:38:39 +0000</pubDate>
		<dc:creator>Harri Lammi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[product development]]></category>
		<category><![CDATA[prototyping]]></category>

		<guid isPermaLink="false">http://www.leonidasoy.com/?p=670</guid>
		<description><![CDATA[My previous post was about preparing for a ...]]></description>
			<content:encoded><![CDATA[<p>My <a title="How To Deliver Software In 7 Days" href="http://www.leonidasoy.com/2010/01/25/how-to-deliver-software-in-7-days/">previous post</a> was about preparing for a rapid prototyping project in which we create working software in seven days. This second post reveals how to keep the project on schedule, avoid technical risks, and delegate work during the development phase.</p>
<p><span id="more-670"></span></p>
<p>In our seven-day process the first day is spent with the customer in a start shop. The next five days are dedicated to development, and the last day is reserved for the demo shop where the prototype is handed over to the customer. During the five-day development sprint we develop, test and deploy the prototype in iterations. Let&#8217;s go through the lessons we have learned in this process.</p>
<h3>Lesson #6: Spend time on design.</h3>
<p>Rapid prototyping is a combination of craftsmanship and cowboy coding. Usually cowboys take over when the deadline is closing in. To keep things professional throughout the project you should spend time on design. It has a few benefits:</p>
<ul>
<li>Working out challenging use cases and problems in the beginning will reduce chances of failing.</li>
<li>When there are more developers involved in the project, the design helps to divide the work.</li>
<li>The product owner can verify the key requirements against the design.</li>
</ul>
<p>In our projects, we have drawn the initial data model and layout designs on the whiteboard. The design usually changes during the development, so we rather spend our time developing than updating design documents.<br />
Make it quick and keep it simple. The purpose of design is just to keep all the cowboys riding in the same direction.</p>
<h3>Lesson #7: Deploy early and often.</h3>
<p>Applications tend to work differently in production than they do in the developer&#8217;s computer. Verify that your prototype is working on the target device or in the production server as early as possible. Once the first deployment is made, you can start testing the prototype.</p>
<p>Deploying often is possible with automated deployment tools. <a title="Capistrano" href="http://www.capify.org/">Capistrano</a> works great on Rails projects. Mobile applications can be installed from the IDE (e.g. <a title="Carbide.c++" href="http://www.forum.nokia.com/Tools_Docs_and_Code/Tools/IDEs/Carbide.c++/">Carbide</a>, <a title="Aptana Studio" href="http://www.aptana.org/">Aptana Studio</a>) with a few clicks. When the deadline approaches and the going gets tough, automated deployment will save you from errors.</p>
<h3>Lesson #8: Prioritize and estimate the task backlog continuously.</h3>
<p>The task backlog is for managing the development tasks. It states which tasks are the most important ones and how long they will approximately take to implement. The backlog visualizes the remaining work and it helps us decide which tasks we should focus on.</p>
<p>We use a shared spreadsheet as task backlog. Everybody can add a task: the product owner, developers and testers. Every task that requires at least 15 minutes is listed in the backlog. Tasks longer than 4 hours are divided into smaller tasks to keep the estimates as accurate as possible. The developers give their estimates and the product owner decides the prioritization. With this information and a pinch of common sense we decide what to do next.</p>
<p>The beauty of the task backlog is the continuous evaluation. If a task requires more time or a new feature arises, we estimate it and we see immediately how it affects our schedule. Then we drop some unimportant items or simplify the implementation. So rather than sticking to a plan we continuously evaluate our situation and make new plans. Quoting <a href="http://en.wikipedia.org/wiki/Plan">Eisenhower</a>: plans are nothing; planning is everything.</p>
<h3>Lesson #9: Delegate tasks.</h3>
<p>Prototyping team consists of different roles. In a short project it&#8217;s recommended that people concentrate on the things they do best. The developers should be busy coding. The test staff should be busy testing the application.</p>
<p>When we first started prototyping, developers were responsible for content creation. Then the product owner got more involved in the process since he has the vision how the prototype should look like. Finally we moved the whole content creation to the product owner. This solution resulted in more appealing content and gave us more time for development.</p>
<h3>Lesson #10: Talk, talk, talk.</h3>
<p>Instant feedback, quick decisions and information sharing require good communication. During development we have everybody working in the same space, so we can speak and hold ad hoc meetings (5-10 minutes) as needed. By talking a lot with the product owner we avoid a lot of misunderstandings and save development time by doing the right things the right way.</p>
<p>On the other hand, we also reserve time for silence. When we need to concentrate on our work we use the 45-15 rule. It means that for 45 minutes speaking is prohibited and then we take 15 minutes to discuss about the issues or problems we encountered.</p>
<h3>Free breakfast and rapid prototyping</h3>
<p>The last post of this series focuses on process improvement issues and the post will be published next week.</p>
<p>On Thursday Feb 18 <a title="Leonidas" href="http://leonidasoy.fi/">Leonidas</a> and <a title="Codento" href="http://www.codento.com/">Codento </a>are organising <a href="http://www.codento.com/fi/events/2010-02.html">a breakfast event on rapid prototyping and cloud services</a>. The event begins at 8:00 in <a href="http://www.scandichotels.fi/fi/Hotels/Countries/Suomi/Tampere/Hotels/Scandic-Tampere-City/">Scandic Tampere</a>. Participation is free of charge but please <a href="http://www.codento.com/fi/events/2010-02.html">register online</a> (registering also available through <a title="Facebook registration" href="http://www.facebook.com/event.php?eid=271820214766&amp;index=1">Facebook</a>). Welcome!</p>
]]></content:encoded>
			<wfw:commentRss>http://leonidasoy.fi/2010/02/04/how-to-deliver-software-in-7-days-part-ii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Deliver Software In 7 Days</title>
		<link>http://leonidasoy.fi/2010/01/25/how-to-deliver-software-in-7-days</link>
		<comments>http://leonidasoy.fi/2010/01/25/how-to-deliver-software-in-7-days#comments</comments>
		<pubDate>Mon, 25 Jan 2010 13:58:34 +0000</pubDate>
		<dc:creator>Harri Lammi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[product development]]></category>
		<category><![CDATA[prototyping]]></category>

		<guid isPermaLink="false">http://www.leonidasoy.com/?p=648</guid>
		<description><![CDATA[Prototyping is a fun process. You get to ...]]></description>
			<content:encoded><![CDATA[<p>Prototyping is a fun process. You get to try out new things and you don&#8217;t need to worry about production-ready code, automated tests and other routines that are not &#8220;creative&#8221;. Usually prototyping is not time critical either. You&#8217;re not expected to have every bell and whistle ready when the project ends. For a developer it means good times, like somebody is feeding you ice cream with a scoop.</p>
<p>But what if we change the rules a little bit. What if you have to deliver in seven days within a budget, the prototype must work and you need to do this every two weeks. Can prototyping still be fun?</p>
<p><span id="more-648"></span></p>
<p>Since spring 2009 we have been working with mobile and web prototypes here in Leonidas. In our case rapid prototyping means a fixed price seven day software project. Two days are reserved for understanding the customer&#8217;s needs, designing the prototype and holding the start/demo shops. Five days are dedicated for development.</p>
<p>Over the next few weeks I will be writing a series of posts of the lessons we have learned. This first post is about preparation. The difference between rapid prototyping and a traditional software project is the very strict deadline. Rapid prototyping is like the Cooper test: run as far as possible within 12 minutes. Those runners who have prepared well run the longest. For developers good preparation equals more features done.</p>
<h3>Lesson #1: Understand the project goal</h3>
<p>The customer has ordered the prototype for a reason. Usually they need a prototype to show to their organization or to their own customers. Or their developers are busy working and they need somebody to build them a walking skeleton for the next project.</p>
<p>Understanding the customer&#8217;s needs helps us develop the prototype. If the prototype is used for demos, the visual stuff is more important than the robust form validation we could spend hours working on. So instead of coding everything, you can describe functionality with pictures and enhance the user experience with AJAX.</p>
<p>If the customer needs a walking skeleton, you can spend more time on making your code readable and documenting how the prototype can be developed further.</p>
<p>As the bottom line, understanding the goal helps you to decide where to focus your efforts.</p>
<h3>Lesson #2: Prepare yourself for the technical challenges.</h3>
<p>Time is our most important asset and we need to spend it carefully. During the development phase it&#8217;s better to spend time on customer&#8217;s needs rather than learning Rails&#8217; nested forms.</p>
<p>Try to get as much details as possible about the project before it begins. We usually get some information from our customer before the start shop, so there&#8217;s time to think about the implementation. If there&#8217;s an unfamiliar technical area, there&#8217;s still time to study it before the project.</p>
<h3>Lesson #3: Check your development environment.</h3>
<p>Installing the SDK, configuring the demo server or matching your tools with your co-worker&#8217;s environment are issues that require only a little time if everything goes smoothly. If something goes wrong and you use more hours to solve the problem, you have spent a part of your most valuable asset.</p>
<p>It&#8217;s better to be ready before the project starts. Create the code repository, create user groups, configure the demo server, prepare the project wiki. Doing these beforehand can save you a half day&#8217;s work.</p>
<h3>Lesson #4: Have your project management tools ready.</h3>
<p>In our prototyping projects we need to handle requirements and test results. The concept designers have an ongoing discussion with the developers how the prototype should work. These requirements are written to the task backlog with priority and developer&#8217;s time estimation. Whenever testers find bugs they also write down their findings to the backlog. Developers pick tasks based on the priorization and mark them done when finished.</p>
<p>We use a shared spreadsheet as our task backlog. It&#8217;s fast, easy to use and developed for our needs. After trying some online project management tools and a task board we decided to stick with the spreadsheet since it worked best for us. The backlog spreadsheet is improved between projects and that would be quite impossible if we used a commercial tool.</p>
<p>The lesson here is to have the backlog or any other tools you are using ready before the project starts. Make sure the tool is really helping your team.</p>
<h3>Lesson #5: Find reusable code.</h3>
<p>If you make a list of the common functionality web applications have, you would list things like authentication, authorization and lost password mailers. From prototyping view these are nice-to-have items (see Lesson #1), so you shouldn&#8217;t waste time on them. But on the other hand, you would impress your customer by delivering these features.</p>
<p>One solution is to have these features available in your project skeleton (check out Ryan Bates&#8217; excellent <a href="http://railscasts.com/episodes/148-app-templates-in-rails-2-3">Railscast</a>). Knowing the features are tested and ready to go, you can concentrate on the items your customer really needs. In Rails projects you can also use gems and plugins to get a flying start. To avoid risks, try the gems/plugins before the project.</p>
<p>Hope you enjoyed this post. Next week I&#8217;ll be posting about the lessons we&#8217;ve learned in the development phase.</p>
]]></content:encoded>
			<wfw:commentRss>http://leonidasoy.fi/2010/01/25/how-to-deliver-software-in-7-days/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enterprise Systems and User Friendly Screens</title>
		<link>http://leonidasoy.fi/2010/01/17/enterprise-systems-and-user-friendly-screens</link>
		<comments>http://leonidasoy.fi/2010/01/17/enterprise-systems-and-user-friendly-screens#comments</comments>
		<pubDate>Sun, 17 Jan 2010 11:36:42 +0000</pubDate>
		<dc:creator>Juho-Pekka Pöyry</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Corporate IT]]></category>
		<category><![CDATA[Enterprise Systems]]></category>

		<guid isPermaLink="false">http://www.leonidasoy.com/?p=634</guid>
		<description><![CDATA[From time to time, I’ve been involved in ...]]></description>
			<content:encoded><![CDATA[<p>From time to time, I’ve been involved in conversations about the benefits of enterprise systems such as ERP. Many times, it has seemed as though the people writing software, other than those in large scale enterprise systems, see the (almost) sole benefit as automating tasks and helping single users to be more efficient. With some subsets of software, this is, indeed, the case. However, when dealing with enterprise-wide systems such as ERP, this is half-truth, at best, and downright wrong, at worst.</p>
<p>A couple of examples will illustrate this.<span id="more-634"></span></p>
<p>Consider ERP: The bottom line promise of an ERP system is that it will manage all the business information of an enterprise. When this is done, the silo effect (at least with regard to data) is done away with and single functions and units need no longer be islands of information. Decisions can be made, not just based on local information of functions or units, because data for the whole enterprise is available for every unit. Local optimization is no longer necessary. For example, marketing can coordinate pricing campaigns based partly on current inventories in the supply chain and manufacturing resources that are currently lying idle. Centralized data also provides a top-down view of the enterprise. The flipside of this scenario is that local optimization needs to actually stop in order to realize the full benefits of an ERP. If decisions are made based on the old rules, gains will be significantly diminished.</p>
<p>In a wider enterprise system context, the right kind of IT architecture will enable the propagation of best practices and process improvements much more quickly than “traditional” means would permit. Business processes can be analyzed, improved, brought under statistical control, and, finally, replicated and propagated inside the enterprise. For example, a forecasting model, bundled with a forecasting process can be built in one unit or geography, tweaked to high performance, and then copied to other units in the same company. This kind of ability is also a major argument for uniform architecture across the whole enterprise. The magnitude of potential benefits was elaborated, for example, by McAfee and Brynjolfsson in their 2008<em> </em><em>Harvard Business Review</em> article <em><a href="http://hbr.org/product/investing-in-the-it-that-makes-a-competitive-diffe/an/R0807J-PDF-ENG">Investing   in the IT That Makes a Competitive Difference</a>. </em>They show that the ability to manipulate and propagate business processes with IT systems has a strong link to overall competitiveness.</p>
<p>In both examples, the user friendliness of the home screen in any given software application is not pivotal. And, in both examples, the real heavy duty gains to be had from an enterprise system lie first and foremost in the enterprise, not in the system. The ability of systems to change the way real world processes function is often at the essence.</p>
<p>Further material:</p>
<p>McAfee and Brynjolfsson, <em>Harvard Business Review 2008: <a href="http://hbr.org/product/investing-in-the-it-that-makes-a-competitive-diffe/an/R0807J-PDF-ENG">Investing in the IT That Makes a Competitive Difference</a></em></p>
<p>Eliyahu Goldratt 2005: <a href="http://www.amazon.com/Beyond-Goal-Eliyahu-Goldratt-Constraints/dp/1596590238"><em>Beyond the Goal: Eliyahu Goldratt Speaks on the Theory of Constraints</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://leonidasoy.fi/2010/01/17/enterprise-systems-and-user-friendly-screens/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Success or Failure, Fast</title>
		<link>http://leonidasoy.fi/2010/01/04/success-or-failure-fast-2</link>
		<comments>http://leonidasoy.fi/2010/01/04/success-or-failure-fast-2#comments</comments>
		<pubDate>Mon, 04 Jan 2010 11:39:52 +0000</pubDate>
		<dc:creator>Kari Peltola</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[product development]]></category>
		<category><![CDATA[prototyping]]></category>

		<guid isPermaLink="false">http://www.leonidasoy.com/?p=591</guid>
		<description><![CDATA[Product development is a game of odds, much ...]]></description>
			<content:encoded><![CDATA[<p>Product development is a game of odds, much like sales. You have a funnel of ideas in different stages of development &#8211; some of them will become winners in the marketplace, some of them will not. So, how do you improve your odds of success?</p>
<p>The answer: prototype to validate the idea as early as possible.</p>
<p>Even a harsh, simple, ugly and defective prototype is better than no prototype at all. It clarifies the concept in three important aspects:</p>
<p><span id="more-591"></span></p>
<p><img title="More..." src="http://www.leonidasoy.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" />1) Do the product champion and the implementors share a common vision?</p>
<p>2) Does the product address a real customer need?</p>
<p>3) Can the concept be realized using current technology?</p>
<p>Expensive &#8211; and unfortunately common &#8211; mishaps occur if these concerns are not addressed properly.</p>
<p>First of all, if the product champion is not able to clearly communicate his/her vision to the implementing party, the direction of the development might be wrong from the start. The earlier this is noticed, the cheaper it is to fix.</p>
<p>Secondly, even the best visionaries get it wrong most times.</p>
<p>It is important to get feedback from the potential customers/users as early as possible. A good prototype is something you can show to the customer and ask &#8220;would this solve your problem?&#8221;</p>
<p>And thirdly, as the implementors get to inspect, evaluate and execute the concept, they form a better understanding of its technical requirements. For example, they may find out that implementing the project would be extremely expensive. ROI on this kind of insight will naturally be substantial.</p>
<p>So, when you&#8217;re pondering upon the Next Big Thing, actualize it as fast as possible. You will be greatly enhancing the time you can use on the right ideas.</p>
]]></content:encoded>
			<wfw:commentRss>http://leonidasoy.fi/2010/01/04/success-or-failure-fast-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Leonidas Hour</title>
		<link>http://leonidasoy.fi/2009/12/31/leonidas-hour</link>
		<comments>http://leonidasoy.fi/2009/12/31/leonidas-hour#comments</comments>
		<pubDate>Thu, 31 Dec 2009 10:42:32 +0000</pubDate>
		<dc:creator>Antti Tarvainen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[The Leonidas Way]]></category>

		<guid isPermaLink="false">http://ezp.leonidasoy.com/?p=548</guid>
		<description><![CDATA[In a traditional company, the more important the ...]]></description>
			<content:encoded><![CDATA[<p>In a traditional company, the more important the decision the higher up in the chain of command it is made. The consequences of a decision trickle down to the lower levels, each level interpreting what they need to do based on what they hear from above. Feedback then rises from the lowest levels and is used by the top to generate new decisions. Those decisions trickle down and so on.</p>
<p>The problem with this is that the feedback received at the top is distorted by misinterpretation at each level. False premises lead to bad decisions and frustration at all levels. The organization may never realize how much more they could do if they understood each other and made the right decisions.</p>
<p>At Leonidas we are set to reverse this. One of our tools is the &#8220;Leonidas hour&#8221;, a weekly one-hour meeting that anyone can attend to. Here&#8217;s how it works.</p>
<p><span id="more-548"></span></p>
<ul>
<li>Before the meeting, anyone can suggest a topic.</li>
<li>At the beginning of the meeting, everyone who suggested a topic briefly introduces it.</li>
<li>We select the topic by consensus or &#8211; if there&#8217;s none &#8211; by voting. Then we discuss that topic.</li>
<li>The goal of the discussion is to make a decision. Sometimes there&#8217;s not enough information or not enough time for that. That is all right &#8211; it is better to make no decision at all than to make a bad one. But there should be a genuine attempt to solve the problem, not just hot air.</li>
<li>If there&#8217;s time after the first topic, we tackle the next topic, and so on.</li>
</ul>
<p>The idea is to have everyone at the same place at the same time so that decisions can be made quickly. Since everyone is there, and everyone can question any idea, people will leave the meeting with an understanding of the &#8220;why&#8221; of the decisions as well as the &#8220;what&#8221;.</p>
<p>Of course, the effectiveness of Leonidas hour relies on people&#8217;s ability to discuss things effectively. It requires trust, candor and willingness to improve &#8211; which happen to be the values of Leonidas. As long as we follow those and give ourselves time to make good decisions, we should do well.</p>
<p>So how are we doing? We&#8217;ve had four Leonidas hours so far. The topics were</p>
<ul>
<li>new office: furniture, who sits where, etc. (twice)</li>
<li>this blog: themes, posting schedule, topics (twice)</li>
<li>our Protosonni service: what can we do to improve it</li>
<li>communication tools: how should we use Google Wave, email, wiki</li>
<li>Leonidas hour: how can we improve it</li>
</ul>
<p>So far our experiences have been mostly positive. There&#8217;s a feeling that we all can contribute, and that we make better decisions.</p>
<p>Probably the most difficult problem we noticed was with the schedule. Since we are working on different projects, it is hard to find a weekly time that suits everyone &#8211; and the one we found tends to interrupt the most productive work time. Another thing we would like to improve is focusing on decision-making. The discussions advanced more slowly than we anticipated. It may be a matter of preparation.</p>
<p>To address these issues, starting from January, we are going to replace weekly Leonidas hours with longer ones every two weeks. We will also prepare topics better. If a topic doesn&#8217;t have an initial suggested solution, it is not ready to be discussed. We use Wave to prepare the topics: if someone has a topic but doesn&#8217;t have an idea for a solution, he can write a wave and hope that someone else comes up with a solution. Or if anyone has objections to a suggested solution, he can raise them in Wave. The theory is that this will enable better discussion during the actual Leonidas hour &#8211; we will see how that works.</p>
<p>We will certainly keep making changes to the concept as we get more experienced with it. Maybe at some point we will drop Leonidas hour altogether and replace it with something different. The point is not any specific technique, but making good decisions and improving continuously.</p>
]]></content:encoded>
			<wfw:commentRss>http://leonidasoy.fi/2009/12/31/leonidas-hour/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Leonidas Has Moved</title>
		<link>http://leonidasoy.fi/2009/12/29/leonidas-moves</link>
		<comments>http://leonidasoy.fi/2009/12/29/leonidas-moves#comments</comments>
		<pubDate>Tue, 29 Dec 2009 12:28:00 +0000</pubDate>
		<dc:creator>Kari Peltola</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://ezp.leonidasoy.com/?p=368</guid>
		<description><![CDATA[Because of our recent growth Leonidas has moved ...]]></description>
			<content:encoded><![CDATA[<p>Because of our recent growth Leonidas has moved and now you can find us at the heart of Tampere, a few steps from Keskustori. Our new address is <a href="http://kartat.eniro.fi/m/MtPem" target="_blank">Kauppakatu 3 B 20, 33210 Tampere</a>.</p>
<p>Ps. The location is optimal as there is a fantastic Indian restaurant nearby called Nanda Devi!</p>
]]></content:encoded>
			<wfw:commentRss>http://leonidasoy.fi/2009/12/29/leonidas-moves/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
