<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-24172883</id><updated>2012-01-19T11:21:59.354+01:00</updated><category term='embedded'/><category term='continuous integration'/><category term='blogger'/><category term='scrum'/><category term='agile'/><category term='metrics'/><category term='organization'/><category term='firmware'/><category term='change'/><category term='ngware'/><category term='tdd'/><category term='NPD'/><category term='conference'/><category term='teams'/><category term='management'/><category term='legacy code'/><title type='text'>Timo's weblog</title><subtitle type='html'>Anatomy of One Agile Development Experience</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default?start-index=101&amp;max-results=100'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>131</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-24172883.post-4217234328415960802</id><published>2011-12-28T18:14:00.000+01:00</published><updated>2011-12-28T19:15:59.786+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>TDD and design</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Earlier I wrote about the long distance I went with mac driver design (&lt;a href="http://ng-embedded.blogspot.com/2010/08/fiddling-around-before-tdd.html"&gt;link&lt;/a&gt;). The current design is sketched below with examples of functions, and responsibilities (green). The clouds are C files. The design has 95% unit test line coverage. Tests have proven their power. I refactored the code using a local repository while traveling on vacation on remote island (during off-days from diving) and obviously no access to real target for testing. I made 53 commits. My commit frequency is very high, so many of the refactorings were just renaming and extracting helpers, but there were also more fundamental design changes. When I finaly, and sadly, made it back to the lab, I was kind of afraid that the code won't run and the fastest thing to do is to throw away all the refactorings. The next fastest thing would be to repeat them one by one in real repository. I gotta say I was surprised when the code worked right out the cross-compiler and all I needed to do was one massive merge from local to real repository. This is very rewarding. During the refactoring there was a handfull of incidents when tests caught a stupid mistake made by me. This is worthy even if you had the access to real target. The nice thing is that unit tests on dev environment tell it right away.&lt;/div&gt;&lt;div&gt;There is no need to make tradeoffs and large/long changes without feedback because of lengthy burning times, or lengthty stepping path to debug newly written code.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-1QwVjlvdJ0c/Tjmd-FtOp1I/AAAAAAAAAGw/1LIyHAj3T-s/s1600/mac%2Bdriver%2Bdesign.png"&gt;&lt;img style="margin: 0px auto 10px; width: 320px; height: 269px; text-align: center; display: block; cursor: pointer;" id="BLOGGER_PHOTO_ID_5636710098640217938" border="0" alt="" src="http://2.bp.blogspot.com/-1QwVjlvdJ0c/Tjmd-FtOp1I/AAAAAAAAAGw/1LIyHAj3T-s/s320/mac%2Bdriver%2Bdesign.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;But it wasn't the biggest learning. The biggest learning was that the design resulted quite the different from what one would expect. I base this claim to investigation of several example MAC driver source codes available in the internet. The design has proven to be good, in terms of testability (that was the driver) and adaptability (this was the proof). More about adaptability later below. The thing that differentiates this style of design is the emphasis it puts to testing. Design is good if it is easy to test. If the tests are complicated to understand or difficult to write all together, then there is a good chance that design has flauses.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think what I experienced is well explained by Michael Feathers in his talk "The Deep Synergy Between Testability and Good Design" (&lt;a href="http://www.testingtv.com/2010/12/13/the-deep-synergy-between-testability-and-good-design/"&gt;video&lt;/a&gt;). Take a look, and don't think this applies only to OO languages. You'd be wrong. The driver we are talking about here is written in C. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Current design was tested when the hw team decided to have a second option for MAC driver. They wanted the final pcb so they could proceed with emission tests and we together did not have enough information to do the decision either way. The candidate for production pcb has routing for both options. One implementation of set based design. But back to the sw side of it...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The concepts in driver design kept most of the files completely untouched. SPI and DMA drivers were independent compile units and they needed no touching. This also means that no code was duplicated in the production code mass. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The original design was done with just testability in mind. At that time there was no knowledge about the extra hardware the design needs to comply with. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my opinion the code became adaptable and reusable by designing it for testability.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I don't think writing code this way, by seprating concerns, focusing on single responsibility, and not mixing abstraction levels, is slower to write. Is it different? Oh yeah. You have to really develop a new sense for good coding. As a remark, which I did earlier, I wouldn't refactor the code after fiddling around, but write a decent design based on learning from exploring, aka spike.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the current MAC driver code one detailed design decision may make you raise your eye browse; Single function ClockByte() is in separate file. This is because I wanted to assert through just the bytes been send, not through processor register dummies. Other option would have been to inject a function pointer for this. I chose to use link time seam.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On the other hand just few simple tests for basic correctness of ClockByte() function are enough. This can also been seen as principle of separation of concerns and keeping the files at the same level of abstraction.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Current design is far away from being perfect. It is not what I think should be achieved. It continues to offer me opportunities for deeper understanding of tdd, and synergy between design and tests, more deeply. The next lesson will be available when it gets factored to enable irq based interfacing between uC and mac driver. So far it has been just message polling.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4217234328415960802?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4217234328415960802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4217234328415960802' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4217234328415960802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4217234328415960802'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2011/12/tdd-and-design.html' title='TDD and design'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-1QwVjlvdJ0c/Tjmd-FtOp1I/AAAAAAAAAGw/1LIyHAj3T-s/s72-c/mac%2Bdriver%2Bdesign.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-6378139475675154858</id><published>2011-09-10T07:05:00.008+02:00</published><updated>2011-09-10T08:01:54.853+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Slides from Agile 2011</title><content type='html'>Agile 2011 ended in Salt Lake City, Utah a few weeks ago. It was again great to meet the growing circle of friends in agile community. This year my own conference was a bit different as I submitted two talks and participated in the review process for Agile for Embedded Systems Development -track.&lt;br /&gt;&lt;br /&gt;Indeed, we had dedicated track for embedded stuff. It was the 10 year anniversary for agile manifesto and this was the first time the embedded got this much attention. The track had quality sessions and averaged around 20 attendees for each session.&lt;br /&gt;&lt;br /&gt;You can find my slide decks via the links below:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ngware.eu/blog/papers/Agile2011_embedded%20tdd%20cycle%20_Punkka_Ahman.pdf"&gt;&lt;strong&gt;Embedded Testing Cycle - the First 3 Years, Markku Åhman and Timo Punkka&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;James Grenning presented the embedded test-driven development (TDD) cycle already in 2004. Whispers on the hallways of conference hotels tell that somebody is actually implementing this idea. However, there are only few documented implementation details available. Schneider Electric’s fire security team has been implementing TDD cycle as an integral part of the development process for 3 years. Come to learn from their real-life experience and mistakes in automated testing at different levels: unit testing, acceptance testing using simulation, and in real target hardware. &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;a href="http://www.ngware.eu/blog/papers/Agile2011_agile%20hardware%20and%20co-design_Punkka.pdf"&gt;&lt;strong&gt;Agile Hardware and Co-Design, Timo Punkka&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Agile software development is getting attention also in embedded software development. Embedded system development on the other hand requires different engineering disciplines working together. When embedded software team starts using agile methods, it affects also other disciplines. Agile development emphasizes continuous learning through experimenting and collaboration instead of following a detailed up-front plan. Agile embedded software team expects different behavior in system co-design. This talk discusses reasons and ways to adapt agile development to co-design of system development. &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lots of other presentations, including all other embedded track presentations, are available via &lt;a href="http://program2011.agilealliance.org/"&gt;the conference program site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 200px; DISPLAY: block; HEIGHT: 110px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5650606741594679282" border="0" alt="" src="http://2.bp.blogspot.com/-9b9NNN6fjxw/Tmr85K4tp_I/AAAAAAAAAHA/oblrSrv_LPU/s320/Agile2011-badge.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-6378139475675154858?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/6378139475675154858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=6378139475675154858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/6378139475675154858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/6378139475675154858'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2011/09/slides-from-agile-2011.html' title='Slides from Agile 2011'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-9b9NNN6fjxw/Tmr85K4tp_I/AAAAAAAAAHA/oblrSrv_LPU/s72-c/Agile2011-badge.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-4531739504243803251</id><published>2011-08-18T15:06:00.006+02:00</published><updated>2011-08-18T15:20:22.247+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ngware'/><title type='text'>A New Home</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;A fiend of mine did fantastic job on &lt;a href="http://www.ngware.eu/"&gt;my new site&lt;/a&gt;. My fuzzy ideas and his zero-whining attitude made a good pair. It was truly an agile project. The site was up and running from day 1, and it emerged during number of customer-developer pairing sessions. Final outlook is a result of countless "you know, why don't we just try it"s.&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://3.bp.blogspot.com/-v9HGe5ydq3E/Tk0Pqne9WcI/AAAAAAAAAG4/JnZiho_er8k/s320/ngware_home.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 215px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5642183132992854466" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4531739504243803251?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4531739504243803251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4531739504243803251' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4531739504243803251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4531739504243803251'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2011/08/new-home.html' title='A New Home'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-v9HGe5ydq3E/Tk0Pqne9WcI/AAAAAAAAAG4/JnZiho_er8k/s72-c/ngware_home.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-4610523118925670649</id><published>2010-12-17T20:20:00.003+01:00</published><updated>2010-12-17T20:30:02.940+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Embedded Agile, ESC2010, Boston</title><content type='html'>Here are the &lt;a href="http://www.ngware.eu//blog/papers/ESC-241Slides_Punkka.pdf"&gt;slides&lt;/a&gt; and &lt;a href="http://www.ngware.eu//blog/papers/ESC-241Paper_Punkka.pdf"&gt;technical paper&lt;/a&gt; from my talk on Embedded Agile at &lt;a href="http://esc-boston.techinsightsevents.com/"&gt;Embedded Systems Conference 2010, Boston&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I had a good time at the conference. Hope you can find the material useful!&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Abstract.&lt;/strong&gt; New product development (NPD) is getting more and more challenging. Change happens all the time in all dimensions, including own organization, technology, competition, and marketplace. Agile development is targeted at working in a turbulent environment driven by continuous learning. Originated from software industry, its applicability to embedded system development has been analyzed over the years. In this paper, I present some observations on implications of embedded system development to agile development. I introduce findings on frequent releasing, automated testing, co-design including non-SW development and quality systems like ISO9001.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4610523118925670649?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4610523118925670649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4610523118925670649' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4610523118925670649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4610523118925670649'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2010/12/embedded-agile-esc2010-boston.html' title='Embedded Agile, ESC2010, Boston'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-8260399671286520143</id><published>2010-11-08T17:10:00.002+01:00</published><updated>2010-11-08T17:16:51.111+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><title type='text'>See you in Grenoble</title><content type='html'>I'll be in Grenoble, France November 22.-24.11.2010 to attend &lt;a href="http://agile-grenoble.org/"&gt;Agile Grenoble&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you happen to be around, get in touch.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;a href="http://2.bp.blogspot.com/_4cBib-pDZN8/TNghQTiSCoI/AAAAAAAAAF0/iC_hLSmP-Ic/s1600/speaker+Agile+Grenoble+2010.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5537212305857710722" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 197px; CURSOR: hand; HEIGHT: 147px" alt="" src="http://2.bp.blogspot.com/_4cBib-pDZN8/TNghQTiSCoI/AAAAAAAAAF0/iC_hLSmP-Ic/s200/speaker+Agile+Grenoble+2010.PNG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-8260399671286520143?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/8260399671286520143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=8260399671286520143' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/8260399671286520143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/8260399671286520143'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2010/11/see-you-in-grenoble.html' title='See you in Grenoble'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4cBib-pDZN8/TNghQTiSCoI/AAAAAAAAAF0/iC_hLSmP-Ic/s72-c/speaker+Agile+Grenoble+2010.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-7983590014247304357</id><published>2010-09-11T19:21:00.004+02:00</published><updated>2010-09-11T19:31:01.160+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>See you in Boston</title><content type='html'>&lt;a href="http://i.cmpnet.com/eetimes/Logos/125x600-speaker-boston.gif"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 125px; CURSOR: hand; HEIGHT: 600px" alt="" src="http://i.cmpnet.com/eetimes/Logos/125x600-speaker-boston.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_4cBib-pDZN8/TIu6wtarqII/AAAAAAAAAFc/xgtF7AwDSv8/s1600/125x600-speaker-boston.gif"&gt;&lt;/a&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;I'll be attending ESC 2010 in Boston in a couple of weeks. You can &lt;a href="https://www.cmpevents.com/ESCe10/a.asp?option=G&amp;amp;V=3&amp;amp;id=679181"&gt;catch me speaking&lt;/a&gt; about embedded agile on Tuesday 21st. You can find me somewhere in the conference throughout the week. Let me know if you're around.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-7983590014247304357?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/7983590014247304357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=7983590014247304357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7983590014247304357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7983590014247304357'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2010/09/see-you-in-boston.html' title='See you in Boston'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-222535292959236527</id><published>2010-08-27T18:51:00.001+02:00</published><updated>2010-08-27T18:51:00.336+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>Fiddling around before TDD</title><content type='html'>The first of the Uncle Bob's &lt;a href="http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd"&gt;Three Rules of tdd&lt;/a&gt; states:&lt;br /&gt;&lt;br /&gt;1. You are not allowed to write any production code unless it is to make a failing unit test pass.&lt;br /&gt;&lt;br /&gt;A few recent discussions among embedded developers revealed that this rule has caused some confusion among fellow beginners of embedded tdd. So, let me first point you to another tip from the same source(&lt;a href="http://blog.objectmentor.com/articles/2009/10/08/tdd-triage"&gt;Uncle Bob advises to do fiddling around on things that you are not sure of how they work&lt;/a&gt;). I will share a short story:&lt;br /&gt;&lt;br /&gt;I've been writing a proof-of-concept driver for serial to Ethernet controller. It was not sure if the serial port on uC could be configured to work with the MAC controller, or if it would be possible to use the DMA controller to manage longer transfers. I needed the proof-of-concept for the hardware team fast. I learned how to use the controller by trial and error, glueing together several bits from application notes and examples and running them in combination of two evaluation kits. Needless to say it was a mess. It even turned out I couldn't get the job done without a few circuits from my hardware pals. It would have been really awkward and laborous to have tests written during this fast paced back and forth experimenting based on a sample code which of course didn't come with tests. All this was done in C, with the tools for C.&lt;br /&gt;&lt;br /&gt;After I knew which bits worked and which didn't, I wanted to illustrate this learning in tests. I harnessed the quickly hammered code with tests and then massaged the tests and code hand in hand into better shape. In retrospective, I should have treated the original code as a throw away prototype (aka code from Spike). I thought I would be faster by continuing to work with the code I had. Sad, but lacking the discipline made my overall cycle time propably massively longer. I believe that this is more of a rule.&lt;br /&gt;&lt;br /&gt;It might be from the first XP book, I'm not sure, but when I was first introduced to agile methods people always listed the last rule; rules are just rules. Based on this experience I do believe it is pragmatic to fiddle things around without tests. But when you start sculpting the solution towards production code, you should take a fresh start and drive test-first based on your newly acquired knowledge. I know I will next time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-222535292959236527?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/222535292959236527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=222535292959236527' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/222535292959236527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/222535292959236527'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2010/08/fiddling-around-before-tdd.html' title='Fiddling around before TDD'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-9072094099052815199</id><published>2010-04-03T08:13:00.004+02:00</published><updated>2010-04-03T08:20:30.725+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>Test Driven Development for Embedded C in beta</title><content type='html'>&lt;a href="http://www.renaissancesoftware.net/"&gt;James Grenning's&lt;/a&gt; book &lt;a href="http://www.pragprog.com/titles/jgade/test-driven-development-for-embedded-c"&gt;Test Driven Development for Embedded C&lt;/a&gt; is now available in beta from &lt;a href="http://www.pragprog.com/"&gt;The Pragmatic Bookshelf&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have taken a peek and checking it out is strongly recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-9072094099052815199?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/9072094099052815199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=9072094099052815199' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/9072094099052815199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/9072094099052815199'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2010/04/test-driven-development-for-embedded-c.html' title='Test Driven Development for Embedded C in beta'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-680913912238269667</id><published>2009-12-19T07:35:00.003+01:00</published><updated>2009-12-19T07:44:10.936+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>Bowling Game Kata in C</title><content type='html'>&lt;a href="http://olvemaudal.wordpress.com/"&gt;Olve Maudal&lt;/a&gt; has shared his presentation of &lt;a href="http://olvemaudal.wordpress.com/2007/11/27/test-driven-development-in-c/"&gt;Bowling Game Kata using C&lt;/a&gt;.  You can find the slides directly here (&lt;a href="http://www.pvv.org/~oma/TDDinC_Smidig2007.pdf"&gt;pdf&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I'll add a link to my TDD in C &lt;a href="http://delicious.com/timo.punkka/"&gt;delicious&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-680913912238269667?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/680913912238269667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=680913912238269667' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/680913912238269667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/680913912238269667'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2009/12/bowling-game-kata-in-c.html' title='Bowling Game Kata in C'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-4836510064736998265</id><published>2009-06-30T07:22:00.000+02:00</published><updated>2009-06-30T07:24:19.240+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='metrics'/><title type='text'>Coverage with lcov, and so what?</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_4cBib-pDZN8/ShgG1wSV7MI/AAAAAAAAAFM/2H_XH-uRR1s/s1600-h/percentage.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5339024878812392642" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 169px; CURSOR: hand; HEIGHT: 159px" alt="" src="http://3.bp.blogspot.com/_4cBib-pDZN8/ShgG1wSV7MI/AAAAAAAAAFM/2H_XH-uRR1s/s200/percentage.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;A while back we ran an experimental line coverage analysis on our acceptance test suite. The result was 68% on the code for the main control board. I got the result from nightly build and mentioned it in Daily Scrum, and prompted "so what do we think about it, should we track it"? Everyone on the team had a blank stare and then finally a team member came forward "yeah, that's a good question. So, what?"&lt;br /&gt;&lt;br /&gt;Coverage is information. It is just that, an additional piece of information, not by any means the final truth. I don't remember who teached me this, but;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;em&gt;"If you take all your assert's away you still have the same coverage. You just ain't testing anything at all."&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This has been explained &lt;a href="http://googletesting.blogspot.com/2008/03/tott-understanding-your-coverage-data.html"&gt;here&lt;/a&gt; and of course in &lt;a href="http://www.exampler.com/"&gt;Brian Marick&lt;/a&gt;'s classic &lt;a href="http://www.exampler.com/testing-com/writings/coverage.pdf"&gt;How to Misuse Code Coverage&lt;/a&gt; (pdf).&lt;/p&gt;&lt;div&gt;Well, maybe the good coverage can not say anything about the quality of your tests, but poor coverage can certainly say thing or two of opposite nature. If your coverage is 20% we can say quite confidently that you ain't there yet.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I started with acceptance test line coverage, but the rest is about unit test line coverage. Some embedded teams use gcov and I have heard people fiddling the data to generate fancier reports. Being lazy as I am I didn't do it myself. I did what I'm good at and searched for what others have already done. I found lgov, which is a tool in Perl to format gcov data.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;We run lcov under Cygwin. You can get lcov for example from &lt;a href="http://ltp.sourceforge.net/coverage/lcov.php"&gt;here&lt;/a&gt;, extract, and execute "make install". Next compile and link unit tests with gcc using flags "-fprofile-arcs" and "-ftest-coverage". We have a special build target for intrumenting the unit test executables with debug and coverage information so that we don't unnecessary slow down the bulk of builds. Next execute your full suite just like you normally would.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;In our case all .obj files from test build are in ./bin directory, and that's where all the coverage data files go to. Our unit test script moves them to ./bin/code_coverage directory away from .obj files, and we want the final html report to be in ./build/test/code_coverage. Now we have the information necessary to create a shell script to do the actual analysis and reporting of coverage data:&lt;/div&gt;&lt;code&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;path=`dirname $0` &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;lcov --directory $path/bin/code_coverage -b $path --capture --output-file $path/ic.info&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;genhtml -o $path/build/test/code_coverage $path/ic.info&lt;/span&gt;&lt;/div&gt;&lt;/code&gt;&lt;br /&gt;&lt;div&gt;Vola', your disappointing(?) results are ready to be browsed, like so:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5338927567248686978" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 246px; CURSOR: hand; HEIGHT: 226px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_4cBib-pDZN8/SheuVedl_4I/AAAAAAAAAFE/N4--Lrc_4y8/s200/coverage.png" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;What the heck, it's all green, while you only have tests for simple utils files? In this approach there is a limitation - you only get coverage information for the files that are involved with your test suite. With huge legacy code, this would yield too promising picture early on. Again you need to think for yourself. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Experiment with coverage in your team, I think it's worth every penny but even when you start closing 100%, remember to keep analyzing, "so what?"&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4836510064736998265?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4836510064736998265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4836510064736998265' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4836510064736998265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4836510064736998265'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2009/06/coverage-with-lcov-and-so-what.html' title='Coverage with lcov, and so what?'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4cBib-pDZN8/ShgG1wSV7MI/AAAAAAAAAFM/2H_XH-uRR1s/s72-c/percentage.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-2566736889091626089</id><published>2009-02-06T11:32:00.002+01:00</published><updated>2009-02-06T11:34:10.861+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='legacy code'/><title type='text'>Learning to cope with legacy C</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_4cBib-pDZN8/SYwRZF7myHI/AAAAAAAAAE0/PGK_bapd8q8/s1600-h/learn.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5299629984294815858" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 231px; CURSOR: hand; HEIGHT: 132px" alt="" src="http://1.bp.blogspot.com/_4cBib-pDZN8/SYwRZF7myHI/AAAAAAAAAE0/PGK_bapd8q8/s200/learn.jpg" border="0" /&gt;&lt;/a&gt; New responsibilities during the past year have been a great learning experience. The key learning is that now I really know how incompetent I am. I can’t wait to move again and learn how many more things I do really badly, or what would be even better, can't do at all. This is a brief story of one such finding during this joyrney.&lt;br /&gt;&lt;br /&gt;For the past year we have focused on &lt;a href="http://www.methodsandtools.com/archive/archive.php?id=72"&gt;ATDD&lt;/a&gt; with our own framework written in Python. We have 200+ automated acceptance tests for the system. With unit tests we however have struggled. While we have over 100 (well, it’s a start) of them, without the exception of the latest ones they are not really meaningful.&lt;br /&gt;&lt;br /&gt;What's different with the latest tests then? They focus on higher level. I’m not sure what these tests as programmer tests should be called, but a programmer test will do for now. I do believe unit tests should be focused when doing TDD, but, wait, wait, I have an excuse… The code is old. It has its dependencies, and while maybe not the worst case in the world, it is a pain to get something compiled in isolation. The code has responsibility based structure (or should have had), and this structure is expressed in the source code folder structure. Each of the responsible "modules", or folders, typically contain own task. A typical task looks something like this:&lt;br /&gt;&lt;br /&gt;task_specific_inits();&lt;br /&gt;&lt;br /&gt;for(;;) {&lt;br /&gt;s = OS_wait_for_something();&lt;br /&gt;switch(s) {&lt;br /&gt;case 1:&lt;br /&gt;do_something1(s);&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Sometimes do_something1(s) is inlined and you may get a bitter sweet taste of those infamous 1000+ line functions. Other times you are lucky and the whole high level event parsing is already done in own function, along with lines do_something_with_the_event_from_X(s). This function continues the handling with loooong switch case, hopefully just calling further functions.&lt;br /&gt;&lt;br /&gt;So, when we decide to test something inside a selected "module", or a folder in our case, we compile and link single test file, all the production code from a single responsible module/folder, production code for everything considered utils, like linked lists etc., and fake everything else. For faking we use Atomic Object's Cmock and manually written stuff when appropriate. We choose the task handling for injecting the test actions.&lt;br /&gt;&lt;br /&gt;We arrange the test execution environment as we wish by initializing all the parties to expected state and teaching the mocked neighbours accordingly. We inject a single event, or short sequence of events, into task's handling routine and we try to find ways to assert if everything went as we wished for. Sometimes we can use this to learn what really happens when you give such and such event. After all the default assumption is that the code works, as it has been in production for years. We want to make sure it stays that way, when we change it. We have several options for observing the behavior:&lt;br /&gt;&lt;br /&gt;1. Automatically generated mocks will tell us if the interaction was as expected&lt;br /&gt;2. We can use getters of utilities, like linked lists&lt;br /&gt;3. We can sense the internal status of any of the production code files with few nasty little tricks like #define STATIC&lt;br /&gt;&lt;br /&gt;When the first test, and maybe her friend, is running it is time to start refactoring your code. Refactoring your test code, that is. If you take a closer look on what you have done, you most likely see 1-2 300 lines long test cases, which look pretty much the same. Now it is a good time to start extracting helpers. When creating an event sequence to be run you probably generate similar data structures. These can be extracted into functions. You probably do a bunch of similar assertions on many of your test. These can be extracted to helper functions. And so on, and so on. Each refactoring is likely to reveal more opportunities for cleaning the code. This can't be emphasized more. It is important to keep the code clean from the beginning. Otherwise you will have a 10KLOC test file on your hands, and it is much more work to start cleaning it only at that point.&lt;br /&gt;&lt;br /&gt;This is very far from TFD (test first design). It is a battle to get some tests going to be in better place to continue improving and changing the code. The code is not going to disappear anywhere soon, so there will be lots of changes.&lt;br /&gt;&lt;br /&gt;Why it took us a year to get to this point? Blame is on me. I got bitten by the test bug while writing a really hard real-time firmware app with a former colleague bunch of years back, and we learned that small exact tests leading into small steps of coding lead into zero debugging time. This was type of SW where we earlier had spent majority of our time debugging the code with oscilloscope and manually monitoring led blinks with throw away debugging code. During that experiment I saw the light (as saw my colleague), and thought that this is how also firmware should be written. Write each line of code to make a small test pass. However it is fairly rare in embedded domain to get your hands on a green project. This may not be a characteristic of just embedded sw, but sw in general today. We mostly write enhancements to existing products. Existing products in 2009 are not typically delivered with automated tests, and even less so developed this in mind. There is going to be plenty of opportunities for battles like this. Letting go on the ideal very low level unit testing took a year for me. It is still my ideal way of coding, but we can not get there overnight with legacy code.&lt;br /&gt;&lt;br /&gt;If getting first tests in place sounds easy(?), calm down. It is only a starting place. You will notice how hard it is to test your code for example because of scattered initialization routines or that there is no structure in the first place. You should concider all these problems as good things. They are indicators for places of improvement. Those problems are in the code, building tests only make it more visible. If you work on those problems, you should be able to see more dependency breaking opportunities and eventually get to more focused tests. That’s the plan at the moment.&lt;br /&gt;&lt;br /&gt;Michael Feathers uses term pinch point in &lt;a href="http://www.amazon.com/Working-Effectively-Legacy-Robert-Martin/dp/0131177052/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1233915919&amp;amp;sr=8-1"&gt;his book&lt;/a&gt; about working with legacy code. Pinch point is a function or small collection of functions that you can write tests against and cover changes in many more functions. I guess event handlers for tasks are our first natural pinch points. This at least is the current step on the learning ladder for me. Hope the ladders won’t fall.&lt;br /&gt;&lt;br /&gt;James Grenning also made a nice job articulating the whole legacy code testing process in C language (&lt;a href="http://www.renaissancesoftware.net/blog/archives/27"&gt;link&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Atomic Object also presented the importance of refactoring the test code from the beginning (&lt;a href="http://www.atomicobject.com/pages/Embedded+Feature-Driven+Design"&gt;link&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-2566736889091626089?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/2566736889091626089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=2566736889091626089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/2566736889091626089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/2566736889091626089'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2009/02/learning-to-cope-with-legacy-c.html' title='Learning to cope with legacy C'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4cBib-pDZN8/SYwRZF7myHI/AAAAAAAAAE0/PGK_bapd8q8/s72-c/learn.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-8411129988537993833</id><published>2009-01-27T11:51:00.004+01:00</published><updated>2009-01-27T11:56:15.520+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>My Delicious Embedded TDD Links</title><content type='html'>After a hint from a friend I recalled that I actually did start to collect embedded TDD links on &lt;a href="http://delicious.com/"&gt;delicious.com&lt;/a&gt; a while ago.&lt;br /&gt;&lt;br /&gt;So not having anything more interesting to do, I updated the collection a bit and placed a link on the sidebar.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://delicious.com/timo.punkka/embedded_tdd"&gt;My Delicious Links on Embedded TDD&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-8411129988537993833?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/8411129988537993833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=8411129988537993833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/8411129988537993833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/8411129988537993833'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2009/01/my-delicious-embedded-tdd-links.html' title='My Delicious Embedded TDD Links'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-9013373255983946784</id><published>2008-11-10T08:27:00.001+01:00</published><updated>2008-11-10T07:32:20.795+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teams'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='organization'/><title type='text'>The Complex Velocity of True Teams</title><content type='html'>Using velocity for long term planning of a project is a wonderful idea. With minimal effort we get fairly good estimates. At least this would be the case in ideal situations, meaning new team without maintenance or obsolete component replacement obligations etc. If you are a believer in true teams as I am, you do realize that all the urgent work and even absence due personal issues affect team dynamics. Just calculating velocity in terms of team member availability isn't realistic with true teams. The velocity, or team achievement, is not linear function of sum of available team member hours. If one person is for example pulled away from team activities for taking care of urgent manufacturing issue, this will affect the team dynamics. This has deeper impact than just missing those hours. To be honest, in some teams the impact can be positive as well. In that case I suppose they were non functioning work group, which now due the changed dynamics has a chance to become a team. &lt;br /&gt;&lt;br /&gt;This said, no, we have not solved the issue of maintenance and other urgent work disrupting normal work. We are struggling with bouncing velocity. This is for several reasons, but it also woke me to think about true teams again. Anyway, I'd like to pay more attention to this and give true teams a chance to grow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-9013373255983946784?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/9013373255983946784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=9013373255983946784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/9013373255983946784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/9013373255983946784'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2008/10/using-velocity-for-long-term-planning.html' title='The Complex Velocity of True Teams'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-5417652202664906453</id><published>2008-07-12T21:45:00.001+02:00</published><updated>2008-07-12T21:50:28.195+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Even More Guns for Embedded Development</title><content type='html'>A while back &lt;a href="http://www.benoitlavigne.com/blog/2007/12/06/embedded-development-with-ruby/"&gt;Benoit&lt;/a&gt; saw the light of using modern languages (&lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt; in that case) to help in developing embedded software, which still in most cases is developed in C for very well known reasons. I though I will throw additional ingradient to this soup. We are also using &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; for our test-driven development, for acceptance test-driven development to be precise. There are few concepts that has lead us to do this.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. You remember &lt;a href="http://ng-embedded.blogspot.com/2007/07/wrap-it-thinly.html"&gt;wrapping thinly with hexagonal architecture&lt;/a&gt;, right?&lt;br /&gt;&lt;br /&gt;2. Company that I work for has a long history of using embedded PC simulation system called E-SIM from &lt;a href="http://www.mentor.com/"&gt;Mentor Graphics&lt;/a&gt;. This product has &lt;a href="http://www.mentor.com/products/embedded_software/development_tools/simtest/index.cfm"&gt;evolved&lt;/a&gt;, but we are using the old version.&lt;br /&gt;&lt;br /&gt;3. E-SIM simulation tool has a Python API wrapper&lt;br /&gt;&lt;br /&gt;A continuum is to develop own embedded acceptance test framework using Python, right? Well, we did it anyway. It is fairly simple, really. E-SIM communicates with the application interfaces using the mechanism called channels. There is a Windows service running called Communication Manager. And this fellow is responsible for gathering and sharing values in these channels to various C applications and our test driver written in Python. Indeed, we can have several applications running on one PC and simulate multi-device/processor/board systems as we wish. A channel can be a package in communication, a binary input as push button, binary output as LED, and so on.&lt;br /&gt;&lt;br /&gt;Now, wanting to be able to write acceptance tests in a domain language that could be more readily understood by the business, we created a script parser using Python's reflection. This test driver parses the test script file and launches all the application .exe's as needed and then stimulates and senses the system using of E-SIM channel accessors. Sounds simple? The nice part is that it really is simple.&lt;br /&gt;&lt;br /&gt;These tests run automatically on our continuous integration server, but we also have a GUI which simulates UI of a real system. Now we can watch the UI in action during the test sequence scripts.&lt;br /&gt;&lt;br /&gt;Here is a snippet of .test acceptance test script written in (almost) domain language&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;sendFire 0,1,2,3,Delay Fire&lt;br /&gt;wait 2&lt;br /&gt;sendDelayed 0,1,100&lt;br /&gt;wait 2&lt;br /&gt;checkRow 1,FIRE in zone 00021/1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here is the reflection part of the parser in Python. I have no idea how good of a Python code this is being an average embedded C programmer, but it looks simple to me.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;line&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;in&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;tp&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;getTestLines&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;:&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;currentScriptLine&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;line&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;currentScriptLineNumber&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;+&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;=&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;1&lt;/span&gt;&lt;br /&gt;   &lt;br /&gt;  &lt;strong&gt;if&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;len&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;line&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;1&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#2040a0;"&gt;elements&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;line&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;split&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;' '&lt;/span&gt;,&lt;span style="color:#ff0000;"&gt;1&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:#2040a0;"&gt;try&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;:&lt;/span&gt;&lt;br /&gt;      &lt;strong&gt;if&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;len&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;elements&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;1&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;:&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#2040a0;"&gt;getattr&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;elements&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;[&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;0&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;]&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;elements&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;[&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;1&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;]&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;lstrip&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;' '&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;br /&gt;      &lt;strong&gt;else&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;:&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#2040a0;"&gt;getattr&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;elements&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;[&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;0&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;]&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#2040a0;"&gt;except&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;:&lt;/span&gt;&lt;br /&gt;      &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;myReporter&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;addWarning&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;br /&gt;      &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;warning&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;"Could not execute line: %s"&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;%&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;line&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And finally here is a simple method in the TestDriver class. You can see that the method's name matches the action word in the test script snippet above. The rest of the test script line is passed as an argument to the method.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &lt;span style="color:#2040a0;"&gt;def&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;checkRow&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;parameters&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#2040a0;"&gt;elements&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;parameters&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;split&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;','&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#2040a0;"&gt;row&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;=&lt;/span&gt; &lt;strong&gt;int&lt;/strong&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;elements&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;[&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;0&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;]&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;    &lt;span style="color:#2040a0;"&gt;expected&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;string&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;replace&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;elements&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;[&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;1&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;]&lt;/span&gt;, &lt;span style="color:#008000;"&gt;"&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt;, &lt;span style="color:#008000;"&gt;""&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#2040a0;"&gt;actual&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;currentLCD_Rows&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;row&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;    &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;checkEqual&lt;/span&gt;&lt;span style="color:#4444ff;"&gt;(&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;expected&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;actual&lt;/span&gt; &lt;span style="color:#4444ff;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Similar approaches are Atomic Object's &lt;a href="http://rubyforge.org/projects/systir/"&gt;Systir&lt;/a&gt;, and Exoftware's &lt;a href="http://exactor.sourceforge.net/"&gt;Exactor&lt;/a&gt;. These can be labeled as script frameworks in contrast to table frameworks like FIT/&lt;a href="http://fitnesse.org/"&gt;Fitnesse&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-5417652202664906453?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/5417652202664906453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=5417652202664906453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/5417652202664906453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/5417652202664906453'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2008/07/even-more-guns-for-embedded-development.html' title='Even More Guns for Embedded Development'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-1066590331270706179</id><published>2008-06-18T09:00:00.000+02:00</published><updated>2008-12-09T17:24:38.901+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Impossible, I Have Never Done That</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_4cBib-pDZN8/SCMuhEabJzI/AAAAAAAAADc/80JY7ma5rTk/s1600-h/science_experiment.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5198049540570818354" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 188px; CURSOR: hand; HEIGHT: 250px" height="279" alt="" src="http://1.bp.blogspot.com/_4cBib-pDZN8/SCMuhEabJzI/AAAAAAAAADc/80JY7ma5rTk/s200/science_experiment.jpg" width="227" border="0" /&gt;&lt;/a&gt; When adopting agile planning techniques to non-software development activities an often heard argument against estimating the complexity of, say, schematic is:&lt;br /&gt;&lt;br /&gt;"it is impossible to say, I have never done that before"&lt;br /&gt;&lt;br /&gt;Well, firstly, in embedded software that's the situation pretty much allways, yet agile planning has proven to be efficient enough over and over again.&lt;br /&gt;&lt;br /&gt;Secondly, we are living the era of enlightened experimentation. Prototyping hardware is drop dead cheap and fast nowadays. Buying yourself a status of "I have done that once" instead of "haven't done that before" is as easy as deciding to do so.&lt;br /&gt;&lt;br /&gt;Thirdly, schematics can be estimated with relative complexity.&lt;br /&gt;&lt;br /&gt;Fourthly, Parkinson's law works everywhere where humans are involved. Timeboxing early prototypes will help making the progress reliable and visible. This is however understandably very counter intuitive to the "get it right the first time" camp.&lt;br /&gt;&lt;br /&gt;This is what is called up-front prototyping. In contrast to traditional hardware prototyping trying to validate something at the end, up-front prototyping focuses on learning. We may even know that the prototype will not work on most parts, but we just want a reliable measure of how far are we. It is even advisable to design a prototype to prove just one thing. More than one uncertanty will make the work unnecessarily complex.&lt;br /&gt;&lt;br /&gt;This distinction between the goals of traditional validating and new era learning prototyping has gotten me concidering a new word to replace "prototype". So far the best candidate is 'product'. Using a word product throughout the lifecycle we would realise that this is aiming to production quality, but the maturity of the desing is evolving.&lt;br /&gt;&lt;br /&gt;Of course I'm talking about prototypes that can be assembled within reasonable cycle cost. The bar however is getting lower and lower every day. Interesting exercise is to take your latest embedded development project, draw a bar of development salary cost and a second bar illustrating your prototype cycle cost. You may be surprised how cheap "expensive unnecessary prototyping" is in the big picture.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-1066590331270706179?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/1066590331270706179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=1066590331270706179' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/1066590331270706179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/1066590331270706179'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2008/06/impossible-i-have-never-done-that.html' title='Impossible, I Have Never Done That'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4cBib-pDZN8/SCMuhEabJzI/AAAAAAAAADc/80JY7ma5rTk/s72-c/science_experiment.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-2216300929121312175</id><published>2008-05-06T20:05:00.002+02:00</published><updated>2008-05-06T21:36:07.691+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><title type='text'>At least have a taste</title><content type='html'>We teach our children to at least have a taste before they judge anything as "yak".&lt;br /&gt;&lt;br /&gt;We also teach engineers to try out practices before they judge anything as "yak".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"Just try it, if it does not work - ditch it".&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;TDD (test-driven development) is probably the most difficult technical skill associated with so called agile development especially in constrained embedded environment. It is also probably the most rewarding when in use.&lt;br /&gt;&lt;br /&gt;The problem with TDD is that it has a learning curve. To make things worse the earlier debug-later development model has an unlearning curve. Most of the true benefits can concretely be seen after a fairly long period of time. It is not enough just to have a taste before judging, you actually need a prolonged tryout period. You most likely need some external help in the beginning. Your short term productivity suffers because of learning new skills and solving new kinds of problems.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;You need someone in customer's role who is willing to talk about long term productivity as well.&lt;br /&gt;&lt;br /&gt;Never the less I recommend to just have a taste.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-2216300929121312175?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/2216300929121312175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=2216300929121312175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/2216300929121312175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/2216300929121312175'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2008/05/at-least-have-taste.html' title='At least have a taste'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-5331255144724340377</id><published>2008-04-01T22:40:00.000+02:00</published><updated>2008-04-01T21:32:09.506+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><title type='text'>Just remembered when I was just nodding on embedded TDD</title><content type='html'>Recently I have been talking a lot about embedded TDD to different, mostly experienced, embedded programmers. I thought I would jump right into a bit more advanced issues, to start a discussion, and maybe walk out with few new things myself. After all they were excellent programmers. I didn't want to waste the opportunity to learn.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;During these sessions I have seen a lot of nodding people. I have though that "wow, I'm pretty good at explaining this". I have left with a smile on my face after a huge sense of agreement. I know better now. It's a much longer journey than one day seminar.&lt;br /&gt;&lt;br /&gt;The challenge, or one of them, as I realize now, is that if you give a basic introduction with mickey mouse stuff examples to experienced embedded developers you will be immediatelly shot down with "that won't work in our environment, because [&lt;a href="http://tech.groups.yahoo.com/group/AgileEmbedded/message/191"&gt;choose your favorite item identified on Embedded Agile Yahoo group&lt;/a&gt;]".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;On the other hand if you rush straight into embedded TDD specific stuff, people are going to just nod.&lt;br /&gt;&lt;br /&gt;And this is the other end of the same challenge. They are nodding so that you would go away faster. Not understanding fully is scary for a seasoned engineer who has not opened a book in the past 15 years or so. This nodding experience alone is not going to make anyone start practicing TDD. The best is to give a hands-on experience on TDD itself, show the benefit, and not on mickey mouse stuff but on real deal.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Advice that I'm going to follow is to try to remember when I was also just nodding and how many years, books, articles, conferences, talks, discussions, trials, failures, small successes, and so on, it took for me to get it. And I'm still only beginning to understand TDD.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-5331255144724340377?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/5331255144724340377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=5331255144724340377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/5331255144724340377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/5331255144724340377'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2008/04/just-remembered-when-i-was-just-nodding.html' title='Just remembered when I was just nodding on embedded TDD'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-4010373801778710596</id><published>2008-03-10T05:12:00.001+01:00</published><updated>2008-03-10T07:58:39.860+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Embedded Blogosphere Gets Stronger</title><content type='html'>A while ago we took &lt;a href="http://ng-embedded.blogspot.com/2007/06/embedded-blogosphere.html"&gt;a look &lt;/a&gt;at embedded blogospehere. That sphere is now even stronger - &lt;a href="http://www.objectmentor.com/omTeam/grenning_j.html"&gt;James Grenning&lt;/a&gt; has a &lt;a href="http://www.renaissancesoftware.net/blog"&gt;new blog&lt;/a&gt;. He is "&lt;em&gt;blogging about Agile Development, especially embedded&lt;/em&gt;". That should be interesting enough. There's already two posts about techniques that can be used to test-drive hw driver development (&lt;a href="http://www.renaissancesoftware.net/blog/?p=7"&gt;1&lt;/a&gt;, &lt;a href="http://www.renaissancesoftware.net/blog/?p=8"&gt;2&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4010373801778710596?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4010373801778710596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4010373801778710596' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4010373801778710596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4010373801778710596'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2008/03/embedded-blogosphere-gets-stronger.html' title='Embedded Blogosphere Gets Stronger'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-6798874251528204499</id><published>2008-02-29T04:53:00.003+01:00</published><updated>2008-02-29T04:57:28.405+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><title type='text'>Only few seats left in Agile Finland Seminar</title><content type='html'>&lt;a href="http://agilefinland.com/"&gt;Agile Finland&lt;/a&gt; is organizing yet another &lt;a href="http://events.agilefinland.com/events/show/5"&gt;seminar&lt;/a&gt;. It takes place March 4th in Helsinki. This morning there was only some twenty seats available.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-6798874251528204499?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/6798874251528204499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=6798874251528204499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/6798874251528204499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/6798874251528204499'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2008/02/only-few-seats-left-in-agile-finland.html' title='Only few seats left in Agile Finland Seminar'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-4128972906392269719</id><published>2008-01-30T09:56:00.000+01:00</published><updated>2008-12-09T17:24:39.053+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='organization'/><title type='text'>Islands of Expertise Can Get You Lost</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_4cBib-pDZN8/R6A97cTb1NI/AAAAAAAAADU/I1GM15kbAik/s1600-h/we_are_lost.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5161193264385873106" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" height="168" alt="" src="http://3.bp.blogspot.com/_4cBib-pDZN8/R6A97cTb1NI/AAAAAAAAADU/I1GM15kbAik/s200/we_are_lost.jpg" width="211" border="0" /&gt;&lt;/a&gt;You may be familiar with the following scenario. The embedded software development department has finally launched a large new system. The system obviously immediately gets new feature requests and other modification needs. During the initial development each developer has found a pet part in the overall system. When the improvements/modifications start it is intuitive to assign these smaller projects to a person whose area the change mostly concerns. In this approach we launch several, as many as there are developers, projects to run in parallel. This seems like a natural way to go.&lt;br /&gt;&lt;p&gt;While tempting at the first look, there are several problems in the above scenario. First is the customer’s role. It is difficult enough to get a functioning product owner for one project. Running multiple projects at the same time is ridiculously challenging. If we get one person to act as a customer proxy for all these small projects, this person soon becomes a bottleneck for all these projects. A project needs collaboration with the customer representative, and the sooner we get the feedback the better. The customer needs to be available at all times, and this is easier to achieve for one project at the time.&lt;/p&gt;&lt;p&gt;Second problem follows from the fact that it is rare that all these projects are completely independent. While we think that no one works on more than one project at the time, we actually have created a highly complex hidden multi-project environment. Typically one, or few, developers know something about everything. This means that people that are supposed to be working for their own project need to consult other projects continuously. These people become the bottlenecks for other projects, and their own project is impossible to estimate. As a net result we push all our projects to be more, and more, late without any control to what is going on. &lt;/p&gt;&lt;p&gt;Thirdly, assigning a developer to her previous pet part of the system further develops the specialization in a narrow part of the overall system, creating small islands of expertice. More and more closed silos of expertice emerge in the department. This is a high risk path as in an unfortunate case of loosing that person for one reason, or another we halt the development of that part for unpredictable period of time. Yes, I have heard that documentation should be there for allowing anyone to work on new part. Well, having been in the development game for nearly 15 years I kind of have lost faith to that approach. Maybe if the previous developers have focused their energy mainly on enabling future work –type of documentation. Never the less, safer path is to several developers to know the work. &lt;/p&gt;&lt;p&gt;The fourth problem is the lack of possibility to gain from the superior performance of true teams. Assigning each person to a single small project will at its best only accomplish the sum of each developer in development department. If we are successful in getting a true team to jell we can accomplish a lot higher performance that the sum of team members. This is important especially when the work we are engaged with gets more complex, and needs higher problem solving capability.&lt;/p&gt;&lt;p&gt;Changing to work in teams and in the same part of the system may feel difficult and weird at the beginning. Progress may also appear slow as most of the team members are unfamiliar with the parts of the system they need to work with. It may also take old school engineers by the surprise that they also need the softer skills, interaction and communication. It is crucial that collective ownership is still enforced. Teams have a remarkable capability in finding the ways to work. The practices supporting the work of team will merge rapidly. You don’t have to know everything to start working this way. Just follow the basics; &lt;/p&gt;&lt;ol&gt;&lt;li&gt;do fast paced iterative development, &lt;/li&gt;&lt;li&gt;have reflective retrospectives, and&lt;/li&gt;&lt;li&gt;create open, learning-driven culture.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4128972906392269719?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4128972906392269719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4128972906392269719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4128972906392269719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4128972906392269719'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2008/01/islands-of-expertise-can-get-you-lost.html' title='Islands of Expertise Can Get You Lost'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4cBib-pDZN8/R6A97cTb1NI/AAAAAAAAADU/I1GM15kbAik/s72-c/we_are_lost.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-4516022116114827265</id><published>2008-01-22T05:39:00.000+01:00</published><updated>2008-01-22T05:58:44.949+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><title type='text'>Post leak</title><content type='html'>A &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;friend&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;told&lt;/span&gt; me &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;that&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;one&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;of&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;my&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;drafts&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;leaked&lt;/span&gt; into &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;feed&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;It&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;was&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;probably&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;an&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;user&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;error&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;by&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;yours&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;truly&lt;/span&gt;. I &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;apologize&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;for&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;your&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;incovenience&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;What&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;comes&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;to&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;that&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;draft&lt;/span&gt;, I &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;hope&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;to&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;find&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;time&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;to&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;finish&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;writing&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;about&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;Preston&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;Smith's&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;latest&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;book&lt;/span&gt; "&lt;a href="http://www.amazon.co.uk/Flexible-Product-Development-Building-Changing/dp/0787995843/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=gateway&amp;amp;qid=1200976949&amp;amp;sr=8-1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;Flexible&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;Product&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;Development&lt;/span&gt;&lt;/a&gt;" &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;and&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;agile&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;in&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;non-software&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;development&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;soon&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4516022116114827265?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4516022116114827265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4516022116114827265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4516022116114827265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4516022116114827265'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2008/01/post-leak.html' title='Post leak'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-5320385530753779213</id><published>2008-01-18T09:06:00.000+01:00</published><updated>2008-12-09T17:24:40.212+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NPD'/><title type='text'>Is It Death of Innovation - or Birth of Innovative Modifications</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_4cBib-pDZN8/R5GjWGyMMdI/AAAAAAAAADM/4xlJkcc9fFM/s1600-h/creativity+in+progress.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5157082648489505234" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_4cBib-pDZN8/R5GjWGyMMdI/AAAAAAAAADM/4xlJkcc9fFM/s200/creativity+in+progress.jpg" border="0" /&gt;&lt;/a&gt;In "&lt;a href="http://www.pdma.org/visions/apr05/npd.html"&gt;Your NPD portfolio may be harmful to your business health&lt;/a&gt;" (Cooper, 2005) presents data showing that true new product development has decreased by 43.7% between years 1990-2004. According the same article improvements and modifications to existing products has increased by 80.1% during the same time period.&lt;br /&gt;&lt;br /&gt;September 2007 issue of &lt;a href="http://www.embedded.com/"&gt;Embedded System Design Journal&lt;/a&gt; revealed the &lt;a href="http://www.embedded.com/design/opensource/201803499"&gt;results of reader's vote&lt;/a&gt;. Parts of the results add recent &lt;a href="http://www.embedded.com/design/opensource/201803499?pgno=1"&gt;data&lt;/a&gt; to above observation. According to reader's vote the fraction of "&lt;em&gt;new to the world; a new project from the scratch&lt;/em&gt;" compared to "&lt;em&gt;an upgrade or improvement to an earlier or existing product&lt;/em&gt;" products has decreased from 48% to 39% in the past three years. 79% of those upgrades or improvements included "&lt;em&gt;New or different software features&lt;/em&gt;".&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Do not feel sad if it's been a while since you started to work on a brand new product. You are not alone. Working with new product seems to be getting more and more rare situation. If you get to do this, enjoy while you can. The data shows that there is a fair chance that you will be working with that product for a long time.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;From the agile development point this data shows that it is ever more important to invest in automated regression test suite and refactored, clean, code. It is a safe bet that the software will be under heavy modification.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Very few of us have a chance to work in true high-tech fields which are generally understood to require innovation. Products developed are increasing in size and complexity. Building something from scratch based on a novel idea is most of the times in mega-project category. Mega-projects will take a long time, and thus include a mega-risk. This means that they are not so attractive to management. They do not get the funding so easily. However to me innovation means combining some, typically existing, technologies and ideas in a novel way to create some value to some one. By this definition adding ethernet connection to traditional product, and figuring out a valuable meaning for it, is innovation. We also need innovation in designing and improving the products so that they more easily adapt even more change. The need for innovation has not disappeared, it is just the nature of it that is shifting.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-5320385530753779213?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/5320385530753779213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=5320385530753779213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/5320385530753779213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/5320385530753779213'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/01/is-it-death-of-innovation-or-birth-of.html' title='Is It Death of Innovation - or Birth of Innovative Modifications'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4cBib-pDZN8/R5GjWGyMMdI/AAAAAAAAADM/4xlJkcc9fFM/s72-c/creativity+in+progress.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-1870833413948003715</id><published>2008-01-02T21:04:00.000+01:00</published><updated>2008-01-12T08:13:53.515+01:00</updated><title type='text'>New Year, New Tricks</title><content type='html'>There has been a quiet period again in writing. There's a reason, it's the same as always - I've been busy. Now it is new year, and we kind of think we can have a fresh start. We all know that this is not exactly going to work like that, but this time the new year happens to actually be interesting for me; I have a new employer. I still remained within the same organization, but I'm now working at completely different business unit. I'm still going to work with agile methods, probably more so than ever. Of course it is still embedded stuff, no question, but there are major changes:&lt;br /&gt;&lt;br /&gt;I'm now engaged with much larger systems. &lt;br /&gt;Application changed from lighting control to fire alarm system. &lt;br /&gt;Resource budget has also increased quite a bit. Basic setup now contains:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tw.renesas.com/fmwk.jsp?cnt=h8s_family_landing.jsp&amp;fp=/products/mpumcu/h8s_family/"&gt;Renesas H8&lt;/a&gt; &lt;br /&gt;2M program flash&lt;br /&gt;2M RAM&lt;br /&gt;Commercial RTOS&lt;br /&gt;&lt;br /&gt;As a result I'm learning a bunch of new stuff every day. I have a good feeling about this year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-1870833413948003715?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/1870833413948003715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=1870833413948003715' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/1870833413948003715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/1870833413948003715'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2008/01/new-year-new-tricks.html' title='New Year, New Tricks'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-1059571198119639617</id><published>2007-11-28T21:32:00.000+01:00</published><updated>2007-12-02T07:39:05.812+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>Those Stupid Moments - Round and Round Again with Unit Test Tools</title><content type='html'>It is time to feel stupid again. We have been experimenting TDD of firmware as you know if you have been reading this blog. We started with &lt;a href="http://embunit.sourceforge.net/"&gt;Embedded Unit&lt;/a&gt; framework which I was familiar with. We wanted to make it simpler to be able to run unit tests on target with very low resource budget. Then we realized that &lt;a href="http://atomicobject.com/pages/Embedded+Software"&gt;Unity framework&lt;/a&gt; is exactly that. &lt;a href="http://www.atomicobject.com/"&gt;Atomic Object&lt;/a&gt; has documented their thorough test-driven approach and open sourced many of their made-in-process &lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt; tools. There's a &lt;a href="http://www.methodsandtools.com/archive/archive.php?id=59"&gt;nice article&lt;/a&gt; on the approach in Methods&amp;amp;Tools.&lt;br /&gt;&lt;br /&gt;At first we did not get to use the other Ruby tools from Atomic Object apart Unity unit test framework, but implemented similar, but simpler, in Python. That was pretty much because we did not "get" the tools, being electrical engineers and all.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then we realized that we do not have the time and energy, nor the skills, to develop these tools seriously, but should use existing tools out of the box as much as possible. We started using Atomic Object's Ruby tools. So now the same project is using its third tool set for unit testing.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Rake for building the tests&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I can't do magic with &lt;a href="http://rake.rubyforge.org/"&gt;Rake&lt;/a&gt; - yet. I get the build script to work, but it is structured pretty much like scripting languages I'm used to, and most of the things are more complex than they should. I however have gotten a sight of its power and it is definatelly my choise of build scripting at the moment. The online manual has simple examples of using Rake to build C projects. It makes a good starting point. Advanced examples can be found in Atomic Object's tool distribution. You can check some more in-depth analysis on Rake by Martin Fowler &lt;a href="http://martinfowler.com/articles/rake.html"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Unity unit test framework&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Just above in complexity of pure macro implementation, or standard assert's, is Unity. It's written in C, with few helper macros. It's intelligence is in it's simplicity. There is no support for suites or anything like that. What to build and run can be grouped in build script.&lt;/p&gt;&lt;p&gt;Here's what you need for a unit test in Unity:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color:#990000;"&gt;static&lt;/span&gt;&lt;span style="color:#ff6633;"&gt; void&lt;/span&gt; testAfterAdding4NodesTheSizeOfListShouldBe4&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff6633;"&gt;void&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;)&lt;br /&gt;{&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff6633;"&gt;&lt;br /&gt;  int&lt;/span&gt; a&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#990000;"&gt;&lt;br /&gt;  struct&lt;/span&gt; list list&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;  list_Init&lt;b&gt;&lt;span style="color:#663300;"&gt; (&amp;amp;&lt;/span&gt;&lt;/b&gt;list&lt;b&gt;&lt;span style="color:#663300;"&gt;);&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;  list_AddHead&lt;b&gt;&lt;span style="color:#663300;"&gt; (&amp;amp;&lt;/span&gt;&lt;/b&gt;list&lt;b&gt;&lt;span style="color:#663300;"&gt;, &amp;amp;&lt;/span&gt;&lt;/b&gt;a&lt;b&gt;&lt;span style="color:#663300;"&gt;);&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;  list_AddHead&lt;b&gt;&lt;span style="color:#663300;"&gt; (&amp;amp;&lt;/span&gt;&lt;/b&gt;list&lt;b&gt;&lt;span style="color:#663300;"&gt;, &amp;amp;&lt;/span&gt;&lt;/b&gt;a&lt;b&gt;&lt;span style="color:#663300;"&gt;);&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;  list_AddHead&lt;b&gt;&lt;span style="color:#663300;"&gt; (&amp;amp;&lt;/span&gt;&lt;/b&gt;list&lt;b&gt;&lt;span style="color:#663300;"&gt;, &amp;amp;&lt;/span&gt;&lt;/b&gt;a&lt;b&gt;&lt;span style="color:#663300;"&gt;);&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;  list_AddHead&lt;b&gt;&lt;span style="color:#663300;"&gt; (&amp;amp;&lt;/span&gt;&lt;/b&gt;list&lt;b&gt;&lt;span style="color:#663300;"&gt;, &amp;amp;&lt;/span&gt;&lt;/b&gt;a&lt;b&gt;&lt;span style="color:#663300;"&gt;);&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  TEST_ASSERT_EQUAL&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#999900;"&gt;4&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;,&lt;/span&gt;&lt;/b&gt; list_GetSize&lt;b&gt;&lt;span style="color:#663300;"&gt; (&amp;amp;&lt;/span&gt;&lt;/b&gt;list&lt;b&gt;&lt;span style="color:#663300;"&gt;));&lt;br /&gt;}&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color:#ff6633;"&gt;int&lt;/span&gt;&lt;span style="color:#990000;"&gt; main&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff6633;"&gt;void&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;)&lt;br /&gt;{&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;  Unity&lt;b&gt;&lt;span style="color:#663300;"&gt;.&lt;/span&gt;&lt;/b&gt;TestFile&lt;b&gt;&lt;span style="color:#663300;"&gt; =&lt;/span&gt;&lt;/b&gt; __FILE__&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  UnityBegin&lt;b&gt;&lt;span style="color:#663300;"&gt;();&lt;/span&gt;&lt;/b&gt;&lt;i&gt;&lt;span style="color:#999999;"&gt;&lt;br /&gt;  // RUN_TEST calls runTest&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;  RUN_TEST&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt;testAfterAdding4NodesTheSizeOfListShouldBe4&lt;b&gt;&lt;span style="color:#663300;"&gt;);&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;  UnityEnd&lt;b&gt;&lt;span style="color:#663300;"&gt;();&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt;  return&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt; (&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff6633;"&gt;int&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;)&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#999900;"&gt; 0&lt;/span&gt;&lt;b&gt;&lt;span style="color:#663300;"&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;If you don't use mocking techniques you can just define RUN_TEST macro to call your setUp, test, and tearDown functions. That's it. In full approach it will call your mock module setup and verify functions also.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Cmock - automatic mock file generator&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The other day a colleague interested in TDD'ing C said to me; "the biggest problem to me is that in C we allways need some real friends for a module under test. We do not have real mechanism to support interfaces." Well yes, and no. We concider interface to be the .h file, or in more advanced cases a struct of function pointers. After that we get to automating stuff. Cmock is a tool that generates mock functionality based on .h file. It goes through all .h files in your source directory and generates a corresponding mock.c files. These mocks can be linked together with the module under test and can be teached to expect calls and to return values. Here's an simple example of a function definition and resulting teaching function:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;uint8_t Protection_filter_getState&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt; uint8_t me_index&lt;b&gt;&lt;span style="color:#663300;"&gt;);&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#ff6633;"&gt;&lt;br /&gt;&lt;br /&gt;void&lt;/span&gt; Protection_filter_getState_ExpectAndReturn&lt;b&gt;&lt;span style="color:#663300;"&gt;(&lt;/span&gt;&lt;/b&gt; uint8_t me_index&lt;b&gt;&lt;span style="color:#663300;"&gt;,&lt;/span&gt;&lt;/b&gt; uint8_t toReturn&lt;b&gt;&lt;span style="color:#663300;"&gt;);&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Argent automatic test code generator&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;It's a pain to add mock init and verify functions, as it is to add a call to test function to main function, or just to change a name of test in two different places. That's the pain - Argent is the relief. It uses a simple markup scheme, and interprets your test code in order to automatically insert the calls to appropriate test functions, and mock module initialization and verifications.&lt;/p&gt;&lt;p&gt;//[[$argent require 'cmock_injector.rb'; inject_mocks("lists");$]]&lt;/p&gt;&lt;br /&gt;&lt;p&gt;// Calls to mock objects will be inserted here accoring the included mock headers.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;//[[$end$]]&lt;/p&gt;&lt;p&gt;&lt;br /&gt;//[[$argent require 'generate_unity.rb'; generate_unity();$]]&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;// Calls to test functions (identified by test prefix) will be inserted here.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;//[[$end$]]&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Mock dependency check&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;It's also a pain to add mock dependencies to linker command. Using the same interpreter as argent the mock dependencies can be checked at build time automatically. So all that is needed to take a mock object into build is to have it's header included in the test file.&lt;/p&gt;&lt;p&gt;So that's how far we are now. Now we need some experience to get our routines right.&lt;/p&gt;&lt;p&gt;I quess this is a good example of having courage to improve when we see an opportunity, and strenght to admit being dead wrong - over and over again. This is truly a learning experience.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-1059571198119639617?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/1059571198119639617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=1059571198119639617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/1059571198119639617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/1059571198119639617'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/11/those-stupid-moments-round-and-round.html' title='Those Stupid Moments - Round and Round Again with Unit Test Tools'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-8269216251969292163</id><published>2007-11-28T07:22:00.000+01:00</published><updated>2007-11-28T20:34:53.151+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>CSM Course At Our Premises</title><content type='html'>Jeff Sutherland and Jens Oestergaard are going to give a Certified Scrum Master (CSM) course at our premises on 3.-4. Dec. 2007 in Espoo, Finland. It's an open class, so if you are interested &lt;a href="http://www.scrum.dk/class/show_course/25"&gt;check out&lt;/a&gt; if there's still seats available.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-8269216251969292163?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/8269216251969292163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=8269216251969292163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/8269216251969292163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/8269216251969292163'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/11/csm-course-at-our-premises.html' title='CSM Course At Our Premises'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-4076551706296308348</id><published>2007-11-07T06:48:00.000+01:00</published><updated>2007-11-07T06:51:44.538+01:00</updated><title type='text'>Link: Waterfall Manifesto</title><content type='html'>If you are not completely satisfied with &lt;a href="http://www.agilemanifesto.org/"&gt;agile manifesto&lt;/a&gt; - There is an alternative.&lt;br /&gt;&lt;br /&gt;Check out: &lt;a href="http://www.waterfallmanifesto.org/"&gt;Waterfall Manifesto&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It follows on the lines of popular &lt;a href="http://www.waterfall2006.com/"&gt;Waterfall 2006&lt;/a&gt; Conference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4076551706296308348?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4076551706296308348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4076551706296308348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4076551706296308348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4076551706296308348'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/11/link-waterfall-manifesto.html' title='Link: Waterfall Manifesto'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-3302087802703195525</id><published>2007-10-26T11:34:00.000+02:00</published><updated>2007-10-26T10:37:12.179+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='organization'/><title type='text'>Is There Any Value in Values?</title><content type='html'>Recently I was blessed with an opportunity to facilitate a project retrospective for globally &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;distributed&lt;/span&gt; project at the end of their 9t&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;h&lt;/span&gt; Sprint. Project has development in Europe, China, and Mexico. It is an embedded system development project involving electronics, plastics, mechanics, and firmware development. For all the participants this is the first contact with Agile project management. As a starting exercise we had each participant try to describe the project so far with a single word. The words we got:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;"&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Chido&lt;/span&gt;" (This is something like "cool")&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Good"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Good"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Skilled"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Challenging"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Spectacular"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Fun"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Speed"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Improvement"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Interesting"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"To Be Finished..."&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This was interesting in itself. &lt;/p&gt;&lt;p&gt;An article "&lt;a href="http://www.embedded.com/2000/0004/0004feat1.htm"&gt;Manage Your Embedded Projects&lt;/a&gt;" in &lt;a href="http://www.embedded.com/"&gt;Embedded Systems Design&lt;/a&gt; described developer motivators:&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;"Achievement"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Growth"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Work itself"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Personal Life"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;Technical&lt;/span&gt; supervision"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Advancement"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Relationship with peers"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Recognition"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Salary"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"Responsibility"&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;This data is adapted from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Boehm&lt;/span&gt;, Software Engineering Economics (1981) and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Herzberg&lt;/span&gt;, "One more time: how do you motivate employees?" Harvard Business Review (1987). So it is a bit outdated. The data in the article is used to demonstrate the difference in motivators between developers and managers. Similar findings are presented in &lt;a href="http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B6V0N-448FVP9-1&amp;amp;_user=10&amp;amp;_coverDate=05%2F15%2F2002&amp;amp;_rdoc=1&amp;amp;_fmt=&amp;amp;_orig=search&amp;amp;_sort=d&amp;amp;view=c&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=4197c4c70d75ea12307d432ba41368d0"&gt;Motivators of Software Process Improvement: an analysis of practitioners' views&lt;/a&gt; (2002) and &lt;a href="http://portal.acm.org/citation.cfm?id=945042"&gt;De-motivators for software process improvement: an analysis of practitioners' views&lt;/a&gt; (2003), both by Nathan &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Baddoo&lt;/span&gt; and Tracy Hall.&lt;/p&gt;&lt;p&gt;We can go on to generalize this further, and think about &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;differences&lt;/span&gt; of people and organizations. Value system of people has been recorded and studied for a long time. Von &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Rosenstiel&lt;/span&gt; and Koch (1) reported that the values have changed towards respecting the uniqueness of people, individualism, enjoyment and discipline,self-development and also material values. That is not enjoyment, it is enjoyment &lt;strong&gt;AND&lt;/strong&gt; discipline among other things. To me the "just words" exercise showed that agile work actually &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;builds&lt;/span&gt; on these values; the project was challenging and needed lot of skill, but that just made it interesting and fun - chido. In many cases this however is not following the values of the company, which often are still drawn from old school thinking, like punctuality, hard work, modesty and other values related to duty and acceptance. This discrepancy between values of employee and employer affects the commitment level. Lack of commitment, in turn, reduces employee motivation and effort. &lt;/p&gt;Of course in large organizations values are mostly just lip service, but nevertheless above should lead organizations to rethink the value in their values.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;(1) &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;von&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Rosenstiel&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Lutz&lt;/span&gt; and Koch, Stefan, Change in Socioeconomic Values as a Trigger of organizational Learning, Published in (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Dierkes&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Meinolf&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Berthoin&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Antal&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Ariane&lt;/span&gt;, Child, John, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Nonaka&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Ikujiro&lt;/span&gt;, Handbook of Organizational Learning &amp;amp; Knowledge, Oxford University Press Inc., New York, 2001).&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-3302087802703195525?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/3302087802703195525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=3302087802703195525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/3302087802703195525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/3302087802703195525'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/10/is-there-any-value-in-values.html' title='Is There Any Value in Values?'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-5182399700965333368</id><published>2007-10-02T07:51:00.000+02:00</published><updated>2007-10-02T07:59:56.002+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><title type='text'>Yet Another Agile Seminar in Finland</title><content type='html'>It seems to be the time for another &lt;a href="http://agilefinland.com/"&gt;Agile Finland&lt;/a&gt; Seminar. It is organized by Agile Alliance, Reaktor Innovations, and F-Secure. Guys have set out to break the old record for short notice:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;On October 14th, 2006, I sent an email to the &lt;a href="http://tech.groups.yahoo.com/group/agilefinland/"&gt;AgileFinland Yahoo! group&lt;/a&gt; about the next Agile Seminar taking place only 9 days later. Guess what? Everything went well even with such a short notice so this time we decided to improve and give you an even shorter notice.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;At the time of writing this there are 84 seats available. &lt;a href="http://events.agilefinland.com/events/show/4"&gt;Go get yours...&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-5182399700965333368?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/5182399700965333368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=5182399700965333368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/5182399700965333368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/5182399700965333368'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/10/yet-another-agile-seminar-in-finland.html' title='Yet Another Agile Seminar in Finland'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-5291067019529846745</id><published>2007-09-10T12:55:00.000+02:00</published><updated>2007-09-10T12:56:34.869+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>Agile Embedded Seminar at ELKOM2007</title><content type='html'>On &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;Wednesday&lt;/span&gt; &lt;a href="http://www.tieturi.fi/inenglish/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Tieturi&lt;/span&gt;&lt;/a&gt; organized a mini seminar on Agile and embedded in Helsinki, Finland. The seminar had 3 talks. First &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Pentti&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Virtanen&lt;/span&gt; gave a general background introduction to agile development. This was pretty much your average pure vanilla intro to agile -type presentation. The second part by Tomi &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Juhola&lt;/span&gt; was titled agile embedded in practice. I had high hopes for this as I though I would actually get to hear some new concrete stories from other &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;Finnish&lt;/span&gt; companies practicing agile development. Well, it turned out that the cases presented were first the &lt;a href="http://www.agilerules.com/publications.phtml"&gt;nice work&lt;/a&gt; of &lt;a href="http://www.agilerules.com/aboutus.phtml"&gt;Nancy Van &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Schooenderwoert&lt;/span&gt;&lt;/a&gt;, and the second &lt;a href="http://www.jeffsutherland.com/"&gt;Jeff &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Sutherlands&lt;/span&gt;&lt;/a&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;PatientKeeper&lt;/span&gt;. No new evidence there. The last talk by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Teppo&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Heikurinen&lt;/span&gt; was about testing in agile development. The main topic seemed to be TDD. I have realized that TDD is not so much about testing, but more about design. There was some critique from audience that TDD is just like testing your own work and it has known problems. Yes in that sense it does, but TDD is a design practice which just happens to have a positive side effect of providing the safety net in a form of automated regression tests. At least this is my current understanding. This point was totally left out. Automated acceptance testing was mentioned, but that's about it. Other thing was that the value of TDD was verified with case studies from mainstream programming. I think the biggest issue is to convince the embedded crowd with studies from their own field, since basically people believe that agile has value but are not sure if it can be applied to their domain. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Teppo&lt;/span&gt; mentioned that there are no studies from embedded and TDD, but Nancy's work is just that! I guess he forgot his colleagues presentation.&lt;br /&gt;&lt;br /&gt;The room was full with 60+ listeners, so there is interest towards agile and embedded. I think a lot of people present were not practicing but more curious about what is all that buzz around agile and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;whether&lt;/span&gt; these methods are applicable to embedded (firmware) software development. I hope the event increased the interest even further and in the near future we would get more stories from &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;Finnish&lt;/span&gt; companies practicing agile and embedded. It's nice to notice that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Tieturi&lt;/span&gt; is taking a strong role in promoting these methods for embedded as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-5291067019529846745?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/5291067019529846745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=5291067019529846745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/5291067019529846745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/5291067019529846745'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/09/agile-embedded-seminar-at-elkom2007.html' title='Agile Embedded Seminar at ELKOM2007'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-2578123993762943046</id><published>2007-09-04T19:11:00.000+02:00</published><updated>2007-09-04T18:15:01.907+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>There's More Under Agile Umbrella Than XP and Scrum</title><content type='html'>Just a reminder. While Scrum and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;eXtreme&lt;/span&gt; Programming are without a doubt most widely adapted agile methods there are more. I studied many of them while &lt;a href="http://ng-embedded.blogspot.com/2006/08/agile-methods-and-firmware-development.html"&gt;reviewing&lt;/a&gt; their applicability to firmware development. Rod Coffin and Derek Lane have also done a nice job writing a two part &lt;a href="http://www.devx.com/architect/Article/32761"&gt;article&lt;/a&gt; summarizing seven different methods that fall under the agile umbrella.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.devx.com/architect/Article/32761"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-2578123993762943046?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/2578123993762943046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=2578123993762943046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/2578123993762943046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/2578123993762943046'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/09/theres-more-under-agile-umbrella-than.html' title='There&apos;s More Under Agile Umbrella Than XP and Scrum'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-3099168180449010824</id><published>2007-08-30T18:46:00.000+02:00</published><updated>2007-08-30T18:46:56.169+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Agile2007: Embedded Agile Discovery Session</title><content type='html'>On Wednesday at Agile2007 conference James &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Grenning&lt;/span&gt; and Dan Pierce pulled together a discovery session for Agile and Embedded. The room was packed with people with experience on applying agile methods to embedded software development. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Wel&lt;/span&gt;l, packed in this context means just over a dozen in a conference with 1150 attendees. Anyway. You really should sign up to &lt;a href="http://tech.groups.yahoo.com/group/AgileEmbedded/"&gt;Yahoo Agile Embedded&lt;/a&gt; group to follow the work of others. There are some remarkable people in this small community.&lt;br /&gt;&lt;br /&gt;The discussion had two main topics. First, why embedded agile is getting foothold in the industry as slowly as it is. Several items were identified and the discussion is continued in Yahoo group. Second, that's correct, what else, but agile testing. People had different levels of practical experience, but the main theme was that it is important and it is definatelly possible. On the topic of safety critical embedded software and agile methods, the verdict was that this is not a problem. Safety critical embedded software actually SHOULD be developed using agile methods.&lt;br /&gt;&lt;br /&gt;90 minutes was way too short time for anything concrete, but at least the event proved that agile embedded community exists. Thanks to James and Dan.&lt;br /&gt;&lt;br /&gt;Jack &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Ganssle&lt;/span&gt; was also present and he posted about the conference in his Break Points &lt;a href="http://www.embedded.com/columns/embeddedpulse/201801068;jsessionid=U03RDQELQRLNQQSNDLPSKH0CJUNN2JVN"&gt;column&lt;/a&gt; at embedded.com.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The Agile 2007 conference catered mostly to PC types, but some embedded heads showed up.&lt;br /&gt;&lt;/blockquote&gt;&lt;p&gt;That post also made it to the latest Carnival of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Agilists&lt;/span&gt;. This edition of &lt;a href="http://www.notesfromatooluser.com/2007/08/carnival-of-the.html"&gt;Carnival of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Agilists&lt;/span&gt;&lt;/a&gt; also &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;mentions&lt;/span&gt; Atomic Object's approach to mocking the embedded world.&lt;br /&gt;&lt;br /&gt;Agile embedded gets some visibility.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-3099168180449010824?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/3099168180449010824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=3099168180449010824' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/3099168180449010824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/3099168180449010824'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/08/agile2007-embedded-agile-discovery.html' title='Agile2007: Embedded Agile Discovery Session'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-1734296484629216590</id><published>2007-08-23T12:36:00.000+02:00</published><updated>2007-08-23T12:40:49.774+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Seminar on Agile and Embedded in Helsinki</title><content type='html'>&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span style="BACKGROUND-COLOR: #ffffff"&gt;At &lt;/span&gt;&lt;a href="http://www.finnexpo.fi/exhibition.asp?id=1492"&gt;ELKOM&lt;/a&gt;&lt;/span&gt;&lt;a href="http://www.finnexpo.fi/exhibition.asp?id=1492"&gt;07&lt;/a&gt; fair in Helsinki, Finland, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Tieturi&lt;/span&gt; organizes a free 4h &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;mini seminar&lt;/span&gt; on Agile and embedded system development on 5.9.2007. While it's free you still need to &lt;a href="http://www.tieturi.fi/kurssit/kurssi.asp?area=318767422&amp;course=83915261&amp;amp;open=C117442392"&gt;register&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-1734296484629216590?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/1734296484629216590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=1734296484629216590' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/1734296484629216590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/1734296484629216590'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/08/seminar-on-agile-and-embedded-in.html' title='Seminar on Agile and Embedded in Helsinki'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-2321180611086836679</id><published>2007-08-21T12:10:00.000+02:00</published><updated>2007-08-21T20:44:39.604+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='NPD'/><title type='text'>Does eXtreme Development Exist?</title><content type='html'>&lt;p&gt;I spent last week in Washington D.C. participating &lt;a href="http://www.agile2007.org/"&gt;Agile2007&lt;/a&gt; conference. The conference program was overwhelming with over 300 events. However while we have many implications to agile embedded systems development the agile embedded community is still small. So next time you see an agile conference ad, sign up! &lt;/p&gt;&lt;a href="http://www.adaptivesd.com/"&gt;Jim &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Highsmith&lt;/span&gt;&lt;/a&gt; is a person that has brought together agile community and general product development. I have followed his work and writings closely. He has brought work of people like &lt;a href="http://www.cutter.com/meet-our-experts/thomkes.html"&gt;Stefan &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Thomke&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.europa.com/~preston/preston-smith.htm"&gt;Preston Smith&lt;/a&gt;, and &lt;a href="http://www.roundtable.com/Event_Center/LPDSummit/LPDS07/LPDS07_chairman.html"&gt;Donald &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Rainertsen&lt;/span&gt;&lt;/a&gt; (&lt;a href="http://www.reinertsenassociates.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Reinertsen&lt;/span&gt; &amp; Associates&lt;/a&gt;) to my knowledge. The latter two co-wrote the book &lt;a href="http://www.amazon.co.uk/Developing-Products-Half-Time-Rules/dp/0471292524/ref=pd_bbs_sr_1/203-5453061-5539104?ie=UTF8&amp;s=books&amp;amp;qid=1187715168&amp;sr=8-1"&gt;Developing Products in Half the Time&lt;/a&gt;. In the panel discussion about agile manifesto there was a Q if the panelists believed that values of manifesto are applicable to development outside SW. (This is what tried also!). &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Highsmith&lt;/span&gt; mentioned a pure &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;HW&lt;/span&gt; team that they successfully coached based on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;eXtreme&lt;/span&gt; Programming techniques. In that particular project there was no SW at all!&lt;br /&gt;&lt;p&gt;While browsing for the links, I found out that there is a new book out from Preston Smith:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.co.uk/Flexible-Product-Development-Building-Changing/dp/0787995843/ref=sr_1_3/203-5453061-5539104?ie=UTF8&amp;s=books&amp;amp;qid=1187715250&amp;sr=1-3"&gt;Flexible Product Development: Building Agility for Changing Markets&lt;/a&gt;.   It's on top of my wish list.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-2321180611086836679?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/2321180611086836679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=2321180611086836679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/2321180611086836679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/2321180611086836679'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/08/does-extreme-development-exist.html' title='Does eXtreme Development Exist?'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-8945859290216625600</id><published>2007-08-02T07:50:00.000+02:00</published><updated>2008-12-09T17:24:40.701+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>The Pain of Choosing the Refactoring Tool</title><content type='html'>&lt;a href="http://www.eclipse.org/cdt/index.php"&gt;Eclipse SDK &lt;/a&gt;version 4.0 was released earlier this summer. My hopes were high especially after listening Doug Schaefer, the Eclipse SDK project lead, at ESC2007. I just quickly took a look at the long waited &lt;a href="http://www.refactoring.com/"&gt;refactoring&lt;/a&gt; tools.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5093595824335659634" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_4cBib-pDZN8/RrAWakrwonI/AAAAAAAAABg/rzIg-sBjPeY/s320/eclipse_sdk.png" border="0" /&gt;&lt;br /&gt;Well, it's not as impressive as could, but it's a start. We know that writing refactoring tools for C is difficult, as with the preprocessing a C compiler can be made to understand virtually anything. Doug mentioned their struggle when he &lt;a href="http://ng-embedded.blogspot.com/2006/11/refactoring-for-c.html"&gt;commented&lt;/a&gt; earlier on this blog. Good news is that it's now easier to start using Eclipse for C projects, as it is possible to get Eclipse and SDK in same &lt;a href="http://www.eclipse.org/downloads/"&gt;package&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We have been using &lt;a href="http://www.slickedit.com/"&gt;SlickEdit&lt;/a&gt; for a while. Slick has a bit more refactorings for C - actually all three of them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5093596863717745282" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_4cBib-pDZN8/RrAXXErwooI/AAAAAAAAABo/EyNMlhc7UoM/s320/slickedit.png" border="0" /&gt;Refactoring is an important ingredient in test-driven development and while these tools are not much, they still take the bar for quick refactoring lower. &lt;/p&gt;&lt;p&gt;And that is good news. If you are not able to decide from this myriad of choises, you can choose the middle way - get the SlickEdit plugin for Eclipse.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-8945859290216625600?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/8945859290216625600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=8945859290216625600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/8945859290216625600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/8945859290216625600'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/08/pain-of-choosing-refactoring-tool.html' title='The Pain of Choosing the Refactoring Tool'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4cBib-pDZN8/RrAWakrwonI/AAAAAAAAABg/rzIg-sBjPeY/s72-c/eclipse_sdk.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-6957819672502213438</id><published>2007-07-30T09:32:00.000+02:00</published><updated>2007-07-30T08:01:50.955+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>TDD Tools</title><content type='html'>&lt;p&gt;Using TDD for firmware in C can be quite laborious. Creating a new module requires at least steps like: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Create a test .c file&lt;/li&gt;&lt;li&gt;Add created test to test build&lt;/li&gt;&lt;li&gt;Create implementation .c file&lt;/li&gt;&lt;li&gt;Create implementation .h file&lt;/li&gt;&lt;li&gt;Add implementation to production build&lt;/li&gt;&lt;li&gt;Add implementation to previously created test build&lt;/li&gt;&lt;li&gt;Create &lt;a href="http://xunitpatterns.com/Fake%20Object.html"&gt;fake object&lt;/a&gt;(s) to make the test build to pass&lt;/li&gt;&lt;li&gt;Add fake object files to test build&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;When you adapt the habit of testing everything you quickly get bored repeating these tasks. You end up looking for tools to automate this repeating work. At least this is what you should end up doing, and not giving up. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.atomicobject.com/"&gt;Atomic Object&lt;/a&gt; has created tools in &lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt; to do the trick and some. At &lt;a href="http://www.embedded.com/esc/sv/"&gt;ESC2007&lt;/a&gt; they demonstrated their tools and already gave the tools on CD, but there still was some minor problems getting the tools to build. Now they have released their tools as &lt;a href="http://spin.atomicobject.com/2007/05/31/embedded-systems-conference-2007-sample-project-available/"&gt;open source&lt;/a&gt; and fixed the small problems in the earlier distribution. In Summer Issue of &lt;a href="http://www.methodsandtools.com/index_menu.php"&gt;Methods &amp; Tools&lt;/a&gt; is an article elaborating &lt;a href="http://spin.atomicobject.com/2007/06/26/embedded-development-work-published-in-methods-tools/"&gt;Atomic Objects approach &lt;/a&gt;to agile firmware development infrastructure. Highly recommended starting point, and offers also a path for advanced testing.&lt;/p&gt;&lt;p&gt;Just tried out the package that is now available from their site - Worked like a charm!&lt;/p&gt;&lt;p&gt;Tools do really not need to be complex to make a difference, propably quite the opposite holds. We made file templates and bunch of scripts running sed to replace key words to automate C unit testing steps. We learned this from James Grenning's &lt;a href="http://www.fitnesse.org/FitServers.CppFit.CppTestTools"&gt;CppTestTools&lt;/a&gt;. From Atomic Object's package we adapted their simple unit test framework Unity. We stripped it down even further, and also mixed it up with the idea of different outputters libraries, like in &lt;a href="http://embunit.sourceforge.net/"&gt;Embedded Unit&lt;/a&gt;. We also adapted their idea of automated &lt;a href="http://www.mockobjects.com/"&gt;mock object&lt;/a&gt; creation, but ended up writing similar tool in &lt;a href="http://www.mockobjects.com/"&gt;Python&lt;/a&gt; (basically because we wanted to fully understand what we are doing). All our tools are tuned for our use and constantly evolving, but I think towards similar solution as already in use by Atomic Object, but in step-wise manner. We believe that you need to understand the reason, give it the context, for any new skill or practice in order to make it truly work.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-6957819672502213438?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/6957819672502213438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=6957819672502213438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/6957819672502213438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/6957819672502213438'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/07/tdd-tools.html' title='TDD Tools'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-62060440912634946</id><published>2007-07-11T08:48:00.000+02:00</published><updated>2008-12-09T17:24:40.850+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>Wrap It Thinly</title><content type='html'>The major concern about TDD in firmware development I hear is the hardware relation.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;-"We don't have hardware to run the code in."&lt;br /&gt;-"Every part of the code is hardware dependant."&lt;br /&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;I noticed I wrote about these approximately a year ago for the first time (&lt;a href="http://ng-embedded.blogspot.com/2006/04/firmware-hassle-with-tdd.html"&gt;I&lt;/a&gt;, &lt;a href="http://ng-embedded.blogspot.com/2006/04/firmware-hassle-with-tdd-2.html"&gt;II&lt;/a&gt;, and &lt;a href="http://ng-embedded.blogspot.com/2006/05/firmware-hassle-with-tdd-3.html"&gt;III&lt;/a&gt;). That was more on the theoretical side. This time I have a bit more experience on the subject. We have found &lt;a href="http://alistair.cockburn.us/index.php/Main_Page"&gt;Alistair &lt;/a&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;a href="http://alistair.cockburn.us/index.php/Main_Page"&gt;Cocburn&lt;/a&gt;'s&lt;/span&gt; article on &lt;a href="http://alistair.cockburn.us/index.php/Hexagonal_architecture"&gt;hexagonal architecture&lt;/a&gt; valuable in &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;philosophizing&lt;/span&gt; this issue. Many firmware developers are not familiar with design patterns, but a good starting point is above mentioned article. Writing adapters for your hardware, grouping them to ports, keeping the number of them low, and only allowing them to be responsible for the lowest-level of hardware interfacing, will help you isolate hardware dependant parts. Here is a picture of hexagonal architecture for the case project &lt;a href="http://ng-embedded.blogspot.com/2007/06/test-goal-of-code.html"&gt;we are working on&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5085861630548032914" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_4cBib-pDZN8/RpScNPmavZI/AAAAAAAAABQ/N3QI9MKiS8o/s400/hexa_embedded.png" border="0" /&gt;&lt;br /&gt;Then there is a philosophical issue of testing the adapters, or wrappers. In many cases binary input/output handlings are just like accessors, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;getters&lt;/span&gt; and setters. In TDD literature it is generally agreed that these do not need unit tests. When writing hardware wrappers we need to think a bit harder. We could understand the unit tests for hardware wrappers as our firmware/hardware interface specification. Then for sure it makes sense to write these tests. My thinking goes along with "to be able to judge what to unit test and what not to unit test, you have to be able to unit test everything".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-62060440912634946?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/62060440912634946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=62060440912634946' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/62060440912634946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/62060440912634946'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/07/wrap-it-thinly.html' title='Wrap It Thinly'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4cBib-pDZN8/RpScNPmavZI/AAAAAAAAABQ/N3QI9MKiS8o/s72-c/hexa_embedded.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-4730149934203062824</id><published>2007-06-18T17:51:00.000+02:00</published><updated>2008-12-09T17:24:41.057+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>Test the Goal of the Code</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_4cBib-pDZN8/RnagD4-z4VI/AAAAAAAAAA4/so5zjWh3E6Y/s1600-h/technical.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5077421618602697042" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" height="163" alt="" src="http://3.bp.blogspot.com/_4cBib-pDZN8/RnagD4-z4VI/AAAAAAAAAA4/so5zjWh3E6Y/s200/technical.jpg" width="213" border="0" /&gt;&lt;/a&gt;It is time to get technical again. We have been writing unit tests for some time. We have tried test-driven development. However we have never been disciplined in this. Sometimes we don't write tests at all. Sometimes we don't fix the test suite when code is needed to change. Sometimes we just decide that well, this project or that part of the project does not need tests (typically when it seems to get complex or difficult to test!). We have come to a conclusion that with this approach we will never totally master the skill, and not get the benefit it is supposed to bring.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;We decided to try another approach. We are writing a very real hard-time constrained, very hardware &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;related&lt;/span&gt; code with 100% test-driven development (TDD) in C. A code exists to do the job, but we are gonna completely re-write it. It is originally ported to C from assembly, and this is done maybe four years ago. Since then it has been improved, modified, and adapted to new situations. What has happened is the code has rotten, it is a jungle of conditional compilation, and so forth. So what is better place to do a tiny bit of always refreshing skunk work and completely re-write the whole piece of art?&lt;br /&gt;&lt;br /&gt;Right after we made the decision that we are gonna write EVERYTHING with test-driven development we noticed a change in thinking. We constantly think for the simplest possible thing to do, constantly re-evaluate the module (C file) interfaces and so on. If you are gonna do &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;everything&lt;/span&gt; in this manner, there just is no backdoor for you. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;Another big change was (well, we still need constantly remind ourselves about this) the shift in thinking towards writing the tests as specification. We often ended up thinking about the solution and then writing tests to check the solution. This is maybe caused by the fact that one shot on the code exists and is thoroughly known. However, you will create novel, simple solutions for your tests only if you think about what you want your next small code-to-be do, not how it will do it. Keith Ray has listed &lt;a href="http://homepage.mac.com/keithray/blog/2007/03/27/"&gt;questions&lt;/a&gt; to help you in this.&lt;br /&gt;&lt;br /&gt;Sean &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Shubin&lt;/span&gt; has done a nice work and listed &lt;a href="http://www.xprogramming.com/xpmag/testFirstGuidelines.htm"&gt;first guidelines&lt;/a&gt; to TDD. Again:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;em&gt;Test the goal of the code, not the implementation&lt;/em&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4730149934203062824?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4730149934203062824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4730149934203062824' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4730149934203062824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4730149934203062824'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/06/test-goal-of-code.html' title='Test the Goal of the Code'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4cBib-pDZN8/RnagD4-z4VI/AAAAAAAAAA4/so5zjWh3E6Y/s72-c/technical.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-404517599021382739</id><published>2007-06-09T08:11:00.000+02:00</published><updated>2007-06-09T08:15:19.577+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>Embedded TDD Link List</title><content type='html'>I created a del.icio.us bookmarks for web resources I have found useful for understanding TDD for embedded software.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://del.icio.us/timo.punkka/embedded_tdd"&gt;my del.icio.us bookmarks for embedded TDD&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-404517599021382739?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/404517599021382739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=404517599021382739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/404517599021382739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/404517599021382739'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/06/embedded-tdd-link-list.html' title='Embedded TDD Link List'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-4477464510991518324</id><published>2007-06-07T13:08:00.000+02:00</published><updated>2007-06-07T09:22:23.505+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Embedded Blogosphere</title><content type='html'>Yesterday was yet another record breaking hot day in Helsinki, and what did I do? That's right, searched the net for new embedded slash agile blogs. I periodically do this, but normally I come empty handed. This time I was happily surprised to find &lt;a href="http://www.benoitlavigne.com/blog/"&gt;Low Country Software Ramblings by Benoit &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Lavigne&lt;/span&gt;&lt;/a&gt;. Benoit was also wondering "&lt;a href="http://www.benoitlavigne.com/blog/2006/09/17/am-i-alone/"&gt;Am I alone?&lt;/a&gt;", and later found out that "&lt;a href="http://www.benoitlavigne.com/blog/2007/03/01/i-am-not-alone-after-all/"&gt;I am not alone after all!&lt;/a&gt;"&lt;br /&gt;&lt;br /&gt;Via Benoit's blog I discovered &lt;a href="http://embeddedincork.net/"&gt;Embedded Cork by Ralph &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Depping&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://embeddedgurus.net/"&gt;Embedded Gurus&lt;/a&gt;. Embedded gurus seem to be a bit quiet, but there is some recent stuff as well. Names behind Embedded Gurus group are impressive; Nigel Jones, Michael Barr, Larry &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Mittag&lt;/span&gt;, Mike Anderson, and Miro &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Samek&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Keep in mind the &lt;a href="http://spin.atomicobject.com/embedded-corner/"&gt;Atomic Object Spin Embedded Corner&lt;/a&gt;, and &lt;a href="http://butunclebob.com/"&gt;But Uncle Bob Archive&lt;/a&gt; (James Grenning).&lt;br /&gt;&lt;br /&gt;I linked them in sidebar - give them a look.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4477464510991518324?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4477464510991518324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4477464510991518324' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4477464510991518324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4477464510991518324'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/06/embedded-blogosphere.html' title='Embedded Blogosphere'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-4102278374683949269</id><published>2007-06-01T06:29:00.000+02:00</published><updated>2007-06-27T17:31:06.805+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Story: Spike Up Your Coctail</title><content type='html'>I &lt;a href="http://ng-embedded.blogspot.com/2006/12/weekly-delivery-of-firmware.html"&gt;posted earlier&lt;/a&gt; about short, 6 week, experiment where we had weekly deliveries of firmware and true parallel co-design of plastics, electronics, and software/firmware. I mentioned I would try to write down experience report. Well, it became more like story, and you can find the whole of it &lt;a href="http://users.tkk.fi/~tpunkka/papers/spike_up_your_coctail_100407Punkka.pdf"&gt;here&lt;/a&gt; (pdf).  (LINK CORRECTED 27/6/2007)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Abstract.&lt;/strong&gt; Agile development is a term used for wide variety of lightweight software development methods following shared values1. Many of these methods and practices however can be applied to more general new product development. This paper describes a six week project using some of the practices from agile development. These practices included self organizing team, collective ownership, continuous integration, iterative planning, iteration demos, team retrospective meetings, wall work queue, information radiator etc. The project crystallized a vague idea and a draft of electronics schematic into two fully functioning prototypes. It is shown that meaningful functionality can be developed in just six weeks. This is remarkable when reflected against the effort needed in so called traditional process models with formal analysis/design and theoretical proof of concept with heavy review processes. This is possible because of today’s advanced development tools and prototyping technology. Stefan Thomke (2001) calls this an era of enlightened experimentation. Building the working prototype is more cost effective way of reliable proof of concept. Using this approach already in the fuzzy front-end phase of the project would result in huge savings in overall project schedule and budget. It was also noticed that all stakeholders of this project appreciated the approach and considered it as “common sense”. The positive side effect was the team building effect this period had.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4102278374683949269?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4102278374683949269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4102278374683949269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4102278374683949269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4102278374683949269'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/06/story-spike-up-your-coctail.html' title='Story: Spike Up Your Coctail'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-7704558471626248079</id><published>2007-05-29T20:24:00.000+02:00</published><updated>2007-05-29T19:24:47.841+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Camp Fire</title><content type='html'>A week ago on Tuesday we organized a camp fire event at our premises. Camp fire is an event about sharing agile experiences, and this was second of such events. Roughly twenty people gathered to an auditorium after the office hours. The audience consisted of people from few different organizations inside the company; developers, managers and marketers. We had two talks; &lt;a href="http://softwaredevelopmenttoday.blogspot.com/"&gt;Vasco Duarte&lt;/a&gt; from &lt;a href="http://www.f-secure.com/"&gt;F-Secure&lt;/a&gt; was invited as quest storyteller and Mikko Kaijärvi from Schneider Electric volunteered to share his recent experience.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Vasco's presentation was strong, as usual. He talked about top-down agile adaptation at F-Secure in a very realistic way. He did everything but painted a pretty picture about the journey. This is according to his experience, and literature as well, expected. When everything is laid down on the table, it tends to get ugly from time to time. It was interesting to see how within top-down approach they were able to put the whole organization into "agile rhythm". Vasco mentioned that lack of outside help, or not getting outside support enough, was the main thing he would do differently if need ever arises. Vasco presented also some cold quantitative data from theirs and others agile adaptation to support the reasoning for change. It just happens to look like we have more data supporting agile than sequential models ever had. The presentation and especially the Q&amp;amp;A and discussion parts showed Vasco's deep knowledge and understanding of modern project work.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mikko presented another interesting story in a lively style. His project has applied agile project management and Scrum practices in globally distributed embedded system development project. He estimated that only 5% of development effort is software and firmware, and in addition this is coming from non-agile team. Agile practices were seen as the only option for this project to be successful. The project was started with very vague requirements, barely a vision. Teams were pretty much given. One team in Shanghai, China and another in Monterrey, Mexico, and technology and software development in Europe. The offshore teams had minimal domain knowledge and a huge amount of knowledge needed to be transferred fast. Continuous integration of mechanical and electronics prototypes was a key catalyst for communication. Mikko further identified a clear transition in team behavior from hierarchical - through a single point communication - to self managing emergent behavior actively seeking for best possible solutions in this challenging environment. The project has only been active for five months, but they expect to deliver it in September as originally scheduled. Compared to average project that would be fast according Mikko. Furthermore active early participation of marketing is expected to result in better product as well. This has potential of making yet another example of agile project management practices being succesfull also outside pure software projects.&lt;br /&gt;&lt;br /&gt;As conclusion both talks were excellent, delivered by guys that are experienced in both, the project work and giving presentations. Hopefully people were able to walk out with something new and to be able to connect some more dots in their thinking.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After the official part the discussion continued over snack and refreshments. It was agreed that lot of the agile adaptations outside so called agile homeground is about attitude. It is about the shift in thinking towards the art of possible. Just changing your de facto answer from starting with "Yes, but..." to "Yes, and..." offers a huge potential. Vasco's message was "if you really want it, you can do it." The reward demonstrably is there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-7704558471626248079?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/7704558471626248079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=7704558471626248079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7704558471626248079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7704558471626248079'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/05/camp-fire.html' title='Camp Fire'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-7359541217479992166</id><published>2007-05-21T11:56:00.000+02:00</published><updated>2008-12-09T17:24:41.428+01:00</updated><title type='text'>Enough of processes, let's do labels</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_4cBib-pDZN8/RlBWUEw2dgI/AAAAAAAAAAo/gsVTS4xJihg/s1600-h/labels.jpeg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5066644483667817986" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 224px; CURSOR: hand; HEIGHT: 152px" height="167" alt="" src="http://1.bp.blogspot.com/_4cBib-pDZN8/RlBWUEw2dgI/AAAAAAAAAAo/gsVTS4xJihg/s200/labels.jpeg" width="237" border="0" /&gt;&lt;/a&gt; The title of course follows the Dr.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Dobbs&lt;/span&gt; article by Ivar &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Jacobsen&lt;/span&gt;, Pan-Wei &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Ng&lt;/span&gt;, and Ian Spence "&lt;a href="http://www.ddj.com/dept/architect/198000264"&gt;Enough of Processes, let's do practices Part I&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Venkatesh&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Krishnamurthy&lt;/span&gt; has an article in March 2007 &lt;a href="http://www.agilejournal.com/"&gt;Agile Journal &lt;/a&gt;about &lt;a href="http://www.agilejournal.com/content/view/407/33"&gt;top-down commitment in agile adaptation&lt;/a&gt;. He defines three layers of stakeholders in organization; Sponsors, Mid Level Management, and Development Team. As a conclusion he presents an argument that highest possibility for successful agile adaptation is a right mixture of bottom-up and top-down strategies. Dave Nicolette reviews the article in his post and &lt;a href="http://dnicolet1.tripod.com/agile/index.blog?entry_id=1689873"&gt;shares his experience&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The agile group had started life as a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;skunkworks&lt;/span&gt; operation. When the group was brought back into the IT department formally, IT management dismantled the group and morphed the project process, management tools, and development methods back into conventional ones, although with "agile" labels.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;There are propably a lot of stories like that. Based on the initial moderate success in agile adaptation on the technical level, agile gets to be the new silver bullet and buzz word. A new group of people are expected to automatically form a team, jell, and "just do agile". "Just do agile" means that traditional PM starts using agile jargon without bothering to look what these terms mean, not to mention that she would try to master the agile values, principles and practices, adjust them, and further develop them. "Just do agile" seems like a little bit too thin statement regarding that agile adaptation is described to be a paradigm shift, a completely new philosophy requiring a new mental package. "Just do agile" could be called doing practices, but that would be being nice. Instead it is only doing labels as Dave called the phenomenon. Few years back I was &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;teached&lt;/span&gt; to avoid new labels, like agile ones, when introducing change. Now I have learned that some people only want new labels. That's &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;probably&lt;/span&gt; why the silver bullet business is doing so well. Calling everything agile, Scrum, and/or Sprint is not much of a change, and will not automatically make everything visible, consistent, or reliable. Somehow the point is completely lost. Of course people who expected agile to be a silver bullet or magic wand are going to be disappointed and call agile just another fad. Some people who actual get agile, and understand that it is a bit more than "doing some stuff in 30 or so days and using words like agile, Scrum, and Sprint a lot", are also quite frustrated. Dave's post sets out the more than likely dark symptom of this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;As I write this, just over a year has elapsed since the process of dismantling agile began. Of the 60+ people who were part of the agile group at its peak, only 4 individuals who were in that group are still employed by the company.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;It is equally true according to my experience that commitment from all three categories mentioned by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;mr&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Krishnamurthy&lt;/span&gt; is needed to continue agile adaptation for any prolonged periods . Both orders in which this adaptation happens have been reported as successful, and yes indeed, also as failures. Mixture of both strategies sounds appealing.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Mike Vizdos writes about similar experiences in his &lt;a href="http://www.implementingscrum.com/cartoons/cartoons_files/implementingscrum-20070514.html#unique-entry-id-63"&gt;RIP Scrum &lt;/a&gt;-post and cartoon. He calls this a "Death by a thousand copies".&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-7359541217479992166?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/7359541217479992166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=7359541217479992166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7359541217479992166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7359541217479992166'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/05/enough-of-processes-lets-do-labels.html' title='Enough of processes, let&apos;s do labels'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4cBib-pDZN8/RlBWUEw2dgI/AAAAAAAAAAo/gsVTS4xJihg/s72-c/labels.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-7581034275148903574</id><published>2007-05-09T07:22:00.000+02:00</published><updated>2007-05-09T07:34:16.113+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><title type='text'>Conference Programs Announced</title><content type='html'>Several agile conferences have their programs out.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oresundagile.com/"&gt;Oresund Agile 2007&lt;/a&gt;&lt;br /&gt;Copenhagen, 11-14 June&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xp2007.org/"&gt;XP2007&lt;/a&gt;&lt;br /&gt;Como, 18-22 June&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.agile2007.org/"&gt;Agile2007&lt;/a&gt;&lt;br /&gt;Washington D.C., 13-17 August&lt;br /&gt;&lt;br /&gt;At Agile2007 Dan Pierce and James Grenning are giving a talk "&lt;em&gt;Embedded Agile - Issues and Practices&lt;/em&gt;". Should be valuable, as these two gentlemen have been talking about and practicing agile development in embedded domain for a long time. Of course lots of other interesting stuff as well, 5 days with 8 or more tracks...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-7581034275148903574?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/7581034275148903574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=7581034275148903574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7581034275148903574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7581034275148903574'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/05/conference-programs-announced.html' title='Conference Programs Announced'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-9102900006721927199</id><published>2007-05-02T08:49:00.000+02:00</published><updated>2007-05-02T08:51:22.716+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='organization'/><title type='text'>Edward Bear Does Not Have Time to Improve.</title><content type='html'>In many companies the software assets and practices are left to rot. This indifference to fundamental quality issues is justified with phrases like "we are in a hurry", "we need to create new stuff", and other nonsense. Software is going to require maintenance and further development for its whole life. If you neglect to keep it fit it is going to haunt you back for sure. And it gets worse. If you leave your code base and practices to rot, you will eventually paralyse your whole productiveness. See Ken &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Schwaber&lt;/span&gt; explain it in &lt;a href="http://www.infoq.com/presentations/agile-quality-canary-coalmine"&gt;this&lt;/a&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;InfoQ&lt;/span&gt; video.&lt;br /&gt;&lt;br /&gt;I have used the story about timber jack being so late at his logging site, that he does not have time to sharpen his saw. Some time ago I &lt;a href="http://allankelly.blogspot.com/2007/04/back-from-2007-accu-conference.html"&gt;bumped&lt;/a&gt; into another quote that makes the same point.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;“HERE is Edward Bear, coming downstairs now, bump, bump, bump, on the back of his head, behind Christopher Robin. It is, as far as he knows, the only way of coming downstairs, but sometimes he feels that there really is another way, if only he could stop bumping for a moment and think of it.” &lt;/blockquote&gt;&lt;br /&gt;It really gets painful sometimes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-9102900006721927199?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/9102900006721927199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=9102900006721927199' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/9102900006721927199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/9102900006721927199'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/05/edward-bear-does-not-have-time-to.html' title='Edward Bear Does Not Have Time to Improve.'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-7382724226380836333</id><published>2007-04-19T07:12:00.000+02:00</published><updated>2007-04-19T07:22:52.038+02:00</updated><title type='text'>It's less chaotic today than it was yesterday</title><content type='html'>&lt;a href="http://www.sdtimes.com/index.html"&gt;SD Times&lt;/a&gt; &lt;a href="http://www.sdtimes.com/article/story-20070301-01.html"&gt;reviews&lt;/a&gt; the new, 2006 Chaos Report from the &lt;a href="http://www.standishgroup.com/"&gt;Standish Group&lt;/a&gt;. According the article:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;35 percent of software projects started in 2006 can be categorized as&lt;br /&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;successful&lt;/span&gt;, meaning they were completed on time, on budget and met user&lt;br /&gt;requirements.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I'm not sure if 35 percent is a good number, but it surely beats 16.2 percent in the 1994 report.&lt;br /&gt;&lt;br /&gt;It would be nice to know how the size and complexity of average software project has developed during those 12 years. Maybe that is in the report, we just have to wait a bit more (and get 500$ for the report from somewhere).&lt;br /&gt;&lt;br /&gt;The report lists three reasons for the improvement:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;better project management, &lt;/li&gt;&lt;li&gt;iterative development, and&lt;/li&gt;&lt;li&gt;the emerging Web infrastructure. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I don't know if better project management in this context means agile project management. A quote “Managers have a better understanding of the dynamics of a project.” hints to that direction. Iterative development at least is something that we believe is essential for success, and it is nice to get more and more data to show that. Web infrastructure plays quite insignificant role in firmware development.&lt;/p&gt;&lt;p&gt;If you happen to know recent data about new product development success rate in general, or maybe even embedded software numbers, I would be most interested seeing them. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-7382724226380836333?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/7382724226380836333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=7382724226380836333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7382724226380836333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7382724226380836333'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/04/its-less-chaotic-today-than-it-was.html' title='It&apos;s less chaotic today than it was yesterday'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-6815667873293940530</id><published>2007-04-13T07:55:00.000+02:00</published><updated>2007-04-13T07:57:36.861+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><title type='text'>What does it mean to be agile?</title><content type='html'>OK, the &lt;a href="http://www.esconline.com/"&gt;ESC2007 Conference&lt;/a&gt; is over. Many of the classes and especially Peer Roundtable discussions at the conference, Beer Roundtable discussions at the bars after conference hours, and long flight hours with a colleague, woke several questions, among them:&lt;br /&gt;&lt;br /&gt;-What does it mean to be agile?&lt;br /&gt;-When is an organization/team considered agile?&lt;br /&gt;&lt;br /&gt;In his review (&lt;a href="http://www.inf.vtt.fi/pdf/publications/2002/P478.pdf"&gt;pdf&lt;/a&gt;) Dr. Pekka Abrahamsson showed the software life-cycle support of different agile methods. We know that Scrum does not have any engineering practices described in detail, but focuses on project management. That's why it has been adapted also outside software development. It is simple. This is why majority of the so called agile adaptations at least say they follow Scrum. As have we; we have used it with cross-disciplined embedded system development teams to develop a complete embedded system as fast paced iterative development. I have also written in &lt;a href="http://ng-embedded.blogspot.com/2006/09/taming-big-animal-agile-intervention.html"&gt;my paper&lt;/a&gt; how I saw reflective iterative development as a tool itself for figuring out what practices you need. This said I share Simon Baker's post&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.think-box.co.uk/blog/2007/04/are-you-missing-point.html"&gt;Are you missing the point?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As long as you share the underlying values of agile development, and keep the obvious practices like short iteration, demonstrable progress and retrospectives, you are going to figure out the rest of it - &lt;s&gt;or die trying&lt;/s&gt; or at least you figure out the need for something and can start looking. If your survival anxiety in your current environment is high, but you have juniority prevailing in your team, you can still gain a lot from practicing "just" Scrum. Scrum puts the basic structure in place with its simple rules and in my experience this is an immediate relief to chaos. This does not mean that it is easy. It will make everything visible; good and bad and needs a lot of discipline and nurturing.&lt;br /&gt;&lt;br /&gt;With this approach, you being now out of the chaos and anarchy, it is time to bring in the engineering practices. Our case has shown that they are needed. We have experienced with eXtreme Programming (XP) practices; collocated team, pair programming (development), test driven development, coding standard, metaphor, and so on. We have seen the value in them, but not been able to actually master them in firmware or embedded system development in order to put the discipline into using them. Still we feel that we gain from practicing Scrum, and agile development as learning-driven thinking. This is the very reason why we still keep learning more skills and practices.&lt;br /&gt;&lt;br /&gt;Are we agile? I do not know.&lt;br /&gt;&lt;br /&gt;If your environment is functioning and open minded, and you have master mind developers in your team, why not go full blown XP right away? We have manifested that those practices are of high value, but they are hard for beginners. We now have also hard evidence to support the effectiveness of these methos (see for example the &lt;a href="http://www.agile-itea.org/public/news.php"&gt;AGILE-ITEA project&lt;/a&gt;, run by the same Dr. Pekka Abrahamsson btw). It may be that with this approach you find out that you need some project management practices from Scrum. Who knows.&lt;br /&gt;&lt;br /&gt;I wrote in &lt;a href="http://ng-embedded.blogspot.com/2006/08/agile-methods-and-firmware-development.html"&gt;my original paper about agile firmware development&lt;/a&gt; that lot of the agile programming practices for firmware development need innovative thinking. I think last week at the ESC2007 I met some of the people capable doing this. In the front line James Grenning from &lt;a href="http://www.objectmentor.com/"&gt;Object Mentor&lt;/a&gt; and Mike Karlesky and Greg Williams from &lt;a href="http://www.atomicobject.com/"&gt;Atomic Object&lt;/a&gt;. They have put these engineering practices into full use (also) in low end firmware projects. They are also willing to share their knowledge by publishing their tools as open source, and having discussions about the methods. Maybe we even become clients of these guys some day... Furthermore during the classes and discussions I got the feeling that a fair amount of people are actually practicing.&lt;br /&gt;&lt;br /&gt;We have just scratched the surface, but after last week I believe that it is time to put some serious effort into agile programming practices, and actual firmware development. After all that is where we started this journey. It just kind a slipped into system development.&lt;br /&gt;&lt;br /&gt;Are we agile after adapting these practices? I do not know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-6815667873293940530?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/6815667873293940530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=6815667873293940530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/6815667873293940530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/6815667873293940530'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/04/what-does-it-mean-to-be-agile.html' title='What does it mean to be agile?'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-3703988290332037821</id><published>2007-03-26T07:24:00.000+02:00</published><updated>2007-03-26T07:39:39.965+02:00</updated><title type='text'>The Vacation is Over - Officially</title><content type='html'>It's Monday. Back at work after seven weeks of vacation. It actually feels almost as bad as it sounds. I did spend over six weeks in Thailand. Lots of sun, beer, good food, nice people, and of course &lt;a href="http://en.wikipedia.org/wiki/Technical_diving"&gt;technical diving&lt;/a&gt;. Technical diving is a nicely balancing hobby for an agile proponent, as it relies so much in up-front plan:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Plan the dive, dive the plan. &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;There are very few situations where this rule may be broken. It is the opposite to my beliefs in new product development. I'm a strong believer in:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Plans are useless, planning is everything. &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;This Friday I'm off to &lt;a href="http://www.embedded.com/esc/sv/"&gt;Embedded Systems Conference 2007&lt;/a&gt;. We're planning to get together with people from &lt;a href="http://tech.groups.yahoo.com/group/AgileEmbedded/"&gt;AgileEmbedded Yahoo group&lt;/a&gt; during the conference. If you you are planning to be in San Jose keep an eye for that. If you are not planning to be there, it's better get started.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-3703988290332037821?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/3703988290332037821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=3703988290332037821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/3703988290332037821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/3703988290332037821'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/03/vacation-is-over-officially.html' title='The Vacation is Over - Officially'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-9034779935520698340</id><published>2007-02-27T08:36:00.000+01:00</published><updated>2007-02-27T08:44:58.122+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><title type='text'>ESC2007</title><content type='html'>&lt;a href="http://www.esconline.com/"&gt;Embedded Systems Conference 2007&lt;/a&gt; in San Jose, California, is having some interesting events. &lt;a href="http://www.objectmentor.com/omTeam/grenning_j.html"&gt;James &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Grenning&lt;/span&gt;&lt;/a&gt; is giving &lt;a href="https://www.cmpevents.com/ESCw07/a.asp?option=G&amp;V=3&amp;amp;id=249428"&gt;several sessions&lt;/a&gt; and people from &lt;a href="http://www.atomicobject.com/"&gt;Atomic Object&lt;/a&gt; are coming to tell about their low level system agile testing methods.&lt;br /&gt;&lt;br /&gt;The  best news is that right after my vacation (still have some three to four weeks to burn) I'm going to attend the conference with a colleague. Talking about nice return to work! I'll try to have energy to write something about the conf'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-9034779935520698340?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/9034779935520698340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=9034779935520698340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/9034779935520698340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/9034779935520698340'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/02/esc2007.html' title='ESC2007'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-1293290260170619611</id><published>2007-02-12T07:27:00.000+01:00</published><updated>2007-02-12T07:16:25.039+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='organization'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Scrum Simulation Rocks</title><content type='html'>Last week I gave an introduction to agile development and Scrum for a global project organization in Shanghai, China. After the lunch on first day it was time for 59min Scrum simulation. I have written about bad experiences when trying to achieve too much, so it was back to the basics.&lt;br /&gt;&lt;br /&gt;There were participants from Finland, China, and Mexico. We used the product backlog for Family Cookbook. Only addition to original Scrum simulation was the use of relative complexity estimations on product backlog items. This time it worked. Estimating the tasks in numbers gave birth to discussion on whether something is simple, or not, not just dividing an item into tasks. Some items were also soon identified to be too large to fit in one 14 minutes Sprint. Team was &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;immediately&lt;/span&gt; forced to seek for collaboration with Product Owner.&lt;br /&gt;&lt;br /&gt;On retrospective the main thing experienced was the time pressure. I do not see this as a bad thing, it is just the beginning of understanding the discipline needed for time-boxed development. Time pressure will decrease when the team builds trust and improves estimating.&lt;br /&gt;&lt;br /&gt;Everyone valued the exercise a&lt;a href="javascript:void(0)" onclick="return false;" tabindex="7"&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;nd though that it was a good lesson. I might &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;consider&lt;/span&gt; adding a separate &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;exercise&lt;/span&gt; for planning and estimating before the final Scrum Simulation. With this early experience I do not think that I will ever try &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;meaningful&lt;/span&gt; work inside the simulation again. The difference was so clear.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-1293290260170619611?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/1293290260170619611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=1293290260170619611' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/1293290260170619611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/1293290260170619611'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/02/scrum-simulation-rocks.html' title='Scrum Simulation Rocks'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-3970864124742122716</id><published>2007-02-02T22:39:00.000+01:00</published><updated>2007-02-02T22:47:58.432+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>TDD'ing State Machines</title><content type='html'>I'm an electrical engineer. Everything in programming seems to be very very hard for me. Last week I spent 40 hours in aeroplanes, so I had some quality reading time. I did read &lt;a href="http://www.amazon.co.uk/Agile-Estimating-Planning-Robert-Martin/dp/0131479415/sr=8-1/qid=1170191155/ref=sr_1_1/026-5346183-5429231?ie=UTF8&amp;s=books"&gt;Agile Estimating and Planning &lt;/a&gt;and &lt;a href="http://www.amazon.co.uk/Test-Driven-Development-Addison-Wesley-Signature/dp/0321146530/sr=1-1/qid=1170191183/ref=sr_1_1/026-5346183-5429231?ie=UTF8&amp;amp;s=books"&gt;Test-Driven Development&lt;/a&gt; from cover-to-cover. I had quickly gone through them earlier, but this was enlightening experience.&lt;br /&gt;&lt;br /&gt;First of all, I have told that we have been trying to figure out effective TDD for our FW development. To be honest, we've struggled. We wrote tests for a state machine implementation. We expected the tests to be run in certain sequence, and that the state was always left where it should be after the test. We of course ended up in lot of rework on test code when our state machine design emerged. We thought that we need to design the state machine up-front in order to be able effectively write tests for it. This did not sound like test driven development at all. This required some more thorough thinking.&lt;br /&gt;&lt;br /&gt;So back to my flight. Kent Beck writes that coupling is bad also between tests. A test should leave the system as it was. So writing unit tests in the same sequence as you expect your state machine to work does not seem like a right thing to do. You should be able to execute individual tests and to change the order of individual tests. So instead we are starting to recognize a single state as something to test.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.quantum-leaps.com/home/about.htm"&gt;Ph.D. Miro Samek&lt;/a&gt; &lt;a href="http://www.amazon.co.uk/Practical-Statecharts-C++-Introduction-Programming/dp/1578201101/sr=8-1/qid=1170450979/ref=sr_1_1/202-3971196-4283848?ie=UTF8&amp;s=books"&gt;writes about &lt;/a&gt;state machines being a killer app for function pointers. He further defines a design pattern for state chart implementation. Our state chart interface has become to be something like:&lt;br /&gt;&lt;br /&gt;construct()&lt;br /&gt;dispatch(event)&lt;br /&gt;&lt;br /&gt;construct is self explaining and dispatch dispatches new event. We have specific event &lt;em&gt;tick&lt;/em&gt; that gives resource time to state machine every 10ms (based on our 50Hz mains). We could also implement a timeout as OS service, and not to have local counters for timed events. Anyway, if we implement each state as a function as Mr. Samek proposes, and we hold our state as a function pointer we can write&lt;br /&gt;&lt;br /&gt;dispatch( me, event )&lt;br /&gt;{&lt;br /&gt;me.myState(event);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;We get rid of cryptic switch -structures. This solution helps us to unit test each state as a function with natural feel.&lt;br /&gt;&lt;br /&gt;I'm going to write some benchmarking code to see the actual overhead, but at the moment I like this idea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-3970864124742122716?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/3970864124742122716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=3970864124742122716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/3970864124742122716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/3970864124742122716'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/02/tdding-state-machines.html' title='TDD&apos;ing State Machines'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-168751356437517284</id><published>2007-01-28T15:09:00.000+01:00</published><updated>2007-01-28T15:27:30.551+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Driving Embedded Firmware C Project on CruiseControl</title><content type='html'>I finally made it. A dedicated page for configuring &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt; for embedded firmware C project. It combines some of my earlier posts, but also tries to add detail. Take a look &lt;a href="http://users.tkk.fi/~tpunkka/pages/fw_cruisecontrol/"&gt;here&lt;/a&gt;, and tell me what is missing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-168751356437517284?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/168751356437517284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=168751356437517284' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/168751356437517284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/168751356437517284'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/01/driving-embedded-firmware-c-project-on.html' title='Driving Embedded Firmware C Project on CruiseControl'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-7799151157764997144</id><published>2007-01-22T13:43:00.000+01:00</published><updated>2007-01-23T20:45:56.429+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='organization'/><title type='text'>Book: The Tipping Point</title><content type='html'>I finally read &lt;a href="http://www.amazon.co.uk/Tipping-Point-Little-Things-Difference/dp/0349113467/sr=8-1/qid=1169200552/ref=pd_ka_1/026-5346183-5429231?ie=UTF8&amp;s=books"&gt;The Tipping Point&lt;/a&gt;, by &lt;a href="http://www.gladwell.com/"&gt;Malcolm Gladwell&lt;/a&gt;. The Tipping Point tells us how little things can make a huge difference whether an idea will success or not. Will it tip or not. Examples and cases presented by Mr. Gladwell range from young men's high suicide rate in Micronesia, via fashion trends, cigarettes, children's tv shows, all the way to warning mechanism in surroundings of Boston about the upcoming attack of Brittish in 1775.&lt;br /&gt;&lt;br /&gt;Malcolm explains, in a very understandable way, the law of the few; Mavens, Connectors and Salesmen. These are the three different personalities needed for a new idea to become epidemical. He talks about social epidemics. He then further explains the concept of stickiness factor, and the power of context.&lt;br /&gt;&lt;br /&gt;What has this to do with things we are interested in? &lt;a href="http://www.craiglarman.com/"&gt;Graig Larman &lt;/a&gt;calls introduction of agile development methods a &lt;a href="http://en.wikipedia.org/wiki/Paradigm_shift"&gt;paradigm shift&lt;/a&gt;. When you introduce an idea of this magnitude, what you are doing, is asking people to unlearn much of their current knowledge. We of course know that the old knowledge is by no means useless, we just need to update it with some new knowledge. Never the less, introduction of agile methods and lean thinking is a novel idea in most organizations. The theories and concepts presented in The Tipping Point help us to understand the process of making this change and getting it to last. I have learned a long time ago, that it is not enough that you understand, you need to get others to get it as well.&lt;br /&gt;&lt;br /&gt;Let's see what these theories in my opinion tell about agile intervention. In many cases, especially early in the decade, agile methods were introduced to organizations by younger champion developer, usually from position of no power. They just happened to be interested in learning and continuous improvement. They read a lot, they go to conferences, and they talk to fellow craftsmen. Furthermore they like to analyse the new things, and then tell these ideas to others. They are the Mavens. If things go nicely they will meet a Connector at some point. Connector knows everyone inside the organization, and knows who to talk to in order to get the change started. After the initial start, to make the idea of agile development really tip, we need extra ordinary people called Salesmen. They are the ones that can translate the ideas and experience reports so that we can communicate with lots of different people in order to get real structural changes to happen in an organization. Agile coaches and consultants are a good bet at this if you can not find someone in your organization fast enough. On top of that agile is a nice sounding word, and it can help to increase the Stickiness Factor. The first agile pilot project should have importance and wide enough commitment, creating the right Context for the intervention to tip.&lt;br /&gt;&lt;br /&gt;Other literature (for example &lt;em&gt;Pinchot, Intrapreneuring: Why You Don't Have to Leave Corporation to Become an Entrapreneuer&lt;/em&gt;, 1985) documents the same kind of process. Terms used elsewhere include 'Brain workers' who have the intellectual ability to think in novel ways and are able to argue their decisions. 'Intrapreneuers' are daring in using their vision of innovation regardless of for example political resistance. 'Gate keepers' have strong contacts to the organization's environment and have communicational competencies for making initiatives 'digestible' for the organization. Further a top management mentors, godfathers, or corporate angles are terms used for expressing the need for management commitment in such a venture.&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;Look at the world around you. It may seem like an immovable, implacable place. It is not. With the slightest push - in just the right place - it can be tipped.&lt;br /&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-7799151157764997144?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/7799151157764997144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=7799151157764997144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7799151157764997144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7799151157764997144'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/01/book-tipping-point.html' title='Book: The Tipping Point'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-721495326680355110</id><published>2007-01-09T07:42:00.000+01:00</published><updated>2007-01-09T07:49:20.444+01:00</updated><title type='text'>Blogger is out of beta</title><content type='html'>&lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt;  is out of beta and I thought I &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;finally&lt;/span&gt; upgrade my template. I'm glad I did, managing the appearance of my blog is now a breeze.&lt;br /&gt;&lt;br /&gt;I did some rework on links as well. If you are interested in agile development methods for embedded software and firmware you should join the discussion at &lt;a href="http://tech.groups.yahoo.com/group/AgileEmbedded/"&gt;Agile Embedded Yahoo Group&lt;/a&gt;. There are some brilliant people in the group, but the group could use some additional energy.&lt;br /&gt;&lt;br /&gt;I seem to have few regular readers, so if this change messed up your reader - my sincere apologies. This was just something that needed to be done at some point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-721495326680355110?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/721495326680355110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=721495326680355110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/721495326680355110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/721495326680355110'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2007/01/blogger-is-out-of-beta.html' title='Blogger is out of beta'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-749492862660939525</id><published>2006-12-30T07:12:00.000+01:00</published><updated>2006-12-30T10:29:09.832+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><title type='text'>Weekly Delivery of Firmware</title><content type='html'>Yesterday we finished a six week project developing technology platform for User Interface innovation using some practices familiar from agile methods. The project delivered two different configurations of home automation user interface device; one for wall mounting and one for remote control. Some facts:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Vague or missing requirements&lt;/li&gt;&lt;li&gt;New 8-bit &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0" onclick="BLOG_clickHandler(this)"&gt;microcontroller&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Lots of new sensor technology&lt;/li&gt;&lt;li&gt;New embedded firmware team of 3+1, including one consultant (in house)&lt;/li&gt;&lt;li&gt;Some drivers developed by outsourcing&lt;/li&gt;&lt;li&gt;Final project consisted of 20&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)"&gt;KLOC&lt;/span&gt;&lt;/span&gt; of firmware C source (bad meter, but...)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Some findings after initial reflection:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Weekly delivery (not release) of firmware is possible, at least in some cases.&lt;/li&gt;&lt;li&gt;Short term goals and daily Scrum meeting effectively work as motivators, and enforce full learning and getting things &lt;a href="http://www.jamesshore.com/Agile-Book/done_done.html"&gt;done done&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;There is not small enough project to &lt;strong&gt;not&lt;/strong&gt; use version control and continuous integration (we had no way to have common version control with outsourced team: large org, IT, you know the drill...)&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2" onclick="BLOG_clickHandler(this)"&gt;HW&lt;/span&gt;&lt;/span&gt; evolved from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3" onclick="BLOG_clickHandler(this)"&gt;microcontroller&lt;/span&gt;&lt;/span&gt; starter kit to final electronics via several bread board mocks and one halfway PCB prototype. This causes extra assembly work when looked at the surface, but this overhead is by far overcome by enabling the concurrent engineering instead of waiting for final version. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The last point holds only if all the disciplines work as One Team.&lt;/p&gt;&lt;p&gt;We did not have cross-functional team as we did in &lt;a href="http://ng-embedded.blogspot.com/2006/09/taming-big-animal-agile-intervention.html"&gt;earlier larger experiment&lt;/a&gt;. Schematics, PCB layout and mechanics were developed concurrent, but they were not part of the team - nor did they follow any of so called agile practices. Firmware planning was tried to be synchronized with deliveries from other disciplines. In several occasions these deliveries were delayed, and a common goal needed for a team to actually be a team was somewhat &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;missing&lt;/span&gt;. This is where I would like to do things differently if I was to do it all over again.&lt;/p&gt;&lt;p&gt;Occasionally we heard sentences like "If everything goes smoothly we will be ready on &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;Tuesday&lt;/span&gt;, but we will be ready at least on &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;Thursday&lt;/span&gt;". At this year's Agile Business Conference in London David Taylor (&lt;a href="http://www.nakedleader.com/"&gt;The Naked Leader&lt;/a&gt;) said "Don't have a plan B because you will always achieve it." Just guess if the delivery was on &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;Tuesday&lt;/span&gt; or &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;Thursday&lt;/span&gt; - or &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;Friday&lt;/span&gt;?&lt;/p&gt;&lt;p&gt;The whole project was started by extremely vague idea. In few hours we worked out initial backlog and a delivery (release) plan based on simple themes. From that point on plan, design and requirements emerged during the 6 weeks nicely synchronized with weekly demonstration of prototype and new planning session. This experiment supports the belief that good people can work this way, and that we truly live the era of enlightened experimentation. We believe that we could not have performed any better with thorough analysis, design, and specification phases - at least not to cover the cost of them. During the development there were several points where it was not possible to proceed as we had thought. A comprehensive plan based on these initial assumptions would have failed miserably, and the time creating them would have been wasted. In this project the whole team worked out an alternative solution, adjusted the next week's plan, and the project was fine...&lt;/p&gt;&lt;p&gt;I will write an experience report and hopefully make it available here.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-749492862660939525?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/749492862660939525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=749492862660939525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/749492862660939525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/749492862660939525'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/12/weekly-delivery-of-firmware.html' title='Weekly Delivery of Firmware'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-1419988616694033389</id><published>2006-12-21T16:47:00.000+01:00</published><updated>2008-12-09T17:24:41.912+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='organization'/><title type='text'>Skunk Work Is Not A Longterm Solution</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_4cBib-pDZN8/RYonDKV4CCI/AAAAAAAAAAY/XvUhpGAmwIM/s1600-h/skunk.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5010860470672295970" style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://1.bp.blogspot.com/_4cBib-pDZN8/RYonDKV4CCI/AAAAAAAAAAY/XvUhpGAmwIM/s200/skunk.jpg" border="0" /&gt;&lt;/a&gt;In her "&lt;a href="http://www.rallydev.com/documents/AgileWaterfallCoop-Sliger.pdf"&gt;The Agile/Waterfall Cooperative&lt;/a&gt; (pdf)" presentation &lt;a href="http://www.rallydev.com/services.jsp"&gt;Michele Sliger&lt;/a&gt; summaries three modes in which agile team can work in a waterfall organization; SWAT team, Skunk Work, and stealth agile. I agree that applying just some agile practices can benefit your work. This is pretty much what we are doing at the moment, but I do not see this as sufficient long term solution - if it is only in team's sphere or just above. All three forms of team work can of course be used. &lt;em&gt;SWAT teams&lt;/em&gt; can go parallel even in more wide spread agile organization. &lt;a href="http://en.wikipedia.org/wiki/Skunk_works"&gt;&lt;em&gt;Skunk work&lt;/em&gt; &lt;/a&gt;probably, and hopefully, always exists in large organization - it's fun. If you are working as &lt;em&gt;stealth agile&lt;/em&gt;, and avoiding radars by not communicating to the top management, you are not going to be able to fully harness the power. You need to inform top management that you are doing things differently and communicate your need for changes. They probably will not get it, but what they do get - is success. So it is fine and in most cases necessary to fly low at first, but after certain point it is not satisfying anymore to work as a shadow system, because you know you are constrained by the legitimacy structures, and these structures are holding back you and your learning. &lt;p&gt;The rest of the presentation has also good ideas, and based on my experience these ideas hold in reality as well.&lt;/p&gt;&lt;em&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;SWAT team –&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;outside the domain of the process police, brought in on projects that are in trouble. Agility is prized in this situation. They take over however – they don’t work in a cooperative mode.&lt;/em&gt; &lt;/p&gt;&lt;em&gt;&lt;strong&gt;Skunk Works - &lt;/strong&gt;“a small group of experts who drop out of the mainstream company operations in order to develop some experimental technology or new application in secrecy or at speed, unhampered by bureaucracy or the strict application of regulations.” Sanctioned and protected by management, these teams are rare. This formation however, prevents the headaches involved in org structure, project approval hoops, portfolio metrics and management, budget calls, and other bureaucratic nightmares. &lt;/em&gt;&lt;p&gt;&lt;strong&gt;Stealth Agile&lt;/strong&gt; – As Jim Highsmith once said in response to a question about how to sell agile to upper management – don’t. “They don’t know what you’re doing anyway.” Do as much agile as you can where you can. Some benefit is better than none at all. &lt;/p&gt;&lt;/blockquote&gt;&lt;/em&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-1419988616694033389?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/1419988616694033389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=1419988616694033389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/1419988616694033389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/1419988616694033389'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/12/skunk-work-is-not-longterm-solution.html' title='Skunk Work Is Not A Longterm Solution'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4cBib-pDZN8/RYonDKV4CCI/AAAAAAAAAAY/XvUhpGAmwIM/s72-c/skunk.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-4899575024175944313</id><published>2006-12-18T10:45:00.000+01:00</published><updated>2006-12-18T10:52:58.911+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Link: Scrum and XP from the Trenches</title><content type='html'>No matter if you are developer, PM, or CIO and you don't know what agile/Scrum/XP is, you are thinking about applying, or you are already practicing - you should check out "&lt;a href="http://www.crisp.se/henrik.kniberg/ScrumAndXpFromTheTrenches.pdf"&gt;Scrum and XP from the Trenches&lt;/a&gt; (pdf)" report from &lt;a href="http://blog.crisp.se/henrikkniberg/"&gt;Henrik Kniberg&lt;/a&gt;. Henrik describes how they applied Scrum and XP practices in real life and presents the adaptation needed in this situation. Excellent Writing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4899575024175944313?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4899575024175944313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4899575024175944313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4899575024175944313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4899575024175944313'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/12/link-scrum-and-xp-from-trenches.html' title='Link: Scrum and XP from the Trenches'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-5261629013703595566</id><published>2006-12-14T16:14:00.000+01:00</published><updated>2006-12-15T14:10:55.835+01:00</updated><title type='text'>main_theOneAfterFinal.c</title><content type='html'>Today I happened to see a file name with word 'new' on it on a presenter's computer. I was slightly amused because of my history. I can still see the old version naming convention in many "shared team folders" in our server. It goes something like this:&lt;br /&gt;&lt;br /&gt;original&lt;br /&gt;new&lt;br /&gt;latest&lt;br /&gt;final&lt;br /&gt;&lt;br /&gt;I have been using version control system since my first university years (some fifteen years ago) and throughout my professional life. First it was just an advanced XCOPY method putting released versions of one man projects into the system, but about three years it has been collective code ownership and at least daily update-commit (we use &lt;a href="http://en.wikipedia.org/wiki/Concurrent_Versions_System"&gt;CVS&lt;/a&gt;) cycles from the beginning of development. Lately we have adapted continuous integration and automated regression (&lt;a href="http://www.testingreflections.com/node/view/3226"&gt;confirmation&lt;/a&gt;) testing as &lt;a href="http://ng-embedded.blogspot.com/2006/10/bubble-bubble_06.html"&gt;you know&lt;/a&gt;. Currently we are looking for ways to add some automated acceptance and system testing as well.&lt;br /&gt;&lt;br /&gt;During the past couple of years I have had a pleasure to work with software developed outside our own company. Quality of source varies a lot of course, but it is striking that version control typically is not even mentioned. In some occasions lately the software was delivered as zip'd folder with a version number in folder name - at that point I was happily surprised by that! Embedded firmware domain - based on my biased observations - walks some 10 years behind the mainstream software industry. The wide lack of basic discipline, version control, proves the point. I'm glad that I work in a department where I can say that developers would never go back working without version control.&lt;br /&gt;&lt;br /&gt;I found &lt;a href="http://tech.groups.yahoo.com/group/info-cvs/message/9404"&gt;this&lt;/a&gt; Yahoo group message - nostalgic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-5261629013703595566?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/5261629013703595566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=5261629013703595566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/5261629013703595566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/5261629013703595566'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/12/maintheoneafterfinalc.html' title='main_theOneAfterFinal.c'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-600806665652480770</id><published>2006-12-09T07:19:00.000+01:00</published><updated>2008-12-09T17:24:42.263+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>The Lenghty Debugging Phase</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_4cBib-pDZN8/RXewZT7BMsI/AAAAAAAAAAM/UM0BIe3AmaQ/s1600-h/tdd+embedded+c.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5005663459736629954" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 203px; CURSOR: hand; HEIGHT: 238px" height="218" alt="" src="http://4.bp.blogspot.com/_4cBib-pDZN8/RXewZT7BMsI/AAAAAAAAAAM/UM0BIe3AmaQ/s200/tdd+embedded+c.png" width="183" border="0" /&gt;&lt;/a&gt;To give embedded firmware TDD a kick start we have had two sessions with a colleague. During these sessions we have created scripts to automate the unit test structure and build process and discussed how the make as thin wrappers for HW as possible. However we learned also other valuable lessions during these sessions. Lesson number one is the "debugging phase" being so strongly in our domain culture. We often hear a firmware developer saying, "&lt;em&gt;well, it takes couple of days to implement it, but you can never tell how long the debugging is going to take&lt;/em&gt;". Of course debugging phase is where all the firmware heros truly shine. That's another unfortunate culture issue in firmware development.&lt;br /&gt;&lt;br /&gt;In our first session we ran into problem of not getting one test running. Immediately we started debugging. Printf's fly in here and there (as an advanced host run I/O twist). The change to this mode was so rapid, that neither of us realized what is going on until later. After some 30 minutes(!) we recognized that we are not moving, but just desperarately experimenting with printf's, and it hit us; we have not changed our behavior as we were supposed to. We should have picked a more simple thing to implement. When we realized we can not chew what we had chosen, we should have started all over again with simpler thing.&lt;br /&gt;&lt;br /&gt;It is our belief that by doing TDD for firmware we should get rid of, or at least dramatically reduce, the debugging phase and thus create an atmosphere of success, and improve the reliability of estimates.&lt;br /&gt;&lt;br /&gt;This type of sessions are great tools for learning. I strongly share Michael Harmer's opinion on &lt;a href="http://www.nerdherding.net/2006/12/03/the-training-course-scam/"&gt;The Training Course Scam&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-600806665652480770?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/600806665652480770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=600806665652480770' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/600806665652480770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/600806665652480770'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/12/lenghty-debugging-phase.html' title='The Lenghty Debugging Phase'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4cBib-pDZN8/RXewZT7BMsI/AAAAAAAAAAM/UM0BIe3AmaQ/s72-c/tdd+embedded+c.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-7609988241956166741</id><published>2006-11-30T19:34:00.000+01:00</published><updated>2006-11-30T19:37:11.447+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><title type='text'>Ken Schwaber on Quality of Code</title><content type='html'>Ken's &lt;a href="http://www.infoq.com/presentations/agile-quality-canary-coalmine"&gt;presentation&lt;/a&gt; "A Canary in a Coal Mine" at Agile2006 conference is available via InfoQ. Ken talks about quality and the danger of Scrum teams droping quality issues to get higher velocity and to be sure to hit the date. He calls this a re-definition of "done", or "somewhat done". We have manifested an increasing technical debt in our iterative work. So in the last project we were putting more focus to acceptance testing inside each sprint and introduced something we called "cross-testing". This means that other pair needed to test the feature implemented by other pair in order to claim feature "done". Embedded firmware systems need a lot of manual acceptance testing (at least our current practice) and it is easy to get slobby testing your own work over and over again.&lt;br /&gt;&lt;br /&gt;Was the technical debt there because of Scrum? Well, no - it was made visible by Scrum and the team was able to decide to do something about it early enough.&lt;br /&gt;&lt;br /&gt;----&lt;br /&gt;&lt;br /&gt;Ken's another &lt;a href="http://video.google.com/videoplay?docid=-7230144396191025011"&gt;speech&lt;/a&gt; about Scrum is available at Google Video. (You will find out that Scrum works with idiots as well)&lt;br /&gt;&lt;br /&gt;I &lt;a href="http://ng-embedded.blogspot.com/2006/10/jeff-sutherland-on-roots-of-scrum.html"&gt;posted&lt;/a&gt; about Jeff Sutherland's &lt;a href="http://www.infoq.com/presentations/The-Roots-of-Scrum"&gt;Scrum speech&lt;/a&gt; earlier. It is also available via InfoQ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-7609988241956166741?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/7609988241956166741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=7609988241956166741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7609988241956166741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/7609988241956166741'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/11/ken-schwaber-on-quality-of-code.html' title='Ken Schwaber on Quality of Code'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-4441452273254685662</id><published>2006-11-26T15:28:00.000+01:00</published><updated>2006-11-26T15:34:16.778+01:00</updated><title type='text'>XP2007 Conference Web Page</title><content type='html'>XP2007 &lt;a href="http://www.xp2007.org/"&gt;web page&lt;/a&gt; is open. The conference will be held on June 18-22.2007 in Lake Como, Italy.&lt;br /&gt;&lt;br /&gt;In the scope of conference is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Embedded software (e.g., SW/HW co-design) and Agile SW development &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;...among of course other interesting stuff. Hopefully we see some papers in this domain as well. I attended the conference this year in Oulu, Finland, and if next year's event is anything like that - I can highly recommend attending. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-4441452273254685662?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/4441452273254685662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=4441452273254685662' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4441452273254685662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/4441452273254685662'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/11/xp2007-conference-web-page.html' title='XP2007 Conference Web Page'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-8599665473038641167</id><published>2006-11-21T11:48:00.000+01:00</published><updated>2006-11-21T11:55:07.131+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>NPD in General With Agile and DSDM</title><content type='html'>Iterative and incremental development ideas have been presented for general new product development (NPD) for years. I'm interested in agile methods (as in software development context) because they give a philosophy behind and lots of ideas how to actually do this. It is of course also because of extremely active and powerfull community. Ideas of using these methods and practices in NPD in general have been presented by &lt;a href="http://www.adaptivesd.com/"&gt;Jim Highsmith &lt;/a&gt; (&lt;a href="http://www.amazon.com/Agile-Project-Management-Innovative-Development/dp/0321219775/sr=1-1/qid=1164104197/ref=pd_bbs_sr_1/104-9855840-3000719?ie=UTF8&amp;s=books"&gt;Agile Project Management&lt;/a&gt;), Preston G. Smith (&lt;a href="http://www.amazon.com/Developing-Products-Half-Time-Rules/dp/0471292524"&gt;Developing Products in Half the Time&lt;/a&gt;), and many more. Both of above mentioned can be contacted via &lt;a href="http://www.cutter.com/index.html"&gt;Cutter Consortium&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now there is something new coming up. At London &lt;a href="http://www.agileconference.org/"&gt;Agile Business Conference 2006 &lt;/a&gt; few weeks back the &lt;a href="http://www.dsdm.org/"&gt;DSDM consortium &lt;/a&gt;talked about the future of the DSDM framework. &lt;a href="http://www.dsdm.org/version4/2/public/"&gt;DSDM version 4.2&lt;/a&gt; has been open for online viewing since this year.  They are going to publish a new version of framework in Spring 2007. This new version is supposed to be more general and not specifically targeted to just software development. It was also presented that DSDM can be seen as a wrapper for models like Scrum and XP for use in enterprise environment. It's a bit too structured to my tasting,  but very well worth to check out when available. It may also become more open.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-8599665473038641167?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/8599665473038641167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=8599665473038641167' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/8599665473038641167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/8599665473038641167'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/11/npd-in-general-with-agile-and-dsdm.html' title='NPD in General With Agile and DSDM'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-6309687127965297293</id><published>2006-11-17T06:54:00.000+01:00</published><updated>2006-11-17T07:02:23.581+01:00</updated><title type='text'>Risky Business</title><content type='html'>It has been identified that the biggest risks in project work concern management and marketing. Yet, in most environments we only concentrate on technology risks. Agile, incremental and iterative, development is also often assumed to be risky. By changing the way of thinking about risk, people would see that iterative risk management is a proactive way to tackle all aspects of risk. A very simple way.&lt;br /&gt;&lt;br /&gt;1. Management risks - just fund the project for the time zone you are comfortable&lt;br /&gt;&lt;br /&gt;2. Marketing risks - use the first possible release to test the waters&lt;br /&gt;&lt;br /&gt;3. Technology risks - use the effort early to tackle any technological uncertainties that traditionally are left lurking until the (assumed) end of the project&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/risk_play_at_own.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 214px; CURSOR: hand; HEIGHT: 164px" height="182" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/risk_play_at_own.jpg" width="236" border="0" /&gt;&lt;/a&gt;The status quo practice is quite different. We take huge risks by starting a megaproject, for example estimated to 5 calendar years, based on a business case. Everyone knows that business case targeted five years from now is pure speculation. In the global markets it's a very expensive speculation by the way. Based on this speculation management needs to make a decision for funding a five year project. Their natural reaction to tackle the risk is to review the project mercilessly. We can be sure that changes to project requirements, technology and scope will happen. We have this heavy review practice going on making the project move even more slowly. More time means more changes, more changes mean more reviews - are you starting to get the picture?&lt;br /&gt;&lt;br /&gt;Most of us see this everyday. How do we try to fix it? Naturally by reviewing. Because? That's what we allways do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-6309687127965297293?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/6309687127965297293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=6309687127965297293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/6309687127965297293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/6309687127965297293'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/11/risky-business.html' title='Risky Business'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-116317199278566582</id><published>2006-11-10T15:57:00.000+01:00</published><updated>2006-11-10T18:06:54.356+01:00</updated><title type='text'>Refactoring for C</title><content type='html'>&lt;a href="http://www.slickedit.com/"&gt;SlickEdit&lt;/a&gt; is a commercial &lt;strike&gt;compiler&lt;/strike&gt; source editor that many people speak highly about. I thought I will give it a spin and downloaded the trial version. Their web page describes "&lt;a href="http://www.slickedit.com/content/view/353/217"&gt;cool features&lt;/a&gt;", but for some reason refactoring is not listed. Anyway the product has capabilities for refactoring several languages, and few quick refactorings (based on tagging instead of parsing) even for C; extract method, rename, modify parameter list, and replace literal with constant. At least for simple code they all seem to work. SlickEdit is also available as Eclipse plugin. I only tested the own IDE version.&lt;br /&gt;&lt;br /&gt;You can find out the reason why there are not so many refactoring tools for C from MS and doctorate thesis by &lt;a href="https://netfiles.uiuc.edu/garrido/www/index.html"&gt;Alejandro Garrido&lt;/a&gt;. They are available via &lt;a href="https://netfiles.uiuc.edu/garrido/www/CRefactory.html"&gt;this&lt;/a&gt; site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-116317199278566582?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/116317199278566582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=116317199278566582' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116317199278566582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116317199278566582'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/11/refactoring-for-c.html' title='Refactoring for C'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-116265672555253758</id><published>2006-11-04T17:09:00.000+01:00</published><updated>2006-11-04T17:12:05.566+01:00</updated><title type='text'>Web Page for Embedded Unit</title><content type='html'>Embedded Unit (embUnit)  is an unit test framework for embedded C systems. It now has a &lt;a href="http://embunit.sourceforge.net/"&gt;simple web page &lt;/a&gt;with manual. It is not pretty, but it is something.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-116265672555253758?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/116265672555253758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=116265672555253758' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116265672555253758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116265672555253758'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/11/web-page-for-embedded-unit.html' title='Web Page for Embedded Unit'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-116210280793894856</id><published>2006-10-29T07:01:00.000+01:00</published><updated>2006-10-29T07:44:08.480+01:00</updated><title type='text'>One Team, but just a team</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/light_and_shadow.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/light_and_shadow.jpg" border="0" /&gt;&lt;/a&gt;One of the agile development practices is One Team, meaning that team as a whole takes the responsibility. When agile team is formed by a bottom-up initiative, it will soon face the problems of limited sphere. Most of the problems in projects are not related to design, technology or engineering practices. These are the only ones that the team is capable to fix quickly through iterations and reflective retrospectives. After fixing its own sphere, the team hits the wall when working in the shadow of a large organization. This can be a stressfull situation as everything is starting to be &lt;a href="http://ng-embedded.blogspot.com/2006/10/we-can-see-clearly-now.html"&gt;crystal clear&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Afterall One Team is just a team.&lt;br /&gt;&lt;br /&gt;Last monday at &lt;a href="http://events.agilefinland.com/events/show/3"&gt;Agile Seminar Helsinki&lt;/a&gt; Heimo Laukkanen presented that the whole organization needs to be agile in order to fully harness the power. He talked about IT governance, but even faster you will notice need for change in leadership styles, design review practices, personnel development, project planning (not plan), marketing involvement, and a lot more. Even while the agile development only in technical level may be rewarding, seeing clearly the dysfunction of standard organizational processes (so called best practices) and structures will hammer down the gained team spirit and motivation, eventually forcing it back to old ways of working.&lt;br /&gt;&lt;br /&gt;Changing these processes and structures in a large organization may be impossible with bottom up approach. Large organization has a whole process department to take care of the process. It would take a complete paradigm shift to access this process. What makes this hard is that this department is not rewarded based on project success or revenue, but the success of current paradigm - from the administrative perspective. Admitting that a paradigm shift is actually needed might feel like a failure of the department.&lt;br /&gt;&lt;br /&gt;This is one of the reasons why agile interventions often fail, the rest of the organization fails to learn fast enough.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-116210280793894856?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/116210280793894856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=116210280793894856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116210280793894856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116210280793894856'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/10/one-team-but-just-team.html' title='One Team, but just a team'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-116193066990666331</id><published>2006-10-27T07:51:00.000+02:00</published><updated>2006-10-27T08:58:54.926+02:00</updated><title type='text'>Come Again, What's the Cost and Overhead?</title><content type='html'>I've been implementing object-based stuff in C for embedded firmware with passing an index parameter to an array of structs, like I tried to explain &lt;a href="http://ng-embedded.blogspot.com/2006/05/objects-and-firmware-basics.html"&gt;here&lt;/a&gt;. Yesterday I remembered &lt;a href="http://www.embedded.com/columns/showArticle.jhtml?articleID=192503623"&gt;an article about pointer-less C&lt;/a&gt; in &lt;a href="http://www.embedded.com/"&gt;Embedded System Design&lt;/a&gt; and thought I will give it a couple minutes more. The article gives some ideas how to make pointers safer to use and talks about the cost and benefit of using pointers. I'm not saying anything about the value of article itself, but I got curious. I took our simple switch debounce filter routine which is used a lot, and which is typically the only one that actually implements multiple objects at run time. It uses the &lt;em&gt;me&lt;/em&gt; index as parameter for two functions. I quickly modified the code so that both functions take in a pointer to a struct instead of simple&lt;em&gt; unsigned char&lt;/em&gt;. I compiled both versions for Microchip 16F876A (8-bit uC) and got surprised. The pointer version used over 30% less code memory than the index version, reducing the ROM image from above 300 words to below 200 words. I then compiled the source files to give me the assy listing, and below are the results that I found for a simple function that just sets some members of a struct. Because of werd mechanism of indirect addressing in PIC micros, the pointer is actually passed just as a 8-bit register. Word of caution; we have experienced problems when passing pointers and enabling optimization with Hi-Tech compilar for PIC micros, that is another reason why we have avoided this.&lt;br /&gt;&lt;br /&gt;The lesson; while I do believe in intuition for great solutions, it is worth to challenge your beliefs every once in a while.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pointer version:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;&lt;FONT size=1&gt;&lt;br /&gt;&lt;br /&gt;    30  0764             _Cbutton_construct&lt;br /&gt;    31                   ;button_ptr.c: 27: me-&gt;debounceCounter = 0;&lt;br /&gt;    32                          &lt;br /&gt;    33  0764  0084       movwf fsr&lt;br /&gt;    34                            &lt;br /&gt;    35  0765  1383       bcf 3,7&lt;br /&gt;    36  0766  0180       clrf 0&lt;br /&gt;    37                   ;button_ptr.c: 28: me-&gt;level = !1;&lt;br /&gt;    38                          &lt;br /&gt;    39                   ; _me assigned to ?a_Cbutton_construct+0&lt;br /&gt;    40  0000             _Cbutton_construct$me set &lt;br /&gt;                         ?a_Cbutton_construct+0&lt;br /&gt;    41                   ;_me stored from w&lt;br /&gt;    42  0767  1283       bcf status,5&lt;br /&gt;    43  0768  1303       bcf status,6 ;carry unused&lt;br /&gt;    44  0769  00A8       movwf (((?a_Cbutton_construct+0)))&lt;br /&gt;    45  076A  0A28       incf (((?a_Cbutton_construct+0))),w&lt;br /&gt;    46  076B  0084       movwf fsr&lt;br /&gt;    47                            &lt;br /&gt;    48  076C  1383       bcf 3,7&lt;br /&gt;    49  076D  0180       clrf 0&lt;br /&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Index version:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;&lt;FONT size=1&gt;&lt;br /&gt;&lt;br /&gt;    30  06F6             _Cbutton_construct&lt;br /&gt;    31                   ;button.C: 27: theButton[meIndex].&lt;br /&gt;                         debounceCounter = 0;&lt;br /&gt;    32                          &lt;br /&gt;    33                   global _theButton&lt;br /&gt;    34                   ; _meIndex assigned to ?a_Cbutton_construct+0&lt;br /&gt;    35  0000             _Cbutton_construct$meIndex set ?a_&lt;br /&gt;                         Cbutton_construct+0&lt;br /&gt;    36                   ;_meIndex stored from w&lt;br /&gt;    37  06F6  1283       bcf status,5&lt;br /&gt;    38  06F7  1303       bcf status,6 ;carry unused&lt;br /&gt;    39  06F8  00A8       movwf (((?a_Cbutton_construct+0)))&lt;br /&gt;    40  06F9  0828       movf (((?a_Cbutton_construct+0))),w&lt;br /&gt;    41  06FA  00F0       movwf btemp&lt;br /&gt;    42  06FB  1003       bcf status,0&lt;br /&gt;    43  06FC  0DF0       rlf btemp&lt;br /&gt;    44  06FD  1003       bcf status,0&lt;br /&gt;    45  06FE  0D70       rlf btemp,w&lt;br /&gt;    46  06FF  3E20       addlw ((_theButton))&lt;br /&gt;    47  0700  0084       movwf fsr&lt;br /&gt;    48                            &lt;br /&gt;    49  0701  1383       bcf 3,7&lt;br /&gt;    50  0702  0180       clrf 0&lt;br /&gt;    51                   ;button.C: 28: theButton[meIndex].level = !1;&lt;br /&gt;    52                          &lt;br /&gt;    53  0703  0828       movf (((?a_Cbutton_construct+0))),w&lt;br /&gt;    54  0704  00F0       movwf btemp&lt;br /&gt;    55  0705  1003       bcf status,0&lt;br /&gt;    56  0706  0DF0       rlf btemp&lt;br /&gt;    57  0707  1003       bcf status,0&lt;br /&gt;    58  0708  0D70       rlf btemp,w&lt;br /&gt;    59  0709  00F0       movwf btemp&lt;br /&gt;    60  070A  0A70       incf btemp,w&lt;br /&gt;    61  070B  3E20       addlw ((_theButton))&lt;br /&gt;    62  070C  0084       movwf fsr&lt;br /&gt;    63                            &lt;br /&gt;    64  070D  1383       bcf 3,7&lt;br /&gt;    65  070E  0180       clrf 0&lt;br /&gt;&lt;/FONT&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-116193066990666331?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/116193066990666331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=116193066990666331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116193066990666331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116193066990666331'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/10/come-again-whats-cost-and-overhead.html' title='Come Again, What&apos;s the Cost and Overhead?'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-116161099061092435</id><published>2006-10-23T15:23:00.000+02:00</published><updated>2006-10-23T15:49:10.526+02:00</updated><title type='text'>Code smells - just refactor</title><content type='html'>As we &lt;a href="http://ng-embedded.blogspot.com/2006/10/we-can-see-clearly-now.html"&gt;identified&lt;/a&gt;, agile development puts more demand to top quality source code than we (firmware developers) are used to. Actually agile development only makes the bad quality visible to larger crowds. This fact fairly quickly takes us searching for new practices like refactoring. You can find about it in &lt;a href="http://www.refactoring.com/"&gt;Refactoring&lt;/a&gt; site, or better yet from &lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt;'s &lt;a href="http://www.amazon.co.uk/Refactoring-Improving-Design-Existing-Technology/dp/0201485672/sr=8-1/qid=1161610264/ref=pd_bbs_sr_1/026-5346183-5429231?ie=UTF8"&gt;book&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There is a &lt;a href="http://wiki.java.net/bin/view/People/SmellsToRefactorings"&gt;nice table&lt;/a&gt; by Gene Garcia available as a summary of code smells and refactorings. Take a look, this stuff applies to firmware as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-116161099061092435?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/116161099061092435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=116161099061092435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116161099061092435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116161099061092435'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/10/code-smells-just-refactor.html' title='Code smells - just refactor'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-116133827771749832</id><published>2006-10-20T07:26:00.000+02:00</published><updated>2006-10-20T12:31:24.576+02:00</updated><title type='text'>We Can See Clearly Now</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/magnifying.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 129px; CURSOR: hand; HEIGHT: 155px" height="148" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/magnifying.jpg" width="136" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The beauty of Scrum, or agile development in general, is that it gets everything laid down in front of everyone. Everything, everyone,  good and bad.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Developers learn to understand what 'done' really means, and how much effort it takes to get things done. It demands discipline not to have technical, or administrative in large organization, debt increase increment after increment, but actually do all-at-once, in parallel. At the same time the satisfaction and enjoyment from accomplishing meaninfull work is immediately rewarding.&lt;br /&gt;&lt;br /&gt;2. Stakeholders outside the team start to understand the unpredictable nature of new product development, but also the true capablities of reliable development. Customers understand that they do not need to ask for everything in order to get at least some. Common understanding of business value (benefit) starts to emerge between the customer and developers. Managers and project managers see the effect of meaningless deliverables and context switching. Managers start to understand just to stay out of the way and remove obstacles.&lt;br /&gt;&lt;br /&gt;Trust begins to take form.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-116133827771749832?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/116133827771749832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=116133827771749832' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116133827771749832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116133827771749832'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/10/we-can-see-clearly-now.html' title='We Can See Clearly Now'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-116109402259433665</id><published>2006-10-17T16:05:00.000+02:00</published><updated>2006-10-17T16:07:02.606+02:00</updated><title type='text'>Agile Seminar Helsinki, Fall 2006</title><content type='html'>Title says it all. &lt;a href="http://events.agilefinland.com/events/show/3"&gt;Check it out&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-116109402259433665?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/116109402259433665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=116109402259433665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116109402259433665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116109402259433665'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/10/agile-seminar-helsinki-fall-2006.html' title='Agile Seminar Helsinki, Fall 2006'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-116075455231507207</id><published>2006-10-13T17:41:00.000+02:00</published><updated>2006-10-13T17:49:12.326+02:00</updated><title type='text'>Jeff Sutherland on the Roots of Scrum</title><content type='html'>A &lt;a href="http://www.infoq.com/presentations/The-Roots-of-Scrum"&gt;presentation&lt;/a&gt; about the roots of Scrum is available via&lt;a href="http://www.infoq.com/"&gt; infoQ&lt;/a&gt;. A 60-minute presentation held at &lt;a href="http://www.jaoo.dk/conference/"&gt;JAOO conference&lt;/a&gt; about everything and some behind the &lt;a href="http://www.controlchaos.com/"&gt;Scrum&lt;/a&gt; as we know it today from &lt;a href="http://www.jeffsutherland.com/"&gt;Dr. Jeff Sutherland&lt;/a&gt;, the original creator of the framework. Without the need to travel. Great.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-116075455231507207?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/116075455231507207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=116075455231507207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116075455231507207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116075455231507207'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/10/jeff-sutherland-on-roots-of-scrum.html' title='Jeff Sutherland on the Roots of Scrum'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-116010978332732358</id><published>2006-10-06T06:42:00.000+02:00</published><updated>2006-10-06T06:43:41.946+02:00</updated><title type='text'>Bubble, Bubble...</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/lava%20lamps.png"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/lava%20lamps.png" border="0" /&gt;&lt;/a&gt; We have had our &lt;a href="http://ng-embedded.blogspot.com/2006/07/embunit-translators-for-cruisecontrol_26.html"&gt;continuous integration&lt;/a&gt; server running for a while. At this point we thought that some not so serious step should be taken. It was time to implement the &lt;a href="http://www.pragmaticautomation.com/cgi-bin/pragauto.cgi/Monitor/Devices/BubbleBubbleBuildsInTrouble.rdoc"&gt;lava lamps&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Being a firmware shop we obviously could not go the normal way with X10 publisher. We used our own shutter relay prototype to drive the two lamps. The relay module is normally driven with &lt;a href="http://en.wikipedia.org/wiki/I%C2%B2C"&gt;I2C&lt;/a&gt; -bus, but we simply used the data and clock signals to transfer pulses from pc's serial bus. The I2C bus is running at +3VDC level, so we needed to shift the 12v levels found on serial port to that level. Don't worry, the +3VDC level is isolated, so '&lt;em&gt;it should be fairly safe&lt;/em&gt;'. If you want help with similar hw setup, feel free to contact us.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/relay.0.png" border="0" /&gt;&lt;br /&gt;All we did from that point was a couple of simple python scripts to drive a short pulse on DTR or RTS according the build result. This was easy with a little help from &lt;a href="http://pyserial.sourceforge.net/"&gt;pySerial&lt;/a&gt; module. Shutter relay connected the lamps according the last detected pulse. These scripts are called via &amp;ltexecute&amp;gt-publisher in CruiseControl's config.xml.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;ltonfailure&amp;gt&lt;br /&gt;  &amp;ltexecute command="python pulse_rts.py"&amp;gt&lt;br /&gt;  &amp;lt/execute&amp;gt&lt;br /&gt;&amp;lt/onfailure&amp;gt&lt;br /&gt;&lt;br /&gt;&amp;ltonsuccess&amp;gt&lt;br /&gt;  &amp;ltexecute command="python pulse_dtr.py"&amp;gt&lt;br /&gt;  &amp;lt/execute&amp;gt&lt;br /&gt;&amp;lt/onsuccess&amp;gt&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Next steps: &lt;p&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Write an actual publisher for DTR/RTS signals in Java &lt;/li&gt;&lt;li&gt;Use our rf comm devices to transfer the build status &lt;/li&gt;&lt;li&gt;Hook another lamp to indicate the ongoing build process&lt;/li&gt;&lt;li&gt;Write a &lt;a href="http://www.echelon.com/"&gt;LonWorks&lt;/a&gt; publisher similar to X10&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mark.michaelis.net/Blog/"&gt;Mark Michaelis &lt;/a&gt;described their similar &lt;a href="http://mark.michaelis.net/Blog/BuildStatusUsingLavaLampsByKenNichols.aspx"&gt;effort&lt;/a&gt;. They are a bit ahead of us.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-116010978332732358?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/116010978332732358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=116010978332732358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116010978332732358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/116010978332732358'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/10/bubble-bubble_06.html' title='Bubble, Bubble...'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115967648288310259</id><published>2006-10-01T06:15:00.000+02:00</published><updated>2006-10-01T06:21:22.893+02:00</updated><title type='text'>Immediate Payoff</title><content type='html'>&lt;a href="http://www.kenandsarah.co.uk/default.aspx"&gt;Ken Hughes &lt;/a&gt;shared his &lt;a href="http://www.kenandsarah.co.uk/2006/09/29/SCRUM+After+3+Months+1+Product+Release+Cycle.aspx"&gt;story&lt;/a&gt; about their first three months with Scrum development. Findings are all too familiar. There is also a nice example of excel sheet working as backlog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115967648288310259?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115967648288310259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115967648288310259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115967648288310259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115967648288310259'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/10/immediate-payoff.html' title='Immediate Payoff'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115950675268282909</id><published>2006-09-29T06:54:00.000+02:00</published><updated>2006-09-29T07:26:41.563+02:00</updated><title type='text'>Certified Scrum Master</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/csmlogo.gif"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/csmlogo.gif" border="0" /&gt;&lt;/a&gt; I had been thinking about taking the 2-day &lt;a href="http://www.scrumalliance.org/"&gt;Certified Scrum Master &lt;/a&gt;(CSM) training for couple of years. Last week I finally got to the course with a colleague. My concern was that since I mainly develop firmware, I would not benefit that much from the course. I could not have been more wrong. I highly recommend CSM course to anyone involved with project work. Even if you do not believe in agile development, this course can still give you pointers on where to improve your work.&lt;br /&gt;&lt;br /&gt;We got our training from &lt;a href="http://www.scrumeducation.com/scrumedu/Content/page~aboutus"&gt;Boris Oestergard and Jens Gloger&lt;/a&gt;. They have been giving in-house training in finland earlier, at least at &lt;a href="http://www.nokia.com/index.html"&gt;Nokia Networks&lt;/a&gt;, &lt;a href="http://www.sulake.fi/"&gt;Sulake&lt;/a&gt; and &lt;a href="http://www.accenture.com/Countries/Finland/default.htm"&gt;Accenture&lt;/a&gt;. We had also Bas Vadde from Nokia Networks giving an interesting guest speak about scaling Scrum to larger programs of hundreds of developers.&lt;br /&gt;&lt;br /&gt;You can see our group photo at &lt;a href="http://www.scrum.dk"&gt;www.scrum.dk&lt;/a&gt; (&lt;a href="http://www.scrum.dk/pic_database.asp?sprog=engelsk"&gt;photos&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115950675268282909?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115950675268282909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115950675268282909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115950675268282909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115950675268282909'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/09/certified-scrum-master.html' title='Certified Scrum Master'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115877892465001475</id><published>2006-09-20T20:44:00.000+02:00</published><updated>2006-09-21T17:25:49.156+02:00</updated><title type='text'>Just Nail That One Thing</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/hammerandnail.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" height="181" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/hammerandnail.jpg" width="132" border="0" /&gt;&lt;/a&gt; I have become to value that the team should be imposed to only one new thing at the time. For example bringing in team room, pair development or TDD should not happen in a huge bang but a transformation time is needed. However when I had a chance to run an agile day with senior management I forgot this important lesson. I got over ambitios and tried to achieve too many things at the time.&lt;br /&gt;&lt;br /&gt;1. I started with presentation covering agile development philosophy, results from our experiment and also the needs for more advanced future adaptation. All this in 1.5 hours with active discussion. Try to keep your presentations focused.&lt;br /&gt;&lt;br /&gt;2. We then applied &lt;a href="http://www.co-intelligence.org/P-Openspace.html"&gt;Open Space Technology&lt;/a&gt; and went through three sessions. This went fairly well considering we were only 6 people and all new to this way of working. Some difficulties in coming to a conclusion, but time-boxing still helped to cover the issues.&lt;br /&gt;&lt;br /&gt;3. At the end I tried to run a 58 minute agile simulation. I combined &lt;a href="http://www.xp.be/xpgame.html"&gt;XP Game &lt;/a&gt;and Scrum Simulation and run a preparation phase with vision creation, then two sprints 10min each and finaly a closure phase. This is OK and could be done again with some slight improvements, but where I made a huge mistake, was that I wanted to wrap up the results from Open Space within simulation. Time pressure from the simulation, new practices coming at fast pace, and meaningfull work at the same time. Not likely.&lt;br /&gt;&lt;br /&gt;So my lesson; if you have some very important issue at your hand, do not try to be too clever. Just focus on nailing the one task with the highest priority/value and make sure it gets DONE (aka implemented, tested and documented). If you chose the wrong issue, well buhuu, that's tough.&lt;br /&gt;&lt;br /&gt;On the bright side it at least wasn't anything like &lt;a href="http://dnicolet1.tripod.com/"&gt;Dave Nicolette&lt;/a&gt; described &lt;a href="http://dnicolet1.tripod.com/agile/index.blog?entry_id=1489170"&gt;happening&lt;/a&gt; during &lt;a href="http://blogs.compuware.com/cs/blogs/jkern/"&gt;Jon Kern's &lt;/a&gt;presentation. So maybe it was ok from the learning point of view, and at least the journey still continues.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Head up. Reflect. Repeat.&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115877892465001475?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115877892465001475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115877892465001475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115877892465001475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115877892465001475'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/09/just-nail-that-one-thing.html' title='Just Nail That One Thing'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115840694824391869</id><published>2006-09-16T13:35:00.000+02:00</published><updated>2006-09-16T13:42:28.256+02:00</updated><title type='text'>We Are not Alone</title><content type='html'>&lt;a href="http://www.think-box.co.uk/blog/2006/09/relating-to-dangers-when-adopting.html"&gt;This post&lt;/a&gt; by Simon Baker really, really, made my day. It's good to know that the situation I'm currently in is by far not unique.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;Can our agility bring about a wider culture change, at least in the program office? Maybe. It depends on the willingness of people to move beyond the comfort zone provided by a command and control environment.&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;Next week is going to been an interesting one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115840694824391869?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115840694824391869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115840694824391869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115840694824391869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115840694824391869'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/09/we-are-not-alone.html' title='We Are not Alone'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115821309218045663</id><published>2006-09-14T07:41:00.000+02:00</published><updated>2006-09-15T17:00:14.763+02:00</updated><title type='text'>Not So Naive Change Model</title><content type='html'>Agile methodology is not visible. I do not know what my team is doing. These are complaints often heard from project manager. Ops, I of course mean persons that understand that they are project &lt;strong&gt;Managers&lt;/strong&gt;. Managing is translated into command and control. When saying "not visible" they mean "I can not command", "I can not control", or "I do not understand prototypes, show me paper".&lt;br /&gt;&lt;br /&gt;What is described above is the impact of change, and it follows the &lt;a href="http://stevenmsmith.com/articles/satir_change_model.htm"&gt;satir change model&lt;/a&gt;. After a smooth start of agile pilot enabling more effective team work, all new kinds of problems start to emerge. Team learns about the actual effort needed in disciplined incremental development versus hacking, but also people who have evaluated their status by how much power they have to command and control (project &lt;strong&gt;Managers&lt;/strong&gt;) may fear loosing their status. All of a sudden product gets developed without screaming, hair pulling and jumping up and down like a freaked out kangaroo. There is no room for the blame game, what is going on here? What is my role in this? A paradigm shift from command and control into trusting and facilitating causes fear among this dying specie of command and control type knowledge-work managers.&lt;br /&gt;&lt;br /&gt;One needs to be very carefull not to interpret this new state of chaos as failure in agile intervention. This is excatly what was expected, but fear is a powerfull emotion and when in panic we do irrational things. I on my part fear what happens to a project &lt;strong&gt;Manager&lt;/strong&gt; who in panic starts to act even more irrationaly (compared to my understanding of rational). As we remember from the theory of &lt;a href="http://en.wikipedia.org/wiki/Complex_adaptive_system"&gt;complex adaptive systems &lt;/a&gt;this emerging behavior is of course totally unpredictable...&lt;br /&gt;&lt;br /&gt;...fingers crossed everyone, stop-think-act, maybe she &lt;em&gt;gets agile&lt;/em&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115821309218045663?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115821309218045663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115821309218045663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115821309218045663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115821309218045663'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/09/not-so-naive-change-model.html' title='Not So Naive Change Model'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115799123948813302</id><published>2006-09-11T18:11:00.000+02:00</published><updated>2006-09-11T18:25:08.060+02:00</updated><title type='text'>Taming the Big Animal - Agile Intervention in a Large Organization</title><content type='html'>I made an academic paper about our first larger scale agile experiment available. You can find it via &lt;a href="http://users.tkk.fi/~tpunkka/papers/taming%20the%20big%20animal%20-%20final%20-%20Punkka080906.pdf"&gt;this link&lt;/a&gt; (pdf), and it can be found also from the sidebar. Also see &lt;a href="http://ng-embedded.blogspot.com/2006/08/agile-methods-and-firmware-development.html"&gt;the analysis &lt;/a&gt;that started this experiment.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Abstract— New Product Development (NPD) today is mainly&lt;br /&gt;managed with plan-driven, relay race type, processes. Today’s&lt;br /&gt;dynamic markets and new technology used in NPD result in a&lt;br /&gt;possibility of benefiting from more adaptive, rugby style,&lt;br /&gt;methods. In the software community methods applying this&lt;br /&gt;approach are commonly called agile methods. In this study I&lt;br /&gt;present experiences from a bottom-up initiative to apply agile&lt;br /&gt;methods for embedded system development in a large&lt;br /&gt;organization using the Stage-Gate® project management&lt;br /&gt;framework. The purpose of the study was to find out whether&lt;br /&gt;agile methods have a chance and how much this type of&lt;br /&gt;organization could benefit from agile methods. Study supported&lt;br /&gt;the earlier research showing that implementing incrementally&lt;br /&gt;some agile practices the project organization was able to improve&lt;br /&gt;the team spirit, motivation level, and additionally to increase&lt;br /&gt;productivity. The affect of agile practices to the Stage-Gate®&lt;br /&gt;framework was minimal. Through wider buy-in and&lt;br /&gt;commitment, the agile development increments could be&lt;br /&gt;synchronized seamlessly to the Stage-Gate® milestones. However&lt;br /&gt;as described earlier in literature, top-down commitment and&lt;br /&gt;changes in organization culture are needed in order to succeed in&lt;br /&gt;process change. The philosophy of agile development is quite&lt;br /&gt;contrary to so called traditional NPD approaches. These changes&lt;br /&gt;in organization culture are also needed in order to fully harness&lt;br /&gt;the power of agile development.&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115799123948813302?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115799123948813302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115799123948813302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115799123948813302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115799123948813302'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/09/taming-big-animal-agile-intervention.html' title='Taming the Big Animal - Agile Intervention in a Large Organization'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115781538674829731</id><published>2006-09-09T16:46:00.000+02:00</published><updated>2006-09-11T18:10:40.116+02:00</updated><title type='text'>Can RUP Be Like Switzerland?</title><content type='html'>At one point debate on agile and more waterfall like sequential process models was claimed to be like religious war. This impression might still be seen in an large organization when agile methods are piloted for the first time. What if the &lt;a href="http://en.wikipedia.org/wiki/Rational_Unified_Process"&gt;Rational Unified Process &lt;/a&gt;(RUP) is the legitimate model for software development in this organization? RUP, being (in my and some others opinion) extremely abstract framework, could easily adapt to pretty much any methodology.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/swiss_flag.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/swiss_flag.jpg" border="0" /&gt;&lt;/a&gt;I do not hold a guru status on RUP. I have read &lt;a href="http://www.amazon.co.uk/Rational-Unified-Process-Introduction-Addison-Wesley/dp/0321197704/sr=8-3/qid=1157816443/ref=sr_1_3/026-4912284-1336466?ie=UTF8&amp;amp;s=gateway"&gt;the introduction &lt;/a&gt;by Kruchten, browsed the net, some papers and that's about it. Yet I propose that RUP could be seen as neutral territory for getting the advocants from both camps to work on common framework in order to let all the flowers bloom.&lt;br /&gt;&lt;br /&gt;I know that if I was running a small start-up, and obviously using agile methods full a head, I would not concern my self with RUP because it would not offer me enough. However in an large global organization some level of legitimate system and standardization can be seen necessary, and thus I do not see RUP as bad option. Especially if RUP is already in the house.&lt;br /&gt;&lt;br /&gt;RUP has been adopted to agile methods and &lt;em&gt;vice versa&lt;/em&gt; starting from the early days, but some major effort has been put to this just lately. Check out:&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.ambysoft.com/unifiedprocess/agileUP.html"&gt;Agile Unified Process &lt;/a&gt;(AUP) by Scott Ambler&lt;br /&gt;2. &lt;a href="http://www.eclipse.org/epf/index.php"&gt;Eclipse Process Framework&lt;/a&gt; (EPF) and OpenUP by &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; Community&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115781538674829731?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115781538674829731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115781538674829731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115781538674829731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115781538674829731'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/09/can-rup-be-like-switzerland.html' title='Can RUP Be Like Switzerland?'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115719175799187513</id><published>2006-09-02T11:56:00.000+02:00</published><updated>2006-09-02T12:09:18.396+02:00</updated><title type='text'>...About Team Rooms and Pairing</title><content type='html'>&lt;a href="http://www.agileadvice.com/archives/2006/08/the_team_room.html"&gt;Mishkin Berteig pointed &lt;/a&gt;to &lt;a href="http://www.possibility.com/Cpp/SoftDevOfficeLayout.html"&gt;this web page &lt;/a&gt;about setting up a team room. This page pretty much covers everything I have in mind about the subject, especially with the links it has. Pros and cons of the team room are handled. These guys also share my philosophy about forcing these things. If you should force people to do anything, team room and pairing are definately &lt;strong&gt;NOT&lt;/strong&gt; among such things. I believe these issues are automatically brought in when (if) the team jells and learns to work together.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115719175799187513?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115719175799187513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115719175799187513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115719175799187513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115719175799187513'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/09/about-team-rooms-and-pairing.html' title='...About Team Rooms and Pairing'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115713562248658937</id><published>2006-09-01T18:30:00.000+02:00</published><updated>2006-09-02T12:11:09.256+02:00</updated><title type='text'>Our Version of Primetime Emmy Award</title><content type='html'>It's been awfully quiet around here. It's just because I've been &lt;s&gt;lazy&lt;/s&gt; busy.&lt;br /&gt;&lt;br /&gt;During the previous Sprint we experimented a practice we called &lt;em&gt;Primetime&lt;/em&gt;. Primetime means that immediately after the daily Scrum work was continued in the team room and by pairing for couple of hours. Of course in embedded system development pairing means pair development, not just &lt;a href="http://www.extremeprogramming.org/rules/pair.html"&gt;pair programming&lt;/a&gt;.&lt;br /&gt;Yes, yes, we all know that this should be a full day practice. But ... there is lots of other emergent responsibilities, for example maintenance and things like that. At the moment Primetime is the best we can achieve in our environment.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/flow.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/flow.jpg" border="0" /&gt;&lt;/a&gt;Tom DeMarco highlights the importance of uninterrupted work in his &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0932633439?v=glance"&gt;book&lt;/a&gt;. The cost of reimmersion time to flow (state of mind when developer "gets her design") is extremely high, and our experiment manifested this.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;In our retrospective we easily identified five observations: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;People got enthusiast about the design when pairing, and continued way beyond the agreed Primetime&lt;/li&gt;&lt;li&gt;Two people pairing blocks other people from interrupting &lt;/li&gt;&lt;li&gt;Emails, phone calls etc. got postponed&lt;/li&gt;&lt;li&gt;Learning was accelerated because of osmotic communication, and active collaboration&lt;/li&gt;&lt;li&gt;Defects got detected as in review process, thus improving the quality&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Within this experiment the team easily achieved Sprint goals, which were set based on earlier velocity. It is too early to make a conclusion, but we decided to keep this practice.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115713562248658937?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115713562248658937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115713562248658937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115713562248658937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115713562248658937'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/09/our-version-of-primetime-emmy-award.html' title='Our Version of Primetime Emmy Award'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115617914951449005</id><published>2006-08-21T18:36:00.000+02:00</published><updated>2006-08-21T18:52:35.473+02:00</updated><title type='text'>Plans, Planning and Speculation - There's Time for Everything</title><content type='html'>It has been funny to me from the very beginning that agile methods are often claimed to lack the planning activity while the opposite holds. The difference lies in the fact that planning for the unknown becomes speculation. Prolonged speculation period brings very little added value and is thus kept to minimum in agile projects until better knowledge is achieved by active learning.  &lt;a href="http://www.think-box.co.uk/blog/"&gt;Simon Baker &lt;/a&gt;in AGILE IN ACTION reminded about the two great early agilists believing in &lt;a href="http://www.think-box.co.uk/blog/2006/08/planning-and-plans.html"&gt;planning instead of plans&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115617914951449005?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115617914951449005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115617914951449005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115617914951449005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115617914951449005'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/08/plans-planning-and-speculation-theres.html' title='Plans, Planning and Speculation - There&apos;s Time for Everything'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115613777797207745</id><published>2006-08-21T07:18:00.000+02:00</published><updated>2006-08-21T07:22:57.983+02:00</updated><title type='text'>Life in a Cubicle</title><content type='html'>Are you working in a sorry ass company that forces people to work in cubicles in order to foster communication and effectivity? It's sad, but turn on your speakers, pump up the volume, and &lt;a href="http://www.youtube.com/watch?v=_O_5ef49N5I"&gt;check out this James Blundt remix. &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hope it helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115613777797207745?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115613777797207745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115613777797207745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115613777797207745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115613777797207745'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/08/life-in-cubicle.html' title='Life in a Cubicle'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115596164730733732</id><published>2006-08-19T05:57:00.000+02:00</published><updated>2006-08-21T16:48:08.553+02:00</updated><title type='text'>Portfolio Through The Grapewine</title><content type='html'>Many agile methods miss to address the issue of &lt;a href="http://en.wikipedia.org/wiki/Portfolio"&gt;portfolio management&lt;/a&gt;. This is not such a surprise as many organizations miss to address the issue all together. Agile thinking pretty much assumes that the only intelligent way is to work on a single project at the time, and that projects should face delivery or cancellation as soon as possible. After all having too many projects in the inventory is one of the main sources of waste. While all this is very much true, the life on planet earth is sometimes somewhat different. The impression "I heard it through the grapewine" is made famous by Marvin Gaye. The impression means information traveling through gossip and rumor. In some organizations this seems to be the primary channel for portfolio management.&lt;br /&gt;&lt;br /&gt;Team is defined as group of people with shared objectives and goals (term "team" is misused a lot!). Teams become superior over individuals when they share these goals and thus have a common direction. Agile methods take advantage of this phenomenon by planning for short enough increments and gaining commitment by having estimates given by the people doing the actual work. This is called time-boxing.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/thirsty%20shadows%20small.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/thirsty%20shadows%20small.jpg" border="0" /&gt;&lt;/a&gt;When a team in large organization is piloting agile methods it is usually working as a shadow system parallel to institutional system in the organization. In this case the above mentioned "I heard it through the grapewine" -effect can be very harmful. Each team member will have several inputs about the future of the current project, as well as information about the future projects. Along the current increment short notice invitations to future project meetings will arrive and so on. This makes agile planning unmotivating and even barking mad. Of course the same applies to any method of planning under these conditions. However time-boxing would be perfect tool against "I heard it through the grapewine" -effect, allowing organizations to harness the power of small teams with shared goals and direction. DeMarco calls these teams &lt;em&gt;Jelled&lt;/em&gt; (&lt;a href="http://www.amazon.com/gp/product/0932633439/002-6602009-3542404?v=glance&amp;amp;n=283155"&gt;DeMarco and Lister, 1999&lt;/a&gt;). If new announcements and meeting invitations are only made public in the same natural rhythm as the team already operates, their negative effect to &lt;em&gt;Jell&lt;/em&gt; would be minimized. Who is responsible for this rhythm? Top management, middle management, project management, line management, team leadership? I think this needs to be considered independently for each case, but it is a joint responsibility and everyone should understand the reasoning.&lt;br /&gt;&lt;br /&gt;"Increment duration depends on how long you can keep the change away". Allowing rumors and gossip make this a very short period.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115596164730733732?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115596164730733732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115596164730733732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115596164730733732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115596164730733732'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/08/portfolio-through-grapewine.html' title='Portfolio Through The Grapewine'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115549158247968639</id><published>2006-08-13T19:52:00.000+02:00</published><updated>2006-08-13T19:53:02.493+02:00</updated><title type='text'>The Uneducated Industry</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/books_small.1.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/books_small.1.jpg" border="0" /&gt;&lt;/a&gt;In many cases professional embedded developer has never attended a single programming course at any level. Further she may have never opened a book on even the most fundamental programming practices. She does not read professional magazines. Embedded programmers are often electronics graduates. Even more scary is that the same applies to managers of embedded developers. They have never attended a single programming course at any level, NOR any managing course at any level. Embedded development department managers have just become managers because they have earlier been successful in programming (and designing the HW) with those 1kB micros solo virtuoso and ad-hoc.&lt;br /&gt;&lt;br /&gt;Imagine that. In the past years we have reached an era where a light switch has more bit crunching power than Commodore 64. In few years a key chain, a pen or your T-shirt may out power the old 64. The complexity of these devices is exploded by the communication capabilities which enables distributed intelligence. These increasingly complex systems need to be developed within ever shorter time-to-market by team(s) of embedded software developers co-designing the system with teams from other disciplines. Members of such teams need to have proper skills for development, but even more challenging is that developers and their managers need to have social skills in order to keep the whole development ecosystem fit.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/rugby_small.0.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/rugby_small.0.jpg" border="0" /&gt;&lt;/a&gt;These skills are now been teached in programming and management departments, books and articles, and then tuned and learned within methodologies like agile development. However getting these next generation people into industry is a slow process.&lt;br /&gt;&lt;br /&gt;It is essential to &lt;em&gt;&lt;strong&gt;teach&lt;/strong&gt;&lt;/em&gt; the existing people in the industry to &lt;em&gt;&lt;strong&gt;learn&lt;/strong&gt;&lt;/em&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115549158247968639?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115549158247968639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115549158247968639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115549158247968639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115549158247968639'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/08/uneducated-industry_13.html' title='The Uneducated Industry'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115469622026424207</id><published>2006-08-04T14:46:00.000+02:00</published><updated>2006-08-04T14:57:00.276+02:00</updated><title type='text'>Norm Day at the Office</title><content type='html'>Back at work, and running a orientation week before we begin a 3 month release plan, which aims at delivering the first possible release candidate for an embedded product family. We chose a meeting cabinet that we found out to be available.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/P1010232.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/P1010232.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Fist we checked it up. It seemed to be ok.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/P1010231.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/P1010231.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We could not find a projector in the premises, so we had to settle for Meeting Charts provided by our friends at 3M. Good news; no  .PPT's.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115469622026424207?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115469622026424207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115469622026424207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115469622026424207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115469622026424207'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/08/norm-day-at-office.html' title='Norm Day at the Office'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115463202975995684</id><published>2006-08-03T20:55:00.000+02:00</published><updated>2006-08-03T21:07:49.080+02:00</updated><title type='text'>Survey Shows: Agile Champions Live Higher</title><content type='html'>There has been survey results published at &lt;a href="http://www.agile2006.org/"&gt;Agile 2006 &lt;/a&gt;conference. &lt;a href="http://trailridgeconsulting.typepad.com/pete_behrens_blog/"&gt;Pete Behrens&lt;/a&gt; has written a nice &lt;a href="http://trailridgeconsulting.typepad.com/pete_behrens_blog/2006/08/are_agile_metho.html"&gt;summary&lt;/a&gt;. The survey was about agile adaptation and was run by &lt;a href="http://www.versionone.com/"&gt;VersionOne&lt;/a&gt;. As VersionOne makes their business in agile scope, the data sample may be "a bit" biased. Even while I do not put much emphasis on the result that 75% of companies deploy agile methods I do see value in other finding:&lt;br /&gt;&lt;br /&gt;"&lt;em&gt;The internal agile champion is moving up in the organization to VP from team leader two years ago.&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;Agile methods have so far been largely deployed by a younger champion engineer in an organization that has gotten frustrated with the dysfunctioning methods. This data may show that agile development is moving directly higher from the trenches. I just hope that the values do not get twisted on their way up. The original ones work so nicely....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115463202975995684?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115463202975995684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115463202975995684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115463202975995684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115463202975995684'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/08/survey-shows-agile-champions-live.html' title='Survey Shows: Agile Champions Live Higher'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115445572865135126</id><published>2006-08-01T20:01:00.000+02:00</published><updated>2006-08-01T20:08:48.653+02:00</updated><title type='text'>Agile Methods and Firmware Development</title><content type='html'>I made my paper "Agile Methods and Firmware Development" available. You can find a link to &lt;a href="http://users.tkk.fi/~tpunkka/papers/agile_firmware_punkka_V103.pdf"&gt;the paper &lt;/a&gt;from the sidebar, under "My Papers". This is my initial review and analysis of different software lifecycle models and their applicability to firmware development as part of Ph.D. studies. Paper is dated a few years back. One might say that the current journey started upon writing this paper.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Abstract— The size and complexity of software continues to grow&lt;br /&gt;at a steady pace. This is also true for software embedded in our&lt;br /&gt;everyday electronics, which we have called simple devices. The&lt;br /&gt;term firmware is used to describe the low-level software in&lt;br /&gt;embedded systems. It may even be hard to divide firmware and&lt;br /&gt;actual hardware. Software development for such a target has&lt;br /&gt;special characteristics such as a culture of hacking, small teams&lt;br /&gt;and multiple hats, co-design issues, one-time designs, correctness&lt;br /&gt;and robustness requirements, lack of tools and unconventional&lt;br /&gt;customers. Software process models have been studied also in&lt;br /&gt;this environment to ease the pain of developing more complex&lt;br /&gt;systems. I introduce four currently used methods to develop&lt;br /&gt;firmware; build-and-fix, waterfall, ROPES and RUP SE.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Agile methods are getting a lot of attention in the software&lt;br /&gt;development community at the moment. I review the agile&lt;br /&gt;methods which are most documented. The suitability of these to&lt;br /&gt;firmware development is evaluated. It is also analyzed whether&lt;br /&gt;firmware development could benefit from agile methods.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;It is shown that agile methods are not the new cure-all solution&lt;br /&gt;to firmware development, but they are applicable. Their full use&lt;br /&gt;needs modification and innovative thinking. It is, however, shown&lt;br /&gt;that firmware development can surely benefit from the usage of&lt;br /&gt;agile methods. &lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115445572865135126?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115445572865135126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115445572865135126' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115445572865135126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115445572865135126'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/08/agile-methods-and-firmware-development.html' title='Agile Methods and Firmware Development'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115392727390196858</id><published>2006-07-26T17:20:00.000+02:00</published><updated>2006-07-26T17:25:37.816+02:00</updated><title type='text'>embUnit Translators for CruiseControl</title><content type='html'>&lt;p&gt;Back home and time to get tech oriented again. Our CruiseControl and unit test practices are proceeding at steady pace, so I thought I will make our XSL translators for embUnit unit test framework public in this forum at this point. You can find them here (&lt;a href="http://users.tkk.fi/~tpunkka/blog/snippets/unittests.xsl"&gt;unittests.xsl&lt;/a&gt; and &lt;a href="http://users.tkk.fi/~tpunkka/blog/snippets/testdetails.xsl"&gt;testdetails.xsl&lt;/a&gt;). If you are an embedded programmer like me, and do not currently know much about CruiseControl, and/or &lt;a href="http://en.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt;, I'll try to briefly explain how to set it up. If there is enough interest I will make a more detailed intro to it.&lt;br /&gt;&lt;br /&gt;You need at least to have following installed: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="https://sourceforge.net/projects/embunit/"&gt;embUnit&lt;/a&gt; unit test framework and compiled libraries &lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/j2se/1.4.2/download.html"&gt;Java SDK&lt;/a&gt;. Remember to set JAVA_HOME environment variable to point to install dir.&lt;/li&gt;&lt;li&gt;&lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt;, of course&lt;/li&gt;&lt;li&gt;Make tools. I recommend for Windows users the whole &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; installation to cut down the hassle&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Now you can run the Cruisecontrol Ant built Java and JUnit sample, but before you can start cruising with your embedded C project with Make and embUnit framework you need to at least do following modifications:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Build a simple C project which has makefile for automated build. Greate a CVS project and check your project out to your build server for CruiseControl (use Subversion if you are ahead of us, but you are on your own with this). Look at&lt;a href="http://www.javaranch.com/journal/200409/DrivingOnCruiseControl_Part1.html"&gt; Driving on CruiseControl &lt;/a&gt;articles by Lasse Koskela for help. &lt;/li&gt;&lt;li&gt;Modify our &lt;em&gt;config.xml&lt;/em&gt; to suite your project (see my earlier &lt;a href="http://ng-embedded.blogspot.com/2006/06/cruisecontrol-configuration-for-gnu.html"&gt;post&lt;/a&gt; about it) and replace the file in CruiseControl root&lt;/li&gt;&lt;li&gt;Replace &lt;em&gt;unittests.xsl&lt;/em&gt; and &lt;em&gt;testdetails.xsl&lt;/em&gt; files in CruiseControl folder ./webapps/cruisecontrol/xsl.&lt;/li&gt;&lt;li&gt;Launch CruiseControl and start cruising... &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;And here are some screenshots on how it looks.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/failed%20test.0.gif"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/failed%20test.0.png" border="0" /&gt;&lt;/a&gt;Here a test fails (purely for demonstration purposes of course). Details of failed test are displayed below.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/test%20details.0.gif"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/test%20details.0.png" border="0" /&gt;&lt;/a&gt;Details of all tests are also available.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/passed%20tests.1.gif"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/passed%20tests.1.png" border="0" /&gt;&lt;/a&gt;After a brief moment everything is in order again. I used the green bar to signal this.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115392727390196858?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115392727390196858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115392727390196858' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115392727390196858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115392727390196858'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/07/embunit-translators-for-cruisecontrol_26.html' title='embUnit Translators for CruiseControl'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115366174086375209</id><published>2006-07-23T15:10:00.000+02:00</published><updated>2006-07-23T15:58:37.956+02:00</updated><title type='text'>Battery Charging and Reflection</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/fearless%20change%20small.png"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/fearless%20change%20small.png" border="0" /&gt;&lt;/a&gt;Yesterday evening we arrived to &lt;a href="http://www.lappeenranta.fi/?deptid=10973&amp;languageid=4"&gt;Lappeenranta&lt;/a&gt; and lake &lt;a href="http://virtual.finland.fi/netcomm/news/showarticle.asp?intNWSAID=25710"&gt;Saimaa&lt;/a&gt;. I have to say it is a beautiful scenario for battery charging. Even while the city was offering a &lt;a href="http://www.lprf.fi/index.htm"&gt;festival&lt;/a&gt; (in finnish), I decided to take a day off from beer drinking and - well - read about change.&lt;br /&gt;&lt;br /&gt;My book of choise, &lt;a href="http://www.amazon.com/gp/product/0201741571/104-8372376-9241538?v=glance&amp;amp;n=283155"&gt;Fearless Change&lt;/a&gt;, by Ph.D's &lt;a href="http://members.cox.net/risingl1/"&gt;Linda Rising&lt;/a&gt; and &lt;a href="http://www.cs.unca.edu/~manns/"&gt;Mary Lynn Manns&lt;/a&gt;, is of great value for anyone trying to get innovation diffused in organization. The book describes 48 patterns for driving and sustaining change. Many of the patterns we have found out during our journey. Among them a pattern "Time for Reflection" in which doctors recommend:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;em&gt;To learn from the past, take time at regular intervals to evaluate what is working well and what should be done differently.&lt;/em&gt; &lt;/div&gt;&lt;br /&gt;This is excatly what we need to do again after the vacation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115366174086375209?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115366174086375209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115366174086375209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115366174086375209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115366174086375209'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/07/battery-charging-and-reflection.html' title='Battery Charging and Reflection'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115294421705424070</id><published>2006-07-15T08:02:00.000+02:00</published><updated>2006-07-16T18:54:14.663+02:00</updated><title type='text'>Small Countries Seem to be Aggressively Agile</title><content type='html'>&lt;a href="http://www.google.com/trends"&gt;Google trends&lt;/a&gt; has been used to map agile development interest in different countries. &lt;a href="http://weblogs.asp.net/jcogley/"&gt;Jonathan Cogley&lt;/a&gt; started it with a search for &lt;a href="http://weblogs.asp.net/jcogley/archive/2006/05/11/446099.aspx"&gt;'How Agile is Your Country'&lt;/a&gt;. &lt;a href="http://dnicolet1.tripod.com/"&gt;Dave Nicolette&lt;/a&gt; went on with revisited &lt;a href="http://dnicolet1.tripod.com/agile/index.blog?entry_id=1520941"&gt;search term set&lt;/a&gt;, and got this &lt;a href="http://www.google.com/trends?q=TDD%2C+junit%2C+%22continuous+integration%22%2C+clover"&gt;google trend&lt;/a&gt;. By choosing the regions you find (at least I did at the time) Finland in 10th place. So it is no wonder agile conferences in Finland are packed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115294421705424070?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115294421705424070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115294421705424070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115294421705424070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115294421705424070'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/07/small-countries-seem-to-be.html' title='Small Countries Seem to be Aggressively Agile'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115287006688719925</id><published>2006-07-14T11:40:00.000+02:00</published><updated>2006-07-14T11:41:06.890+02:00</updated><title type='text'>Prisoners of Our Habits - Act Four</title><content type='html'>&lt;div align="center"&gt;&lt;strong&gt;Prisoners of Our Habits. Act three. Executive manager enters. &lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Executive manager is reading an email from project manager&lt;br /&gt;"Dear Sir, I overheard this developer, John Smith, saying&lt;br /&gt;his technical solution may cause $1.00 increase&lt;br /&gt;in bill-of-material."&lt;br /&gt;&lt;br /&gt;EXEC'MNG: -"Stop the press. This John Smith starts&lt;br /&gt;immediately to investigate alternative solutions,&lt;br /&gt;what ever they are."&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Product under development may have hundreds of relationships. Tradeoffs between these relationships are being made in hourly basis. When one of these issues gets taken away from the context, it may seem like a big deal. The big deal in fact is when a bad decision (based on bad information) like one above is made the project environment, &lt;a href="http://en.wikipedia.org/wiki/Complex_adaptive_system"&gt;a complex adaptive system (CAS)&lt;/a&gt;, gets an unexpected input. What happens in CAS is totally unpredictable. Typically the system is pushed into chaos and disorder. This is why agile development blocks these inputs from the team for a certain time, and opens the window for these new inputs only frequently enough. Command and control is traditional way of managing projects. Developers have not been encouraged to self-organize traditionally.&lt;br /&gt;&lt;br /&gt;And old habits are slow to die.&lt;br /&gt;&lt;br /&gt;I know &lt;a href="http://en.wikipedia.org/wiki/Paradigm_shift"&gt;paradigm shift&lt;/a&gt; is extremely slow, and so does James Shore (see his &lt;a href="http://www.jamesshore.com/Change-Diary/"&gt;Change Diary&lt;/a&gt;). I'll be on vacation for couple of weeks and after that it would be perfect time to reflect and adjust the course of this agile journey. I just hope couple of weeks is enough for the old batteries. &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115287006688719925?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115287006688719925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115287006688719925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115287006688719925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115287006688719925'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/07/prisoners-of-our-habits-act-four_14.html' title='Prisoners of Our Habits - Act Four'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115269664406522226</id><published>2006-07-12T11:22:00.000+02:00</published><updated>2006-07-12T21:01:41.353+02:00</updated><title type='text'>Prisoners of Our Habits - Act Three</title><content type='html'>&lt;div align="center"&gt;&lt;strong&gt;Prisoners of Our Habits. Act three. A manager enters. &lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;DEV -"&lt;em&gt;We should try to learn new ways of doing thingies &lt;br /&gt;      around here. We could participate in action research&lt;br /&gt;      program, you know?&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;MNG -"&lt;em&gt;Hmm, That sounds like a lot of money. We could buy &lt;br /&gt;      a lot of chairs in two-day course for that. Wouldn't &lt;br /&gt;      that be great?&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;...&lt;br /&gt;&lt;br /&gt;There is a huge difference between being teached and learning. To start with there is a difference of acquiring existing knowledge versus creating new knowledge. Further there is a huge gap between action learning and a static content course which may have zero contextual relation with developer's current situation. I have seen the affect of these courses, and it does not impress me. It is just like many other mental models in this industry; a pretty model without connection to reality. But hey, traditionally developers have not taken part in action learning.&lt;br /&gt;&lt;br /&gt;And old habits are slow to die.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115269664406522226?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115269664406522226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115269664406522226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115269664406522226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115269664406522226'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/07/prisoners-of-our-habits-act-three.html' title='Prisoners of Our Habits - Act Three'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115263906016453997</id><published>2006-07-11T19:28:00.000+02:00</published><updated>2006-07-11T19:31:00.176+02:00</updated><title type='text'>Prisoners of Our Habits - Act Two</title><content type='html'>&lt;div align="center"&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;strong&gt;Prisoners of Our Habits. Act two. Project manager enters.&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;PM:   -"&lt;em&gt;You need to focus on project's&lt;br /&gt;        paper deliverables for the next two months&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;DEV1: -"&lt;em&gt;Which papers you mean? For whom they are,&lt;br /&gt;        and for what purpose?&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;PM:   -"&lt;em&gt;I do not know, but reviewers know all the&lt;br /&gt;        buzzwords, so my ass needs to be covered.&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;DEV1: -"&lt;em&gt;Eh, That does not sound so valuable and motivating?&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;PM:   -"&lt;em&gt;It's not supposed to be. I fill in dashboards&lt;br /&gt;        which no one reads. You should have no problem&lt;br /&gt;        creating papers with no value.&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;...&lt;br /&gt;&lt;br /&gt;The above is not a Dilbert strip. It is status quo in many development projects. Dashboards illustrating Gannts, PERTTs etc. are what we traditionally use for project management, and paper documents are what we traditionally use for progress monitoring and project quality assurance. So what the hell is wrong with that you ask? Again, it is a nice model, I really do like it. It has only one flaw; it does not hold in reality.&lt;br /&gt;&lt;br /&gt;Then again working prototype, incremental release plan, Sprint backlog, or burndown chart are not used traditionally.&lt;br /&gt;&lt;br /&gt;And old habits are slow to die.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115263906016453997?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115263906016453997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115263906016453997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115263906016453997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115263906016453997'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/07/prisoners-of-our-habits-act-two.html' title='Prisoners of Our Habits - Act Two'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115251233289827648</id><published>2006-07-10T08:17:00.000+02:00</published><updated>2006-07-10T09:22:09.660+02:00</updated><title type='text'>Prisoners of Our Habits - Act One</title><content type='html'>I have been describing continuous integration for an embedded firmware project targeting a low-end microcontoller. Based on discussions I see a need for pointing out something about my view;&lt;br /&gt;&lt;br /&gt;I do not mean that you need to apply continuous integration, unit tests running on both the host and target, etc. if you are writing a 200 LOC blinking LED application for 8-pin microcontroller for fun. This is a job for &lt;a href="http://www.easycomp.org/cgi-bin/OrgPatterns?SoloVirtuoso"&gt;Solo-Virtuoso&lt;/a&gt;, and methods should be alike. The project I'm talking about, while targeting the low-end microcontrollers, will develop tens of thousands of lines of C source and will eventually be compiled into ten or so configurations for mass production. The configurations have some special areas where expertise is needed, like power management and wireless RF technology. This type of project cannot fit the &lt;a href="http://www.easycomp.org/cgi-bin/OrgPatterns?SoloVirtuoso"&gt;Solo-Virtuoso&lt;/a&gt; category. Instead it requires a collaborative group of people - a job for an agile team and this team should adapt these practices.&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;Purely based on my biased participant observation, the trend of firmware projects is towards bigger and more complex so we are going to need these practices. The problem in firmware domain is that former electrical engineers (now programmers, or even worse, managers) are not willing to see this increase in complexity, but remain prisoners of their old habits. They are still in denial. My recent experiences manifest this very thing. &lt;/div&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Prisoners of Our Habits. Act one. Programmer enters.&lt;/strong&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/handcuffs_small.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/handcuffs_small.jpg" border="0" /&gt;&lt;/a&gt;A colleague following our agile journey mentioned that based on his observations of daily Scrum meetings and collaboration we continuously run into problems caused by someone changing an interface and all of a sudden none of the configurations work. His obvious solution for this was; "there is a need for up-front designed interface contracts between modules". Problem solved, eh? We do not have full set of requirements, nor the freezed hardware architecture. For me iron-bound interface contracts seem pretty far fetched objective, but then again, it's just me. Still I would be amazed (but happily so) to find this wizard pulling out a comprehensive up-front architecture for us. Oh, and preferably delivered as a PowerPoint presentation I might add. If you happen to know this guy, ask him to drop me a line. I could use a good laugh.&lt;br /&gt;&lt;br /&gt;I see these discussions about interfaces as a solution, not the symptom. It is good to see team members having courage to change things, to refactor when opportunity arises. These conflicts usually get solved easily after the daily Scrum at latest, so to me these are just short architecture meetings. In addition there is a huge difference compared to normal high ceremony architecture meeting: decisions get made and implemented immediately and feedback is available the next day. I have witnessed this working extremely well, and fast, even with programmers with junior skill level. This is just not the way it has been done traditionally.&lt;br /&gt;&lt;br /&gt;Old habits die slowly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115251233289827648?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115251233289827648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115251233289827648' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115251233289827648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115251233289827648'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/07/prisoners-of-our-habits-act-one_10.html' title='Prisoners of Our Habits - Act One'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115234004223657903</id><published>2006-07-08T08:05:00.000+02:00</published><updated>2006-07-08T08:27:22.246+02:00</updated><title type='text'>Agile Business Conference - Program Draft Available</title><content type='html'>There is a &lt;a href="http://www.agileconference.org/program.asp"&gt;program draft&lt;/a&gt; available for this year's &lt;a href="http://www.agileconference.org/"&gt;Agile Business Conference &lt;/a&gt;in London. I have attended this conference for two years and I can recommend it. It is organized by DSDM Consortium and the title has word 'business' in it, but the agenda is about agile in general. This years highlight for me seems to be 'Agile and Embedded Systems' (Pekka Abrahamsson) . I'm also very interested in presentation by Mike Criffiths - 'Utilising Agile Methods Alongside the &lt;a href="http://en.wikipedia.org/wiki/PMBOK"&gt;PMBOK Guide&lt;/a&gt;'.  I see very little value in this balancing, but this is something we currently often need to live with and nevertheless we should always remember and reflect where we are coming from. This helps us to understand where we would like to go next (&lt;a href="http://www.kohl.ca/blog/archives/000166.html"&gt;post-agilism&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Again interesting to see keynotes from Kent Beck, Sean Hanly, David Taylor and Polyanna Pixton.  I really hope I'll be able to make it! If you are planning to be there, and are interested in agile [product] development, drop me a line and we will catch up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115234004223657903?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115234004223657903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115234004223657903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115234004223657903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115234004223657903'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/07/agile-business-conference-program.html' title='Agile Business Conference - Program Draft Available'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115195759248943453</id><published>2006-07-03T22:12:00.000+02:00</published><updated>2006-07-03T22:36:33.883+02:00</updated><title type='text'>Objects and Firmware - Inheritance</title><content type='html'>This is the third and last post (see earlier &lt;a href="http://ng-embedded.blogspot.com/2006/05/objects-and-firmware-basics.html"&gt;basic encapsulation &lt;/a&gt;and &lt;a href="http://ng-embedded.blogspot.com/2006/05/objects-and-firmware-polymorphism.html"&gt;polymorphism&lt;/a&gt;) about object based firmware programming. This is about single inheritance, another important object oriented principle. This is also pretty much as far as I would go with the HW currently available for our embedded projects, low-end 8-bit microcontrollers. Anything further would require even more use of pointers, including function pointers, and I'm not really that comfortable with their heavy use.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://users.tkk.fi/~tpunkka/blog/snippets/inheritance.html" width="420" height="250"&gt;&lt;br /&gt;If you can see this, your browser doesn't understand IFRAME.  However, we'll still&lt;br /&gt;&lt;a href="http://users.tkk.fi/~tpunkka/blog/snippets/inheritance.html"&gt;link&lt;/a&gt;&lt;br /&gt;you to the file.&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;The sample code implements a simple &lt;em&gt;Level&lt;/em&gt; object type which has only two members, &lt;em&gt;level&lt;/em&gt; and &lt;em&gt;currentState&lt;/em&gt;. The first one holds a threshold value, the latter indicates wether the latest sample was below the level (currentState = 0), or equal/above (currentState = 1).&lt;br /&gt;&lt;br /&gt;Next we have used Level as a parent for another object type, &lt;em&gt;LevelWithOffset&lt;/em&gt;. The new object has the Level type as its first member, named &lt;em&gt;super&lt;/em&gt;. This gives us possibility to use pointers to both of the object types in similar way. LevelWithOffset object type has an additional &lt;em&gt;offset&lt;/em&gt; member. Value of offset is added to set level. In the example code we have two objects, one simple Level and one LevelWithOffset. Constructor is called for both setting the level to 2. The LevelWithOffset object is then further adjusted by setting the offset also to 2.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/inheritance.5.gif"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" height="146" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/inheritance.1.png" width="244" border="0" /&gt;&lt;/a&gt;The main loop calls the notify method for both objects with values from 0 to 4 and outputs the state of both objects. We can see from the test run that the other object switches the state only after the sample is increased by 2 more steps (effect of additional offset).&lt;br /&gt;&lt;br /&gt;You can go a long way with this object stuff in C. If you are interested then check out the papers listes below and start working on your skills and creating your own opinion.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.embedded.com/97/fe29712.htm"&gt;Miro Samek, Portable Inheritance and Polymorphism in C&lt;/a&gt;, ESP (&lt;a href="http://www.quantum-leaps.com/writings/samek9712.pdf"&gt;pdf&lt;/a&gt;)&lt;br /&gt;&lt;a href="http://www.ddj.com/dept/cpp/184406396"&gt;Ron Kreymborg, Single Inheritance Class in C, Dr. Dobbs Journal&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.embedded.com/showArticle.jhtml?articleID=14700472"&gt;Matthew Curreri, Object-Oriented C: Greating Foundation Classes&lt;/a&gt;, ESP (&lt;a href="http://www.embedded.com/story/OEG20010304S0005"&gt;part2&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115195759248943453?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115195759248943453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115195759248943453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115195759248943453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115195759248943453'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/07/objects-and-firmware-inheritance_03.html' title='Objects and Firmware - Inheritance'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115147443865431314</id><published>2006-06-28T07:49:00.000+02:00</published><updated>2006-06-28T15:17:54.186+02:00</updated><title type='text'>CruiseControl Configuration for GNU Make</title><content type='html'>I promised to share the &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt; config.xml file we use. Here you go, it is not much of a contribution, but I hope it helps some of you jumping into cruising mode. Our configuration file uses the Exec builder for GNU Make automated builds. Typical examples use Ant in Java environment.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://users.tkk.fi/~tpunkka/blog/snippets/config.xml" width="420" height="250"&gt;If you can see this, your browser doesn't understand IFRAME.  However, we'll still&lt;a href="http://users.tkk.fi/~tpunkka/blog/snippets/config.xml"&gt;link&lt;/a&gt;you to the file.&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;For additional information:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt;, article on &lt;a href="http://www.martinfowler.com/articles/continuousIntegration.html"&gt;Continuous Integration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Lasse Koskela, Driving on CruiseControl &lt;a href="http://www.javaranch.com/journal/200409/DrivingOnCruiseControl_Part1.html"&gt;Part1&lt;/a&gt; and &lt;a href="http://www.javaranch.com/journal/200410/DrivingOnCruiseControl_Part2.html"&gt;Part2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cruisecontrol.sourceforge.net/main/configxml.html"&gt;CruiseControl Configuration Reference&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;See it in action in my earlier &lt;a href="http://ng-embedded.blogspot.com/2006/04/cruisecontrol-is-great-for-firmware.html"&gt;post&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115147443865431314?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115147443865431314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115147443865431314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115147443865431314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115147443865431314'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/06/cruisecontrol-configuration-for-gnu.html' title='CruiseControl Configuration for GNU Make'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115104137872780909</id><published>2006-06-23T07:18:00.000+02:00</published><updated>2006-06-23T12:43:33.883+02:00</updated><title type='text'>Agile Methodology is not a Religion, it's Just a Passion</title><content type='html'>I spent three days in Oulu, Finland, attending the &lt;a href="http://virtual.vtt.fi/virtual/xp2006/"&gt;XP2006 conference&lt;/a&gt;. I have attended other agile conferences, but this was the first time I attended this conference, which was the 7th in series of XP conferences. I have to say I was impressed. The conference is about practitioners to the degree that you really get to sense the belonging in a &lt;a href="http://en.wikipedia.org/wiki/Community_of_practice"&gt;community of practice&lt;/a&gt;. Authors of best selling books, key note speakers, most successful agile consultants in the world, signers of the original &lt;a href="http://www.agilemanifesto.org/"&gt;agile manifesto&lt;/a&gt;, other practitioners from all around the world, all open for discussion on this shared passion, without trying to close a contract before telling more.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/passion%20fruit%20small.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 142px; CURSOR: hand; HEIGHT: 239px" height="169" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/passion%20fruit%20small.jpg" width="109" border="0" /&gt;&lt;/a&gt;I saw that strong passion of doing things right as the combining force of this community.&lt;br /&gt;&lt;br /&gt;(Some) People are passionate about religion, too. This is why I think agile thinking is sometimes compared to religion, and comparison of agile and waterfall like methods is said to be a religious war. I saw nothing like religion (at least in a bad sense) in this conference. Instead lots of presentations and hallway talks alike concentrated on balancing methods, applying best from the both worlds, taking existing organization culture into count etc. I do not see this resembling fundamentalist religion at all, do you?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have to say that in the early days of agile movement I sensed that strong black and white positioning as well. I participated in that. This I believe was the result of so strong survival anxiety after being so fed up with the situation and just wanting to get rid of the old ways of doing stuff all at once. The brilliance of agile methods is manifested in what we are experiencing now. We use continuous retrospectives to improve the method and to adapt it to changing situation. This is possible because practitioners are passionate and enthusiast and put lot of effort into keeping the method fit and healthy.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://virtual.vtt.fi/virtual/xp2006/keynotes.html#Hanly"&gt;Sean Hanly&lt;/a&gt; from &lt;a href="http://www.exoftware.com/"&gt;exoftware&lt;/a&gt; pointed out in his key note that we must be careful not the end up in the process graveyard with the famous "failures" like RUP, CMM(I), Waterfall and numerous others... By saying this Sean meant that the interpretation of original methodology is in danger to get twisted when number of interpreters increase. When agile development is moving into mainstream we are going to see a lot more practitioners without this passion, but just making the use of a new tool.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pst.ifi.lmu.de/~baumeist/xp2006/"&gt;There are photos from the conference... &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115104137872780909?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115104137872780909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115104137872780909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115104137872780909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115104137872780909'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/06/agile-methodology-is-not-religion-its.html' title='Agile Methodology is not a Religion, it&apos;s Just a Passion'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-115027969880132590</id><published>2006-06-14T12:07:00.000+02:00</published><updated>2006-06-14T12:18:26.536+02:00</updated><title type='text'>Comprehensive Documentation for Riding a Bike is Difficult</title><content type='html'>&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0195092694/qid=1150277949/sr=8-1/ref=sr_8_xs_ap_i1_xgl/026-9041977-8285227"&gt;Nonaka and Takeuchi (1995)&lt;/a&gt; defined knowledge as explicit and tacit. This view is of course shared with other researchers in organizational learning.&lt;br /&gt;&lt;br /&gt;I &lt;a href="http://ng-embedded.blogspot.com/2006/05/get-work-done-documentation-concidered.html"&gt;posted&lt;/a&gt; about agile development emphasizing E&lt;em&gt;nable Future Work&lt;/em&gt; -documents (as &lt;a href="http://www.jamesshore.com/Blog/Two-Kinds-of-Documentation.html"&gt;described by James Shore&lt;/a&gt;). That holds, but it still does not make creating quality documents easy.&lt;br /&gt;&lt;br /&gt;Day after day engineers will arrive at work and launch MS Word alone because they need to document their work for future use. Unfortunately some will open the same tool for documenting what they are planning to do, but this is Get Work Done- documentation (as &lt;a href="http://www.jamesshore.com/Blog/Two-Kinds-of-Documentation.html"&gt;describ&lt;/a&gt;&lt;a href="http://www.jamesshore.com/Blog/Two-Kinds-of-Documentation.html"&gt;ed by Jim Shore&lt;/a&gt;), and we are not talking about that now. At the exact same time same number of engineers will get a copy of such a document to start working based on it. By the lunch time most of them have realized the same old thing; "Just words, not even grasp of what I would have needed, half a day wasted, thank you very much."&lt;br /&gt;&lt;br /&gt;I'm reading the &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0521663636/qid=1150278009/sr=8-2/ref=sr_8_xs_ap_i2_xgl/026-9041977-8285227"&gt;Communities of Practice, by Etienne Wegner&lt;/a&gt;, for the second time. This time I understand a lot more, but of course I am still not fully getting it. However Etienne gives good example of two sides of knowledge, explicit and tacit. &lt;a href="http://www.ewenger.com/"&gt;Mr. Wenger &lt;/a&gt;used skill of riding a bike as an example. Most of us master this skill, and we can explain it - even fairly well - in paper;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6444/2503/1600/Helping_hand_2_small.2.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/6444/2503/200/Helping_hand_2_small.2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"&lt;em&gt;Push some initial speed, start pedaling and just steer where ever you want to go.&lt;/em&gt; "&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is the explicit part, but there is one fundamental ingredient missing in the above document. How do you keep the balance? This is the tacit knowledge part, and it is extremely hard to put on paper. I give you few minutes to think about it...&lt;br /&gt;&lt;br /&gt;OK, I tried it also while reading the book, and it reminded me about something we all have experienced.&lt;br /&gt;&lt;br /&gt;Agile methods promote simple design to the degree that documentation is not necessary. In embedded world where you want to minimize the material cost you often end up in software and hardware design which are based on intuition. This tacit information is difficult to put on paper, just like the balancing bit of riding a bike. How many times you have been explaining your design to a peer until a bit of detail which has no meaning to you opens the design to your colleague? These obvious facts seldom get identified and reported in paper document created by the original designer individually. As a consequence the document has little or no value. This was manifested with our &lt;a href="http://ng-embedded.blogspot.com/2006/04/three-day-faceoffs.html"&gt;three-day faceoffs &lt;/a&gt;recently. This has nothing to do with agile development methods, since they promote simple design and light documentation?&lt;br /&gt;&lt;br /&gt;Quite the contrary. Agile teams work well in preserving and sharing tacit knowledge among members. Daily meetings, retrospective and pair programming(co-design/debugging) are natural techniques for this. Additionally the team commits to deliver work (software/product) which is "done". Done means delivered with just enough and barely sufficient documentation. Agile team should have also shared commitment to deliver necessary documentation, which would enable them to create the documentation in collaborative way. This type of activity is valued in RaPiD7 (Ph.D. &lt;a href="http://www.agile-itea.org/public/papers/RaPiD7.pdf"&gt;pdf&lt;/a&gt;), an agile method for creating documents developed at Nokia. Of course the best thing would be to have the "customer" of a document present during the creation work (or that the "customer" writes the document as Vasco Duarte &lt;a href="http://softwaredevelopmenttoday.blogspot.com/2006_02_01_softwaredevelopmenttoday_archive.html"&gt;proposes&lt;/a&gt;), but this customer for Enable Future Work -documentation is often not available at that point.&lt;br /&gt;&lt;br /&gt;The next best thing might just be a collective team responsibility with other project stakeholders and to give it your best shot from multiple perspectives instead of single unmotivated view.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-115027969880132590?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/115027969880132590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=115027969880132590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115027969880132590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/115027969880132590'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/06/comprehensive-documentation-for-riding_14.html' title='Comprehensive Documentation for Riding a Bike is Difficult'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24172883.post-114961062502837784</id><published>2006-06-06T18:15:00.000+02:00</published><updated>2006-06-06T19:22:15.476+02:00</updated><title type='text'>embUnit has some additional features</title><content type='html'>I posted about my &lt;a href="http://ng-embedded.blogspot.com/2006/04/cruisecontrol-is-great-for-firmware.html"&gt;options&lt;/a&gt; for proceeding with &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt;. A while ago I already wrote a python script which ran the unit tests, and interpreted the results into XML following the JUnit schema. This seemed to be working, but there was one major problem. embUnit output did not include any detail about successfull tests. So I started looking my options again. I took a look at CUnit. It has XML output for its own translator, but this of course does not follow JUnit schema either, so I was not getting any closer.&lt;br /&gt;&lt;br /&gt;Then while browsing through embUnit source I made an interesting discovery. The code for embUnit library does not require standard C libraries. This I believe is the embedded part of it. In the distribution there is however additional source code for two different user interfaces; 1) text and 2) XML. These can be compiled into another library (the basic libary comes as binary with distribution), which can be used for host run unit tests. Two libraries can be tied together with nice function pointer usage, similar to what I tried to explain &lt;a href="http://ng-embedded.blogspot.com/2006/05/objects-and-firmware-polymorphism.html"&gt;earlier&lt;/a&gt;. Everything is coming together beatifully. Example of generated XML report is below. This again does not of course follow the JUnit schema, so I will continue by modifying the CruiseControl XSL translator for it. &lt;br /&gt;&lt;br /&gt;&lt;IFRAME SRC="http://users.tkk.fi/~tpunkka/blog/snippets/TEST-result.xml" WIDTH=420 HEIGHT=150&gt;&lt;br /&gt;If you can see this, your browser doesn't understand IFRAME.  However, we'll still &lt;br /&gt;&lt;A HREF="http://users.tkk.fi/~tpunkka/blog/snippets/TEST-result.xml"&gt;link&lt;/A&gt; &lt;br /&gt;you to the file.&lt;br /&gt;&lt;/IFRAME&gt;&lt;br /&gt;&lt;br /&gt;To be cont'd...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24172883-114961062502837784?l=ng-embedded.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ng-embedded.blogspot.com/feeds/114961062502837784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24172883&amp;postID=114961062502837784' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/114961062502837784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24172883/posts/default/114961062502837784'/><link rel='alternate' type='text/html' href='http://ng-embedded.blogspot.com/2006/06/embunit-has-some-additional-features_06.html' title='embUnit has some additional features'/><author><name>Timo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
