<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Simon Brown - architecture tag</title>
  <link>http://www.simongbrown.com/blog/tags/architecture/</link>
  <description>Coding the architecture</description>
  <language>en</language>
  <copyright>Simon Brown</copyright>
  <lastBuildDate>Tue, 06 May 2008 13:33:00 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>QCon London 2008 - day 2</title>
    <link>http://www.simongbrown.com/blog/2008/03/14/qcon_london_2008_day_2.html</link>
    
      
        <description>
          &lt;p&gt;
The first session I attended on day 2 was called &#034;Architecting for Performance and Scalability&#034;, where representatives from Terracotta, (Oracle) Coherence, GigaSpaces, etc (and eBay) came together to talk about the different approaches to building scalable systems. It was surprisingly civilised and it was interesting to compare and contrast each vendor&#039;s approach to dealing with the scalability problem. Here are my takeaway points from this session :
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On average, the audience thought that they could squeeze 2x performance out of their existing systems if given a couple of weeks to tune it. If you need any more, you need to architect/design with that in mind. In other words, you need to design in scalability from the start.&lt;/li&gt;
&lt;li&gt;Ultimately, many of these decisions are economic in nature. It&#039;s okay for a business to demand ultra high scalability, but they will pay for it in terms of hard cash and time to market. It&#039;s all about trade-offs.&lt;/li&gt;
&lt;li&gt;Continuous performance testing is an important thing to do if you&#039;re building systems that are performance critical. The implication of this, of course, is that you *have* something to test, which for me points to an iterative development approach and an executable reference architecture as early as possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The next session I attended was called &#034;A Tale of Two Systems&#034;, which basically presented a picture of what happens when you do and don&#039;t design your software. Anybody experienced in software development won&#039;t have seen any surprises here, but it was nice to see the good and the bad contrasted in a very down-to-earth way. There was a definite agile spin of all of this; with talk of flat team structures and a distribution of the design responsibility throughout the team. In fact, Pete stated that &#034;he&#039;d never worked on a project that needed an architect&#034;. While these approaches work well for small and/or simple projects, I&#039;m still of the opinion that *some* architecture needs to be performed up-front and that somebody needs to take ultimate responsibility.
&lt;/p&gt;

&lt;p&gt;
Following the talk about software design was a talk about user interface design, entitled &#034;User Interfaces: Meeting the challenge of simplicity&#034;. This session looked at the art of designing user interfaces so that they appear simple to the user, and that how making even the smallest of changes can have a huge impact. One of the most interesting parts of this session was that it almost completely paralleled the session that preceded it; in terms of talking about agile development, feedback, simplicity, you aren&#039;t going to need it (YAGNI), etc.
&lt;/p&gt;

&lt;p&gt;
The final session I attended was Neil Gafter&#039;s look at the new features that are being considered for Java 7 and beyond. I&#039;ve not been following this too closely and it was interesting to catch up with it all. One of the things that struck me most was that the Java platform JSR hasn&#039;t even been started yet and that Sun don&#039;t seem to have enough resources to do everything that they want to (apparently JavaFX is more important?). I was under the impression that major releases of the platform were going to be on an 18 month cycle, but clearly that&#039;s not going to happen. I also don&#039;t necessarily understand where/how the open source stuff fits into all of this. There are some nice smaller features being considered for Java 7 (multi exception catching, easy exception rethrowing, the ability to switch on Strings, etc) but part of me thinks that maybe the bigger language changes (e.g. closures) shouldn&#039;t be implemented. Perhaps it might be better to stop making big changes to the Java language and start putting more effort into something else (e.g. Scala, Groovy, etc).
&lt;/p&gt;

&lt;p&gt;
All in all, another great day at the conference and some interesting discussion in the bar afterwards.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.simongbrown.com/blog/2008/03/14/qcon_london_2008_day_2.html#comments</comments>
    <guid isPermaLink="true">http://www.simongbrown.com/blog/2008/03/14/qcon_london_2008_day_2.html</guid>
    <pubDate>Fri, 14 Mar 2008 08:46:00 GMT</pubDate>
  </item>
  
  <item>
    <title>QCon London 2008 - day 1</title>
    <link>http://www.simongbrown.com/blog/2008/03/13/qcon_london_2008_day_1.html</link>
    
      
        <description>
          &lt;p&gt;
Erich Gamma&#039;s keynote got the QCon London 2008 conference underway, where he talked about his experiences with the Eclipse project over the past seven years. There were a few interesting points during this session but I&#039;m going to write about those separately. The thing I will say is that it&#039;s always good to hear the real-world stories about iterative development - in this case, the Eclipse team work on 6 week iterations and don&#039;t necessarily have a fully shippable product at the end of them. Erich wrapped up the keynote with a demo of the new Jazz platform, which pulls together all of the tools in your standard development suite into a fully integrated workflow. This looks like a rehash and enhancement of Rational&#039;s Unified Change Management (UCM) platform using Eclipse as the front-end. That might not be totally accurate (I think I saw a Subversion bridge in the slides), but you get the point. Certainly worth a look, although the &#034;commercial open source&#034; thing confused me.
&lt;/p&gt;

&lt;p&gt;
As for the main sessions, I stuck to the banking track for the first day and that turned out to be a good decision because there were some really interesting presentations.
&lt;/p&gt;

&lt;p&gt;
First up was John Davies who jumped in at the last minute because the speaker for that slot couldn&#039;t make it to the conference. Instead of a session about domain specific languages, John presented an overview of technology within the investment banking space. It was a really interesting talk and very nicely summarised many of the trends that we&#039;ve seen over the past few years (e.g. compressed on the wire message formats rather than XML, etc). The key takeaway point for me was that you need to design for scalability. This is one of the reasons why I think it&#039;s important that software systems have an explicit and intentional architecture, with somebody taking responsibility for it.
&lt;/p&gt;

&lt;p&gt;
Next up was Iain Mortimer who presented a session that was entitled &#034;Keeping 99.95% uptime on 400+ key systems at Merrill&#034;. Although this was a relatively interesting session, I do think that the title was misleading. Instead of talking about how the 99.95% availability target was being satisfied, Iain talked about how Merrill monitored those systems, and particularly about the rules that they used to monitor those systems. Iain said that their availability requirements allow for 18 seconds of downtime per day, but didn&#039;t go into detail about any failover or recovery techniques that allowed them to meet that goal. So in that respect, the session was a little disappointing, although it was interesting to hear about the challenges of monitoring 400 systems across a global organisation in a consistent way. The key takeaway point from this session was that you need to design systems with monitoring in mind, which I completely agree with.
&lt;/p&gt;

&lt;p&gt;
Third on the track was Bertrand Delsart from Sun, talking about the real-time Java specification. Although there were a couple of banking examples thrown in, this session was essentially a generic RTJS talk. The closest I&#039;ve got to real-time Java is BEA&#039;s JRockit JVM with deterministic garbage collection but, as Betrand said, garbage collection is only one part of the story - Java apps also suffer jitter from the JIT compiler kicking in at unwanted times, etc. While this isn&#039;t something I&#039;ll probably try out myself (Sun&#039;s real-time Java VM only runs on Solaris 10 at the moment), what they&#039;ve done is built a framework onto which you can build your applications where you decide which parts of it are regular Java, soft real-time or hard-real time. My understanding is that the hard real-time stuff is made possible by utilising the underlying OS real-time threading and some clever use of non-heap memory spaces, in addition to appropriately scheduling the garbage collector so that it doesn&#039;t interfere. Cool stuff and I think we&#039;ll be seeing this pop up in the banking industry soon.
&lt;/p&gt;

&lt;p&gt;
Next was Betfair talking about their new Tradefair platform and some of the challenges that they need to overcome to provide a highly scalable, highly available trading platform. Again, there was some interesting discussion of the problems and high-level solutions, although many people (myself included) came out of the session not really understanding what they had done. They were very sketchy with the details and I&#039;m left wondering why they couldn&#039;t have implemented their system using something like JavaSpaces (what they described sounded like a JavaSpace - put many things in and match them up). The thing I did like about the session was their openness in admitting that none of the solutions were ideal (all had trade-offs) so they had to pick the one that fitted their needs the most.
&lt;/p&gt;

&lt;p&gt;
The last session of the day was a talk about LiquidityHub, a new trading platform that was built from scratch in just nine months. As a disclaimer, I work at Detica and have many friends that worked on the project. Having said that, this was one of the best sessions of the day. It presented an overview of the business problem, an overview of the chosen architecture and a look at how some of the technologies were used to build the platform. This project shows that it is possible to build a high volume, low latency platform with mainstream Java-based technologies. BEA&#039;s JRockit  JVM was used to reduce the jitter of the Java runtime, making it possible to achieve a service level agreement stating that messages should pass through the platform in under 100ms. With its good coverage of everything from the business problem down to some of the implementation details, this was a great way to end the first day.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.simongbrown.com/blog/2008/03/13/qcon_london_2008_day_1.html#comments</comments>
    <guid isPermaLink="true">http://www.simongbrown.com/blog/2008/03/13/qcon_london_2008_day_1.html</guid>
    <pubDate>Thu, 13 Mar 2008 09:32:00 GMT</pubDate>
  </item>
  
  <item>
    <title>When will the offshore bubble burst?</title>
    <link>http://www.simongbrown.com/blog/2008/02/14/when_will_the_offshore_bubble_burst.html</link>
    
      
        <description>
          &lt;p&gt;
Hearing management teams talk about offshore is becoming a more frequent occurrence these days and most large organisations that I&#039;ve met in the past six months are starting to invest in offshoring if they&#039;ve not done so already. That&#039;s not really surprising when you take a holistic view of the economics, but I&#039;m convinced that the current offshore bubble will burst in the next 1-2 years, making way for a much more collaborative model. Let me explain.
&lt;/p&gt;

&lt;p&gt;
Most organisations see offshoring as a way to reduce the costs associated with software development. The basic premise is that &#034;software development is a commodity&#034; and that &#034;commodity development is low risk and can be easily offshored&#034;. Effectively, organisations are taking a &#034;software factory&#034; approach to software development where they throw specifications/contracts at offshore teams and expect working software in return. There are a couple of points that I want to pick up on here.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Software development is a commodity&lt;/b&gt; : I&#039;ve heard this a lot recently, from organisations on the buy-side and the sell-side (e.g. consulting companies and system integrators), but I don&#039;t agree with it. Software development is still a complex discipline and you can see this by taking a look at the rate of technology change driven by people trying to make development easier. Just look at how many Java web application frameworks are available. Sure, there are &lt;i&gt;parts&lt;/i&gt; of software that can be and have been commoditised, but there&#039;s still a lot of bespoke development that goes around it.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Offshore reduces costs&lt;/b&gt; : The most compelling reason for organisations looking to adopt offshore is that &#034;the daily rates are much lower for offshore resources than onshore resources&#034; and if you compare them in terms of cold hard cash, you can&#039;t argue with it. However, I don&#039;t think that organisations are thinking about the &lt;i&gt;additional investments&lt;/i&gt; that they need to make in order to give the current offshore model a chance of success.
&lt;br /&gt;&lt;br /&gt;
For example, it&#039;s fairly safe to say that most organisations work in a fairly ad hoc manner and need to put some investment into improving their processes to enable offshore development to work. This might include improving the way in which requirements are captured, prioritised and documented before even thinking about how best to structure the overall solution and define the work packages/specifications that will be sent offshore. Plus, you then have to factor in the additional cost of testing that will undoubtedly take place when the end-product has been developed and the potential latencies that will be introduced from teams being distributed across the globe. Sending work offshore &lt;i&gt;introduces&lt;/i&gt; work onshore to manage it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
If you&#039;re reading between the lines, you might be thinking that I think offshoring is a bad idea, but that&#039;s not the case. The same problems apply regardless of where the &#034;external&#034; team is based because you&#039;ve artificially introduced barriers that prevent the teams from successfully working together. Offshoring just makes it harder because of differences between time zones, cultures, etc. What you have here is a &lt;b&gt;distributed &lt;a href=&#034;http://en.wikipedia.org/wiki/Waterfall_model&#034;&gt;waterfall model&lt;/a&gt;&lt;/b&gt; of software development.
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Requirements&lt;/b&gt; : The buy-side organisation figures out what they want, scopes it and defines it.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Analysis&lt;/b&gt; : The buy-side organisation analyses the problem and starts designing a high-level solution. Anything from a small component to the full solution is documented in &lt;i&gt;enough detail&lt;/i&gt; so that an external team can understand and deliver the solution. I&#039;ve even heard of teams that take this process down to the pseudocode level!&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Design&lt;/b&gt; : The offshore team take the analysis and start designing software.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Implementation&lt;/b&gt; : The offshore team implement and unit test their code.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Test&lt;/b&gt; : Depending on what they are developing (i.e. a component or a whole system), the offshore team performs some higher level testing before shipping the deliverables back to the buy-side for further system and integration testing. The usual quality assurance/bug fix cycles commence, with enhancements and change requests being sent offshore.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Our experience in software development has proved that the waterfall model doesn&#039;t work in many cases, for a number of reasons. These range from not delivering a fit for purpose solution because the requirements change once the design is &#034;signed off&#034; to actually failing to deliver at all. Plus, from an architecture perspective, &lt;a href=&#034;http://www.codingthearchitecture.com/2007/05/14/the_hand_off.html&#034;&gt;handing-off your architecture&lt;/a&gt; to the development team also reduces your chance of a successful project. I&#039;ve been called in to look at a lot of poorly performing, unscalable, etc solutions recently where the architecture hasn&#039;t been thought out well enough. The software factory approach to software development &lt;i&gt;needs&lt;/i&gt; well defined signed-off specifications for it to work, but that&#039;s the one aspect of software development that we know just isn&#039;t possible (in the commercial world, anyway). If organisations can&#039;t get software development right using this process with an onshore team, how are they going to get that same process to work with an offshore team? Offshoring has the ability to reduce costs, but you&#039;re making some trade-offs.
&lt;/p&gt;

&lt;p&gt;
No, the real problem here isn&#039;t offshoring, it&#039;s the engagement model that organisations are using. I think that, for offshoring to work, the engagement model needs to move away from the distributed waterfall and towards something that is more inclusive, collaborative and iterative. Agile methods bring everybody together and focus their efforts towards a common goal, which is the same thing that needs to happen with offshoring. Offshore teams need to be fully brought in to the overall software project that they are helping to build and the focus needs to switch from seeing them as a service provider to seeing them as a part of the team. More involvement and more collaboration is what I think will help make offshoring a successful approach. In fact, let&#039;s not even use the term &#034;offshoring&#034;, let&#039;s just think about this as a distributed project team.
&lt;/p&gt;

&lt;p&gt;
To wrap-up; I don&#039;t think that the current &#034;software factory&#034; approach being adopted by most organisations is healthy or sustainable, and organisations are starting to become dissatisfied with the results they are getting. Waterfall approaches have failed in the past, what&#039;s different this time?
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.simongbrown.com/blog/2008/02/14/when_will_the_offshore_bubble_burst.html#comments</comments>
    <guid isPermaLink="true">http://www.simongbrown.com/blog/2008/02/14/when_will_the_offshore_bubble_burst.html</guid>
    <pubDate>Thu, 14 Feb 2008 11:08:00 GMT</pubDate>
  </item>
  
  </channel>
</rss>
