<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-2908580337550470500</atom:id><lastBuildDate>Thu, 23 Feb 2012 18:15:55 +0000</lastBuildDate><category>gtd</category><category>branching</category><category>scrum</category><category>agile</category><category>tips</category><category>consulting</category><category>rtm</category><category>programming</category><category>development</category><category>startup</category><category>scm</category><category>project management</category><category>version control</category><category>productivity</category><category>meetings</category><category>pomodoro</category><category>review</category><category>book</category><category>employment</category><category>tickler</category><title>Devoted Developer</title><description>A blog for software developers in general and IT consultants in particular.</description><link>http://www.devoteddeveloper.com/</link><managingEditor>noreply@blogger.com (Magnus Nord)</managingEditor><generator>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DevotedDeveloper" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="devoteddeveloper" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">DevotedDeveloper</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-113958108571157966</guid><pubDate>Tue, 21 Feb 2012 21:01:00 +0000</pubDate><atom:updated>2012-02-23T19:15:55.887+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">productivity</category><category domain="http://www.blogger.com/atom/ns#">pomodoro</category><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">scrum</category><title>The Pomodoro Technique® and Scrum: Objective I</title><description>&lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Pomodoro Technique" border="0" alt="Pomodoro Technique" align="left" src="http://lh4.ggpht.com/-KkTJ06pOUpE/T0LIwZ8sfzI/AAAAAAAAALU/7fhQhf_c8zc/pomodoro%25255B7%25255D.png?imgmax=800" width="128" height="128"&gt;This is the first post in a series about applying the &lt;a title="The Pomodoro Technique" href="http://www.pomodorotechnique.com/" target="_blank"&gt;Pomodoro Technique®&lt;/a&gt; to &lt;a title="Scrum Alliance" href="http://www.scrumalliance.org/" target="_blank"&gt;Scrum&lt;/a&gt; and for development.&lt;/p&gt; &lt;p&gt;Each post covers one of the Pomodoro Technique® objectives. The first objective is to &lt;strong&gt;find out how much effort an activity requires&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;I started using the Pomodoro Technique® a couple of weeks ago. At first simply trying to work focused for 25 minutes with 5 minute breaks. I didn’t do this all the time, though, as I didn’t feel my working environment allowed it.&lt;/p&gt; &lt;p&gt;Today, I primarily use the Pomodoros when developing. When I get a chance, I will definitely apply it to other tasks as well, such as writing and studying.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;h2&gt;Development Pomodoros&lt;/h2&gt; &lt;p&gt;I write down the tasks I have committed to at the daily standup on my Pomodoro To Do Sheet. This helps me focus on these tasks and contribute more to the Sprint progress.&lt;/p&gt; &lt;div class="excerpt"&gt;...it gives you natural slack for refactoring and improving design.&lt;/div&gt; &lt;div class="excerpt-bottom"&gt;&lt;/div&gt; &lt;p&gt;The greatest advantage of the Pomodoro Technique® in the context of Scrum is that it gives you natural slack for refactoring and improving design. This is supposed to be done throughout sprints, but is in reality often overlooked.&lt;/p&gt; &lt;p&gt;When you finish a task before a Pomodoro has ended, the technique dictates that you &lt;em&gt;overlearn&lt;/em&gt;. For development Pomodoros I suggest refactoring is equally – if not more – beneficial.&lt;/p&gt; &lt;p&gt;Using the technique makes it easier to focus on &lt;em&gt;one&lt;/em&gt; task at a time – instead of working on several things simultaneously. One difficulty was how to deal with code related side tracks, for example browsing for documentation or learning how an API works in more detail. Now I use common sense: either marking the task as an unplanned activity, or following up on it if I feel it is important in order to finish the current task in a satisfactory manner.&lt;/p&gt; &lt;p&gt;Another advantage of the increased focus on the task at hand is that it becomes easier to commit code as coherent entities. Checkouts are not cluttered with files from different contexts. This is admittedly something you should take care to accomplish anyway, but if you’re anything like me and slip from time to time, the Pomodoro Technique® helps.&lt;/p&gt; &lt;h2&gt;The Five Minute Break&lt;/h2&gt; &lt;p&gt;I initially found it difficult to stop working immediately as the buzzer rang. I still don’t stop typing immediately. At the very least I finish the word or statement I’m writing. I don’t want to leave the file in a non-compilable state.&lt;/p&gt; &lt;p&gt;Some of things I do in the five minute break:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Get a cup of coffee  &lt;li&gt;Walk around  &lt;li&gt;Get some air  &lt;li&gt;Talk to a colleague (who’s not in the middle of a Pomodoro :-)) &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;It’s amazing how much you can do in five minutes. I have no problems going to the men’s room &lt;em&gt;and&lt;/em&gt; getting a cup of coffee.&lt;/p&gt; &lt;h2&gt;Daily Standups&lt;/h2&gt; &lt;div class="excerpt"&gt;I review the To Do Sheet before the daily standup meeting.&lt;/div&gt; &lt;div class="excerpt-bottom"&gt;&lt;/div&gt; &lt;p&gt;So far, I don’t record the Pomodoros at the end of the day. Instead, I review the To Do Sheet before the daily standup meeting.&lt;/p&gt; &lt;p&gt;Looking back at the Pomodoros finished from the day before gives you a good overview of &lt;em&gt;what&lt;/em&gt; you have done, and &lt;em&gt;how much&lt;/em&gt; time you spent doing it – very much in line with the first objective of the Pomodoro Technique®. You also get hints about any problems you’ve had and unplanned tasks that have popped up (and can be addressed as a problem, or should be added to the Scrum board as unplanned items).&lt;/p&gt; &lt;h2&gt;Conclusions&lt;/h2&gt; &lt;p&gt;When developing, as Pomodoros are indivisible, you automatically get small buffers for refactoring and improving design.&lt;/p&gt; &lt;p&gt;Using Pomodoros help in giving accurate feedback at the daily standup. The technique also helps to focus on technical tasks committed to at the daily standup.&lt;/p&gt; &lt;p&gt;In the next post I will write about the second objective: cut down on interruptions.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-113958108571157966?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/02/pomodoro-scrum-development-objective-i.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-KkTJ06pOUpE/T0LIwZ8sfzI/AAAAAAAAALU/7fhQhf_c8zc/s72-c/pomodoro%25255B7%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-3618277101748203284</guid><pubDate>Sun, 19 Feb 2012 19:27:00 +0000</pubDate><atom:updated>2012-02-19T20:35:21.209+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">project management</category><category domain="http://www.blogger.com/atom/ns#">scrum</category><title>The Eternal Triangle</title><description>&lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="devoted" border="0" alt="devoted" align="left" src="http://lh3.ggpht.com/-2J_vk3hzdS4/T0FO00XKNrI/AAAAAAAAAKk/DFpRpiNQCXs/devoted%25255B2%25255D.png?imgmax=800" width="128" height="128"&gt;The project management triangle is an illustration of how a project’s constraints correlate.&lt;/p&gt; &lt;p&gt;It is a useful tool to help stakeholders and customers understand that they can’t get everything (“pick any two”). It can also be the starting-point for discussions about a project’s relative priorities.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;The project management triangle is usually shown as in the figure below. The sides show three constraints in project management: time, cost and scope. Quality is put in the middle to illustrate how it relates to the three constraints.&lt;/p&gt; &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Project Management Triangle" border="0" alt="Project Management Triangle" src="http://lh3.ggpht.com/-cjxJHHmbGms/T0FO1r9Pw9I/AAAAAAAAAKo/ajHnknXgd8s/project-management-triangle%25255B3%25255D.png?imgmax=800" width="256" height="252"&gt;&lt;/p&gt; &lt;h2&gt;Variants&lt;/h2&gt; &lt;p&gt;The project management triangle comes in many shapes and forms. Not even necessarily as a triangle. The labels also differ slightly. Scope may be replaced by features or functionality. Cost by resources or budget. Time by timeline or schedule. The meaning is the same, though.&lt;/p&gt; &lt;p&gt;Sometimes the labels are put on the corners instead of the sides, as in the figure below.&lt;/p&gt; &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px auto 10px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Project Management Triangle with constraints on corners" border="0" alt="Project Management Triangle with constraints on corners" src="http://lh6.ggpht.com/-aAQ5ugAeGbc/T0FO2CawmmI/AAAAAAAAAKw/c8BIqfgMS20/project-management-triangle-2%25255B3%25255D.png?imgmax=800" width="256" height="214"&gt;&lt;/p&gt; &lt;p&gt;The project triangle can also be shown as a &lt;em&gt;trilemma&lt;/em&gt;. The labels are then replaced by &lt;em&gt;fast&lt;/em&gt;, &lt;em&gt;good&lt;/em&gt; and &lt;em&gt;cheap&lt;/em&gt;. It is in this context you say “pick any two”. The remaining constraint depends on the other two – and cannot be controlled. For example, you can build something fast and cheap, but it will probably not be very good.&lt;/p&gt; &lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Project Trilemma" border="0" alt="Project Trilemma: Pick two of cheap, fast and good" src="http://lh4.ggpht.com/-07jSeJq5aSY/T0FO3UP9TRI/AAAAAAAAAK8/N5sU4GBc5kc/project-trilemma%25255B3%25255D.png?imgmax=800" width="256" height="244"&gt;&lt;/p&gt; &lt;p&gt;There are also other versions, for example the &lt;em&gt;project diamond&lt;/em&gt; and PMIs &lt;em&gt;point star&lt;/em&gt; (two inverted triangles where the second one depicts risk, quality and resources).&lt;/p&gt; &lt;p&gt;While these and other “evolved” versions of the project management triangle may better depict the real complexity of projects, they lose some of the simplistic beauty of the traditional triangle.&lt;/p&gt; &lt;h2&gt;Possible Use&lt;/h2&gt; &lt;p&gt;As the project triangle shows a simplified picture of a project, it works best as the basis for discussions and to illustrate a point.&lt;/p&gt; &lt;p&gt;As an example: in a previous post called &lt;a title="Fixed Price Contracts - A False Sense of Security?" href="http://www.devoteddeveloper.com/2012/01/fixed-price-contracts-false-sense-of.html"&gt;Fixed Price Contracts - A False Sense of Security?&lt;/a&gt; I write about how fixed prices “lock” all sides of the triangle and significantly increase the risk of project failure. In other words, in the context of a fixed price contract, the project triangle shows how quality is the only factor workable by the contractor.&lt;/p&gt; &lt;h2&gt;Scrum and the Project Management Triangle&lt;/h2&gt; &lt;p&gt;It might seem like Scrum disregard the basic idea of the project management triangle. Sprints have locked time, cost &lt;em&gt;and&lt;/em&gt; functionality. The time of a sprint is always the same. The team should not change. The team has also committed to finishing a set number of user stories, or features.&lt;/p&gt; &lt;p&gt;The truth is that while a sprint seemingly violates the prerequisites of the project triangle, quality is never supposed to be jeopardized.&lt;/p&gt; &lt;p&gt;Using the concept of &lt;em&gt;velocity&lt;/em&gt;, Scrum teams &lt;em&gt;adapt&lt;/em&gt; the scope iteratively after each completed sprint. It is ok not to finish all the user stories in a sprint. Sprints even have built-in &lt;em&gt;quality assurance&lt;/em&gt; in the form of the &lt;em&gt;definition of done&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;As the definition of done is continuously worked on and improved, the Scrum team also assures quality of delivered code improves.&lt;/p&gt; &lt;div class="linkbox"&gt; &lt;p&gt;&lt;strong&gt;Dig Deeper - &lt;/strong&gt;Useful Web Resources&lt;/p&gt; &lt;p&gt;&lt;a title="Wikipedia article: Project Management Triangle" href="http://en.wikipedia.org/wiki/Project_management_triangle" target="_blank"&gt;Project Management Triangle&lt;/a&gt;&lt;br&gt;&lt;font color="#a5a5a5"&gt;Wikipedia’s article about the project management triangle.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Every Project Plan is a Triangle" href="http://office.microsoft.com/en-us/project-help/every-project-plan-is-a-triangle-HA001021180.aspx" target="_blank"&gt;Every Project Plan is a Triangle&lt;/a&gt;&lt;br&gt;&lt;font color="#a5a5a5"&gt;Article written by Microsoft about the project triangle. Writes about “stuck sides” and how to optimize for the different sides of the triangle.&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-3618277101748203284?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/02/project-triangle-quality-scrum.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-2J_vk3hzdS4/T0FO00XKNrI/AAAAAAAAAKk/DFpRpiNQCXs/s72-c/devoted%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-868672522969697229</guid><pubDate>Wed, 15 Feb 2012 19:42:00 +0000</pubDate><atom:updated>2012-02-15T20:43:39.633+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">startup</category><category domain="http://www.blogger.com/atom/ns#">employment</category><category domain="http://www.blogger.com/atom/ns#">tips</category><title>5 Reasons to Refrain from a Startup Job Offering</title><description>&lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Business Handshake" border="0" alt="Business Handshake " align="left" src="http://lh4.ggpht.com/-OVRi4C7fI88/Txs_K1LhL9I/AAAAAAAAACg/Hi-oq-G_LBk/handshake%25255B4%25255D.png?imgmax=800" width="128" height="86"&gt;&lt;/p&gt; &lt;p&gt;Working for a small company has a lot of benefits. It is easier to make your voice heard and get recognition for your work. Smaller companies sometimes take better care of their employees and offer benefits not available in larger corporations. Most of all, though, it’s a lot of fun!&lt;/p&gt; &lt;p&gt;Working in a startup is also associated with greater uncertainty. If the company is in a decisive period and management fails to make the right decisions, your job security is jeopardized. &lt;/p&gt; &lt;p&gt;Here are five things that you should ponder before accepting a job offer from a startup or small IT company.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;h2&gt;1. Poor Management&lt;/h2&gt; &lt;div class="excerpt"&gt;Management is important. Poor management is disastrous.&lt;/div&gt; &lt;div class="excerpt-bottom"&gt;&lt;/div&gt; &lt;p&gt;Management is important. Poor management is disastrous. The problem is that new and small companies have inexperienced managers to a greater extent.&lt;/p&gt; &lt;p&gt;The first sign of poor management is a &lt;strong&gt;non-serious hiring process&lt;/strong&gt;. This may indicate how other things are conducted as well. If you meet with the CEO and he/she is late or come ill-prepared, this is clearly not a good first impression.&lt;/p&gt; &lt;h2&gt;2. No Business Plan&lt;/h2&gt; &lt;p&gt;&lt;strong&gt;Ask to see the business plan&lt;/strong&gt;, or at least ask about the company’s vision and the way they plan to get there.&lt;/p&gt; &lt;p&gt;The business plan is one of the things venture capitalists evaluate before investing. The business plan contains the company’s vision and goals. It should also cover potential customers, target markets and how the company expects to grow. All companies should have a business plan. If not a formal one, at least clearly stated visions and goals.&lt;/p&gt; &lt;p&gt;In addition to a business plan, they should also have a very clear idea of why they hire &lt;em&gt;you&lt;/em&gt;. Ask for a written &lt;strong&gt;job description&lt;/strong&gt; – this is especially important if you are hired for a key position or management role.&lt;/p&gt; &lt;h2&gt;3. A Lot of Hot Air&lt;/h2&gt; &lt;p&gt;Any talk about &lt;strong&gt;“90% there” &lt;/strong&gt;is a bad sign. It pretty much just means they are not there at all. The old cliché &lt;strong&gt;if it sounds to good to be true, it probably is &lt;/strong&gt;fits well here. If they promise you milk and honey, expect water and bread :-)&lt;/p&gt; &lt;div class="excerpt"&gt;Having a vision and being able to sell the business is essential for success.&lt;/div&gt; &lt;div class="excerpt-bottom"&gt;&lt;/div&gt; &lt;p&gt;Personally, and from own experiences, I find realistic down to earth people more trustworthy. There is a trade-off here, though. Having &lt;strong&gt;a vision and being able to sell the business is essential for success&lt;/strong&gt;. However, there is a fine line between being visionary and optimistic, and naïve and manipulating.&lt;/p&gt; &lt;h2&gt;4. Inadequate Organization&lt;/h2&gt; &lt;p&gt;An inadequate organization can cause problems. Holding several positions (being an owner, sitting on the board, and/or being part of operational management) cause intrapersonal conflicts which leads to bad decision making. &lt;strong&gt;Investigate the ownership structure.&lt;/strong&gt;&lt;/p&gt; &lt;h2&gt;5. Insufficient Capital&lt;/h2&gt; &lt;p&gt;It takes money to make money. In Sweden, at least, you can &lt;strong&gt;get a credit report&lt;/strong&gt; for a business as a private person. If you feel the least bit hesitant about the company’s financial situation, look it up. Companies won’t think twice about doing a background check on you.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-868672522969697229?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/02/job-offering-startup-tips-employment.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-OVRi4C7fI88/Txs_K1LhL9I/AAAAAAAAACg/Hi-oq-G_LBk/s72-c/handshake%25255B4%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-8380858645834295606</guid><pubDate>Sat, 11 Feb 2012 18:24:00 +0000</pubDate><atom:updated>2012-02-12T16:58:47.980+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">scm</category><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">version control</category><category domain="http://www.blogger.com/atom/ns#">branching</category><title>Purposeful Branching</title><description>&lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="wrench" border="0" alt="wrench" align="left" src="http://lh4.ggpht.com/-9ktvEynDUpM/TzaqKWC4KVI/AAAAAAAAAJ0/yFmWZ_ZlEKY/wrench%25255B2%25255D.png?imgmax=800" width="128" height="116"&gt;Version control, also known as revision control or source control, is an integral part of software development. Like chess, it is easy to learn the basic principles but takes a lifetime to master. Many teams end up in an impenetrable jungle of branches and merging.&lt;/p&gt; &lt;p&gt;Having a well thought-out branching strategy is crucial. This article covers the basics of branching, and suggests a branching strategy to use: branch by purpose.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;h2&gt;&lt;a name="introduction"&gt;Introduction&lt;/a&gt;&lt;/h2&gt; &lt;div class="toc"&gt;&lt;strong&gt;Table of Content&lt;/strong&gt;&lt;br&gt;&lt;a href="#introduction"&gt;Introduction&lt;/a&gt;&lt;br&gt;&lt;a href="#what_is_a_branch"&gt;What Is a Branch?&lt;/a&gt;&lt;br&gt;&lt;a href="#merging"&gt;Merging: What Goes Up Must Come Down&lt;/a&gt;&lt;br&gt;&lt;a href="#strategies"&gt;Branching Strategies&lt;/a&gt;&lt;br&gt;&lt;a href="#wrap-up"&gt;Wrap-Up&lt;/a&gt; &lt;/div&gt; &lt;p&gt;Version control is important of several reasons. It allows sharing of the codebase within and between teams. It gives the ability to go back to earlier versions associated with specific releases, etc. It enables parallel development. And so on.&lt;/p&gt; &lt;p&gt;Version control, used properly, can also help keeping code tidy. For example, instead of commenting out blocks of code that “might come in handy” code can safely be deleted and brought back from the repository if need be.&lt;/p&gt; &lt;div class="tip"&gt;&lt;strong&gt;Don’t keep blocks of code that are commented out&lt;/strong&gt;&lt;br&gt;Code that is commented out is only confusing for others that read the code, and others won’t dare to delete it. Clean it up!&lt;/div&gt; &lt;p&gt;As a project grows in complexity, the importance of maintaining control of software versions increases as well.&lt;/p&gt; &lt;h2&gt;&lt;a name="what_is_a_branch"&gt;What is a Branch?&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;What a branch is technically depends on the version control software being used. Generally speaking, when branching, two separate codelines are created. This allows developers to work on different versions of the code simultaneously. Or, as &lt;a title="Wikipedia article: Branching (software)" href="http://en.wikipedia.org/wiki/Branching_(software)" target="_blank"&gt;Wikipedia&lt;/a&gt; puts it:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;b&gt;Branching&lt;/b&gt;, in &lt;a href="http://en.wikipedia.org/wiki/Revision_control"&gt;revision control&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Software_configuration_management"&gt;software configuration management&lt;/a&gt;, is the duplication of an object under revision control (such as a source code file, or a directory tree) so that modifications can happen in parallel along both branches.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;You always start out with a single master branch, also called &lt;em&gt;trunk&lt;/em&gt;. From this multiple child branches can be created. These, in turn, can have their own children.&lt;/p&gt; &lt;p&gt;In most version control systems the codebase can also be &lt;em&gt;tagged&lt;/em&gt;. The technical meaning of this also varies between products. For example, &lt;a title="Apache Subversion" href="http://subversion.apache.org/" target="_blank"&gt;Subversion&lt;/a&gt; makes no difference between branches and tags.&lt;/p&gt; &lt;p&gt;Conceptually, a tag is just a label connected to a specific commit. Tags make it easy to bookmark and find points in the code’s history, for example releases.&lt;/p&gt; &lt;p&gt;Branches are depicted in branch diagrams. The figure below illustrates such a diagram with two branches (named “trunk” and “branch”) and a tag (named “tag” – imagine that). The diagram also shows a &lt;em&gt;merge&lt;/em&gt; (the green dashed arrow) from “branch” to “trunk”.&lt;/p&gt; &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Example branch diagram" border="0" alt="Branch diagram with tag and merge arrow" src="http://lh3.ggpht.com/-M61EKnIyXs0/TzAvmgtwk-I/AAAAAAAAAHE/brLjfP6phH8/branch-example%25255B4%25255D.png?imgmax=800" width="309" height="111"&gt;&lt;/p&gt; &lt;p&gt;Branches can be created for several reasons. For example when a team works on a specific feature, or when the code enters a release cycle.&lt;/p&gt; &lt;p&gt;I divide branches into two main categories: Temporary and permanent. The former is temporary in the sense that it will eventually be merged back to the parent branch and then deleted. The latter, though permanent, is often involved in merge operations as well.&lt;/p&gt; &lt;h2&gt;&lt;a name="merging"&gt;Merging: What Goes Up Must Come Down&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Merging is the process of integrating two branches. The changes from one branch are incorporated into another branch.&lt;/p&gt; &lt;p&gt;While it is easy to create a branch (maybe too easy sometimes), merging on the other hand, can be tricky, cause headaches, and leave the resulting codebase in a volatile state. People can even get afraid of, and postpone, merging, so called “merge paranoia”. To quote &lt;a title="Wikipedia article about Martin Fowler" href="http://en.wikipedia.org/wiki/Martin_Fowler" target="_blank"&gt;Martin Fowler&lt;/a&gt;, one of the persons behind the agile manifesto, in his article about &lt;a title="Martin Fowler - Continuous Integration" href="http://martinfowler.com/articles/continuousIntegration.html"&gt;continuous integration&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;One of the features of version control systems is that they allow you to create multiple branches, to handle different streams of development. This is a useful, nay essential, feature - but it's frequently overused and gets people into trouble. Keep your use of branches to a minimum.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;As he points out, creating branches is an essential feature of version control systems, but you shouldn’t overuse it. On the other hand, some people may just accuse Mr. Fowler of suffering from a bad case of merge paranoia :-) Nevertheless, don’t create branches unnecessarily.&lt;/p&gt; &lt;div class="tip"&gt;&lt;strong&gt;Don’t create a branch unless you’re willing to take care of it.&lt;/strong&gt;&lt;br&gt;Orphan branches and branches that are not properly maintained will sooner or later cause problems.&lt;/div&gt; &lt;p&gt;One way to ease merging operations is to merge often. For example, in a temporary branch as the one below; merge regularly from the parent branch to the child. Then, right before assimilating the child branch (we are the Borg!); do a final merge to the child branch. In other words, the integration should be done in the child branch. You probably &lt;em&gt;don’t&lt;/em&gt; want to break the parent codeline.&lt;/p&gt; &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Temporary branch" border="0" alt="Temporary branch with merging" src="http://lh5.ggpht.com/-3Y-CEjt_38w/TzZG1l78L5I/AAAAAAAAAJ8/zXcv1fdGmWA/temporary-branch.png?imgmax=800" width="351" height="94"&gt;&lt;/p&gt; &lt;h2 align="left"&gt;&lt;a name="strategies"&gt;Branching Strategies&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;As mentioned, branches are created for many reasons. For example:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The code enters a release cycle.  &lt;li&gt;A team is working on a feature that will take a long time to finish.  &lt;li&gt;Custom changes for a customer.  &lt;li&gt;To fix a bug.  &lt;li&gt;Personal branches to work on different problems.  &lt;li&gt;Experimental code and to try out ideas&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;In my opinion, these branches are not always justified and you risk ending up in “branch mania”&lt;em&gt;. &lt;/em&gt;For example, it is better to incorporate customer specific changes in the main codeline. If you feel you can’t – the argument often being time related – you’re going down a dangerous path. But that’s a whole other story.&lt;/p&gt; &lt;p&gt;While the examples above may need to be covered, I wouldn’t call them branching strategies in their own rights. I prefer using the term &lt;em&gt;branching strategy&lt;/em&gt; for the overall picture:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Rules for creating and maintaining branches.  &lt;li&gt;Types of branches used.  &lt;li&gt;Naming conventions.  &lt;li&gt;Best practices and guidelines.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The branching strategy should contain information on how to handle releases, when it is appropriate to create temporary codelines and the rules for committing code. For example, in some branches (such as the branch used for normal development) it is ok to commit code as long as it builds and is tested while other branches may only allow approved changes.&lt;/p&gt; &lt;p&gt;I think a good branching strategy should have at least these three characteristics:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Make life as easy as possible for users.  &lt;li&gt;Keep branches to a minimum.  &lt;li&gt;Ensure parallel development is supported.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;I will now briefly describe two strategies for release branching: branch by release and branch by purpose, of which I advocate the latter. Partly because it works well with agile development. Feel free to disagree and convince me why some other strategy is better :-) Both models work in conjunction with other temporary branches, and a branching strategy needs to describe these types as well to be complete. However, I will not cover that here.&lt;/p&gt; &lt;h3&gt;Branch by Release&lt;/h3&gt; &lt;p&gt;In this model, a new branch is created for the next release (see figure below) while the parent branch follows the lifecycle of the current release. Development continues in the new branch, while the old branch contains the released version. This means developers need to switch branch when a new version of the software is released.&lt;/p&gt; &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Branch by release diagram" border="0" alt="Branch by release diagram" src="http://lh5.ggpht.com/-OLSQR8cBCPA/TzZOOyw7hbI/AAAAAAAAAIE/tC3gx8bOASw/branch-by-release%25255B4%25255D.png?imgmax=800" width="579" height="268"&gt;&lt;/p&gt; &lt;p&gt;When a maintenance release is required, bugs are fixed in the branch belonging to the release in question. These fixes then need to be propagated to subsequent branches.&lt;/p&gt; &lt;p&gt;Another important point is that all checked out code needs to be committed before the codebase is branched off – otherwise developers risk committing code to a branch that has changed purpose and is now staging area for a release. (This is because you have to commit code to the branch from where it was checked out.) Not very user friendly in my opinion.&lt;/p&gt; &lt;h3 align="left"&gt;Branch by Purpose&lt;/h3&gt; &lt;p align="left"&gt;With this model, the &lt;em&gt;purpose&lt;/em&gt; of a branch never changes. Instead a new branch is created to host changed requirements (see figure below).&lt;/p&gt; &lt;p align="left"&gt;One of the big advantages of this strategy is that normal development is always done in the master branch (trunk). This makes life easy for developers. It also works very well with continuous integration&lt;em&gt;. &lt;/em&gt;Martin Fowler again:&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;In particular have a &lt;b&gt;mainline&lt;/b&gt;: a single branch of the project currently under development. Pretty much everyone should work off this mainline most of the time. (Reasonable branches are bug fixes of prior production releases and temporary experiments.)&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;When using branch by purpose, it may be necessary to introduce a &lt;em&gt;feature freeze&lt;/em&gt; period during which no new functionality is added. Only fixes and unfinished work are done after this point. When the code is deemed ready for release a branch is created and handed over to release management.&lt;/p&gt; &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Branch by purpose diagram with feature freeze" border="0" alt="Branch by purpose diagram with feature freeze" src="http://lh6.ggpht.com/-ywlwp5tBbao/TzZZABPfU9I/AAAAAAAAAIU/SmfeupRMt2U/branch-by-purpose%25255B3%25255D.png?imgmax=800" width="597" height="132"&gt;&lt;/p&gt; &lt;p&gt;To support parallel development, a &lt;em&gt;bridge&lt;/em&gt; branch may be created where teams can start working on the next release (see figure below).&lt;/p&gt; &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Branch by purpose diagram with bridge" border="0" alt="Branch by purpose diagram with bridge" src="http://lh5.ggpht.com/-_S5nO2j1i8Q/TzZZAtfcATI/AAAAAAAAAIc/qWlDpj2EmY8/branch-by-purpose-with-bridge%25255B8%25255D.png?imgmax=800" width="597" height="193"&gt;&lt;/p&gt; &lt;p align="left"&gt;Another solution is to branch off immediately when all features are done. This, however, somewhat breaks the branch by purpose paradigm, as it means fixes that could be considered part of normal development are carried out in the release candidate branch. If there are a lot of fixes initially, this also means a lot of merging back down to the master branch (see figure below).&lt;/p&gt; &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Branch by purpose diagram without code freeze" border="0" alt="Branch by purpose diagram without code freeze" src="http://lh3.ggpht.com/-goZq4tydv2o/TzZZBaazR-I/AAAAAAAAAIg/fjC6RHPfujU/branch-by-purpose-2%25255B8%25255D.png?imgmax=800" width="520" height="120"&gt;&lt;/p&gt; &lt;h2&gt;&lt;a name="wrap-up"&gt;Wrap-Up&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Mastering version control management is important to successfully develop code together. Outlining how to manage branches – and choosing a strategy that aids users and facilitates parallel development – becomes increasingly important as a project’s complexity grows.&lt;/p&gt; &lt;p&gt;Finally, branch by purpose is a great model that fulfills the requirements mentioned. Normal development is always done in the same branch. Parallel development is supported across release cycles.&lt;/p&gt; &lt;p&gt;And remember, merge often and merge well! Don’t create branches unless you are willing to maintain them.&lt;/p&gt; &lt;div class="linkbox"&gt; &lt;p&gt;&lt;strong&gt;Dig Deeper - &lt;/strong&gt;Useful Web Resources&lt;/p&gt; &lt;p&gt;&lt;a title="Martin Fowler - Continuous Integration" href="http://martinfowler.com/articles/continuousIntegration.html" target="_blank"&gt;Continuous Integration&lt;/a&gt;&lt;br&gt;&lt;font color="#a5a5a5"&gt;Choosing a branching strategy that works well with agile development and continuous integration is a given. Martin Fowler’s article on continuous integration is a great place to start.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Branching and Merging Primer" href="http://msdn.microsoft.com/en-us/library/aa730834%28v=vs.80%29.aspx" target="_blank"&gt;Branching and Merging Primer&lt;/a&gt;&lt;br&gt;&lt;font color="#a5a5a5"&gt;This article covers some other branching models, and also discusses branching and merging anti-patterns.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="The Importance of Branching Models in SCM" href="http://svn.haxx.se/users/archive-2007-10/att-0101/SCMBranchingModels.pdf" target="_blank"&gt;The Importance of Branching Models in SCM&lt;/a&gt;&amp;nbsp; &lt;strong&gt;PDF&lt;/strong&gt;&lt;br&gt;&lt;font color="#a5a5a5"&gt;An in-depth article about branching models and a lot more about the difference between “branch by release” and “branch by purpose”. Highly recommended!&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Git" href="http://git-scm.com/" target="_blank"&gt;Git&lt;/a&gt;&lt;br&gt;&lt;font color="#a5a5a5"&gt;Git is an open source, distributed, version control system. It is used, among others, by the Linux Kernel and Eclipse.&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-8380858645834295606?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/02/version-control-branch-strategy.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-9ktvEynDUpM/TzaqKWC4KVI/AAAAAAAAAJ0/yFmWZ_ZlEKY/s72-c/wrench%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-2198540129580753154</guid><pubDate>Mon, 06 Feb 2012 20:13:00 +0000</pubDate><atom:updated>2012-02-06T21:13:55.315+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">project management</category><category domain="http://www.blogger.com/atom/ns#">scrum</category><title>Agile Roadblocks: Lost in Translation</title><description>&lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Agile roadblock" border="0" alt="Agile Roadblock" align="left" src="http://lh3.ggpht.com/-PfC79_EKcwk/TyZwj27FZMI/AAAAAAAAAEc/ZrGhUCvDVX4/roadblock%25255B4%25255D.png?imgmax=800" width="128" height="114"&gt;&lt;/p&gt; &lt;p&gt;In the series about agile roadblocks: obstructions for implementing agile processes in an organization, the time has come to “Lost in Translation”. (Please read the previous posts about &lt;a title="Agile Roadblocks: Stray Team Members" href="http://magnusnord.blogspot.com/2012/01/agile-roadblocks-stray-team-members.html"&gt;stray team members&lt;/a&gt; and &lt;a title="Agile Roadblocks: Drowned by Waterfalls" href="http://www.devoteddeveloper.com/2012/01/agile-roadblocks-drowned-by-waterfalls.html"&gt;drowned by waterfalls&lt;/a&gt; as well.)&lt;/p&gt; &lt;p&gt;People are eager to migrate to agile processes such as Scrum. There’s a lot of talk about sprints, scrum boards and retrospectives. One thing that is overlooked is understanding &lt;em&gt;why&lt;/em&gt; agile works and the rationale behind it.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;h2&gt;Description&lt;/h2&gt; &lt;p&gt;I am convinced that you cannot truly succeed with agile software development unless you understand the principles behind. It is not enough to merely apply the methodology. You have to understand why you do things, and why – if so – agile may actually work in your organization.&lt;/p&gt; &lt;p&gt;Knowing the reasons, and motivation, behind agile processes assist in evaluating and fine-tuning the process. Without the bigger picture, decisions may be contra-dictionary and the expected increase in productivity won’t happen.&lt;/p&gt; &lt;h2&gt;Effects&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;The full effect of migrating to agile may not happen. &lt;li&gt;Agile practices are met with skepticism and suspicion.  &lt;li&gt;Decisions are made that counter the benefits of agile development.&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Detours&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;Educate everyone on why agile development may be successful. There are tons of useful resources online. If you are using Scrum, for example, start by reading the &lt;a title="Scrum Guide - the official rulebook" href="http://www.scrum.org/scrumguides" target="_blank"&gt;Scrum guide&lt;/a&gt; and this excellent blog post about the &lt;a title="Ken Schwaber's blog - The Origins Of Scrum&amp;rsquo;s Ideas And Techniques: An Example" href="http://kenschwaber.wordpress.com/2010/06/18/the-origins-of-scrums-ideas-and-techniques-an-example/" target="_blank"&gt;origins of Scrum&lt;/a&gt; by Ken Schwaber, one of the founders of Scrum.  &lt;li&gt;Try to remember the big picture when making decisions. Ask yourself questions like “Will this lead us to a more effective implementation of agile?” &lt;li&gt;Formulate a vision and long-term goals. Evaluate progress.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-2198540129580753154?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/01/agile-roadblocks-lost-in-translation.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-PfC79_EKcwk/TyZwj27FZMI/AAAAAAAAAEc/ZrGhUCvDVX4/s72-c/roadblock%25255B4%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-7435610909492286091</guid><pubDate>Wed, 01 Feb 2012 21:28:00 +0000</pubDate><atom:updated>2012-02-01T22:29:14.251+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">development</category><category domain="http://www.blogger.com/atom/ns#">consulting</category><title>10 Things Developers Do Except Code</title><description>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/-JCiQ6UHmJ6U/TybqBDzAg5I/AAAAAAAAAE4/TGjEMea89i4/s1600-h/programmer%25255B4%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="programmer" border="0" alt="programmer" align="left" src="http://lh3.ggpht.com/-j1sQNhnhmYQ/TybqBSOTKdI/AAAAAAAAAE8/u0ke67Whpvc/programmer_thumb%25255B2%25255D.png?imgmax=800" width="128" height="128"&gt;&lt;/a&gt;This blog is all about being an IT consultant and software developer. It covers everything. Everything except code. So, what fills a developer’s day other than coding? Here is a list with work day stuffing.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;h3&gt;1. Meet&lt;/h3&gt; &lt;p&gt;A lot of time is spent in meetings. Many meetings are directly related to actual work. There are also project meetings, organizational meetings, customer meetings, and so on.&lt;/p&gt; &lt;h3&gt;&lt;/h3&gt; &lt;h3&gt;2. Communicate&lt;/h3&gt; &lt;p&gt;Phone calls, instant messages, e-mail. I’ve even heard some people still see each other in person.&lt;/p&gt; &lt;h3&gt;3. Read&lt;/h3&gt; &lt;p&gt;Participating in a software development project usually means reading. A lot of reading: Documentation, specifications, manuals, books about development, test cases, reports. The list goes on.&lt;/p&gt; &lt;h3&gt;4. Write &lt;/h3&gt; &lt;p&gt;As if it wasn’t enough to write the code, you have to document it as well ;-) &lt;/p&gt; &lt;h3&gt;5. Supplementary training&lt;/h3&gt; &lt;p&gt;In-house training and external courses are necessary to keep on top of an ever changing industry.&lt;/p&gt; &lt;h3&gt;6. Tutor&lt;/h3&gt; &lt;p&gt;Teaching others, for example new team members and customers.&lt;/p&gt; &lt;h3&gt;7. Presentations&lt;/h3&gt; &lt;p&gt;Preparing and holding presentations for management, colleagues, customers.&lt;/p&gt; &lt;h3&gt;8. Wait&lt;/h3&gt; &lt;p&gt;Wait for code to compile. Wait for meetings to begin. Wait in line for the coffee machine. Wait, wait, wait.&lt;/p&gt; &lt;h3&gt;9. Configuration management&lt;/h3&gt; &lt;p&gt;Maybe you’re not involved in setting up servers, configuring version control etc., but you are often responsible for setting up your own environment.&lt;/p&gt; &lt;h3&gt;10. Socialize&lt;/h3&gt; &lt;p&gt;In Sweden it is called “fika”. I think they say “tea” in England. I’m talking about coffee breaks. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-7435610909492286091?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/02/10-things-developers-do-except-code.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-j1sQNhnhmYQ/TybqBSOTKdI/AAAAAAAAAE8/u0ke67Whpvc/s72-c/programmer_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-6947945668017838787</guid><pubDate>Sat, 28 Jan 2012 20:17:00 +0000</pubDate><atom:updated>2012-01-28T20:47:51.737+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">project management</category><category domain="http://www.blogger.com/atom/ns#">consulting</category><title>Fixed Price Contracts: A False Sense of Security?</title><description>&lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Handshake" border="0" alt="Business handshake" align="left" src="http://lh3.ggpht.com/-EAqXWa7u3N8/TxtApCird3I/AAAAAAAAADM/B9Yw6crdswM/handshake.png?imgmax=800" width="128" height="86"&gt;Many customers prefer fixed price contracts. It makes them feel secure. They know &lt;em&gt;what&lt;/em&gt; they will get, &lt;em&gt;when&lt;/em&gt; they will get it, and &lt;em&gt;how much&lt;/em&gt; it will cost. Or do they?&lt;/p&gt; &lt;p&gt;Pitching contractors against each other on a fixed price may seem like a good idea, but what effects does this have on bids, the project, and – consequently – the final result?&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;Saying no to a contract is difficult, especially for a small company. Estimated times and costs may therefore be questioned internally. The persons responsible for the estimates feel pressured to adjust them.&lt;/p&gt; &lt;p&gt;Eventually, the only thing left to change is quality: all other variables are locked in a fixed price contract.&lt;img style="background-image: none; border-right-width: 0px; margin: 10px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Project Triangle" border="0" alt="Project Triangle: How cost, time and scope relates to quality" src="http://lh4.ggpht.com/-5DKR9P5UGZ4/TyQ-o2Ss_dI/AAAAAAAAAEM/tBhoifkZwlk/quality-triangle3%25255B4%25255D.png?imgmax=800" width="256" height="252"&gt;&lt;/p&gt; &lt;p style="margin-bottom: 15px" align="center"&gt;&lt;em&gt;Project Triangle: Only two things/sides can be changed without affecting quality&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Probably the contractor doesn’t influence quality deliberately. Quality is, however, very difficult to measure. The project may deliver according to specs, passing all acceptance tests. Years later, however, when new features or integrations are required, technical debt may become a big issue.&lt;/p&gt; &lt;h2&gt;Preconditions for a Fixed Price Contract&lt;/h2&gt; &lt;p&gt;For a fixed price to even be legitimate, the following must be true:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Adequate requirement specifications.  &lt;li&gt;A well defined change request process.  &lt;li&gt;A thorough risk analysis. (This is true for all projects, but especially so for fixed price contracts.)  &lt;li&gt;Agreed acceptance criteria: well-defined acceptance tests.  &lt;li&gt;Working with a well-known technology in a proven environment.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If these preconditions aren’t fulfilled, the contractor should think twice before settling for a fixed price contract. &lt;/p&gt; &lt;p&gt;The nature of software development means you are always – more or less – working in a volatile environment. Of course, contractors compensate for this when bidding for a fixed price by introducing safety buffers. &lt;/p&gt; &lt;h2&gt;Customer Risks&lt;/h2&gt; &lt;p&gt;Pushing too hard for a knockdown price have implications. The customer faces at least three apparent risks:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Degraded quality &lt;li&gt;The project runs late  &lt;li&gt;Collaboration suffers&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Quality is controlled by the requirement specification and acceptance criteria. This only works to a certain degree. It is impossible to cover all aspects of quality through these mechanisms alone.&lt;/p&gt; &lt;p&gt;The quality of a project is affected in many ways. It can be difficult to spot exactly when and why quality degenerates. Some things that may be overlooked when on a tight schedule, that eventually affects quality, are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Code is not refactored  &lt;li&gt;Code is not commented  &lt;li&gt;Insufficient tests&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Contract regulations, requirement specifications, and so on, ultimately affects collaboration. The atmosphere becomes competitive and the parties start to blame each other instead of solving problems together. The customer becomes detached and hands over all responsibility to the contractor.&lt;/p&gt; &lt;h2&gt;Conclusion&lt;/h2&gt; &lt;p&gt;In my experience the customer and contractor both lose out on a fixed price contract. Obviously the contractor takes a big risk. While it might seem like the customer has nothing to lose, to get the most value out of the investment, it is better to choose another contract form.&lt;/p&gt; &lt;p&gt;As a customer, if you are not 100% sure there won’t be any changes, a fixed price can be a costly affair. Not only will you have to pay for any changes. There is also an overhead in terms of administration and contract negotiation. You also draw attention away from producing a high quality product maximizing business value.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-6947945668017838787?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/01/fixed-price-contracts-false-sense-of.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-EAqXWa7u3N8/TxtApCird3I/AAAAAAAAADM/B9Yw6crdswM/s72-c/handshake.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-4729137150771850643</guid><pubDate>Mon, 23 Jan 2012 12:18:00 +0000</pubDate><atom:updated>2012-01-23T21:21:35.822+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">project management</category><category domain="http://www.blogger.com/atom/ns#">scrum</category><title>Agile Roadblocks: Drowned by Waterfalls</title><description>&lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Agile Roadblock" border="0" alt="Agile Roadblock" align="left" src="http://lh3.ggpht.com/-JETBDHH9_0I/Txs9dEMHbJI/AAAAAAAAACQ/IyI1M6lK_Ak/roadblock%25255B5%25255D.png?imgmax=800" width="128" height="114"&gt;In the series about agile roadblocks: obstructions for implementing agile processes in an organization, the time has come to “Drowned by Waterfalls”. (Read the previous post about &lt;a title="Agile roadblocks: Stray Team Members" href="http://magnusnord.blogspot.com/2012/01/agile-roadblocks-stray-team-members.html"&gt;stray team members&lt;/a&gt; as well.)&lt;/p&gt; &lt;p&gt;Often agile processes slowly make their way into larger organizations. Parts of management may not even be aware of any changes. Others may be too rooted in existing processes and methodologies. They consider any change an annoyance that will eventually go away if you just ignore it.&lt;/p&gt; &lt;p&gt;So, how &lt;em&gt;do&lt;/em&gt; you apply an agile development process when drowned by waterfalls?&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;h2&gt;Description&lt;/h2&gt; &lt;p&gt;Development teams may be asked to use Scrum or other agile processes, although the customer and/or management uses traditional models or demand a fixed price contract.&lt;/p&gt; &lt;p&gt;Some argue, rightfully so, that you have to apply a methodology in full to achieve its full potential. Sometimes, however, you don’t have a choice.&lt;/p&gt; &lt;p&gt;While you will not be as successful applying agile, hopefully you can get some benefits from it. In any case, you have to relate to it somehow.&lt;/p&gt; &lt;h2&gt;Effects&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;Resistance from managers to apply or recognize agile practices they are not familiar with, for example estimating in story points.  &lt;li&gt;Mismatch between responsibilities of project managers, product owners and other key roles. &lt;li&gt;Failure to get the full effect from agile methods. Which, in a longer perspective, may lead to mistrust of agile development altogether. &lt;li&gt;Project managers may have difficulties when agile methods clash with traditional project management and processes.&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Detours&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;A lot of agile principles are nothing more than common sense, and works well in traditional project models as well. For example daily stand-ups and estimation in size rather than calendar time. &lt;li&gt;The main reason why customers like fixed price contracts is that they &lt;em&gt;think &lt;/em&gt;they know what they will get, and at what price. Try to offer them the same feeling of safety with other price models. &lt;li&gt;Make your case with management. Explain why you have to adopt all practices to be successful with agile development. &lt;li&gt;Get people on your team that have experience with Scrum/agile development.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-4729137150771850643?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/01/agile-roadblocks-drowned-by-waterfalls.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-JETBDHH9_0I/Txs9dEMHbJI/AAAAAAAAACQ/IyI1M6lK_Ak/s72-c/roadblock%25255B5%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-5540526335583249418</guid><pubDate>Sat, 21 Jan 2012 18:56:00 +0000</pubDate><atom:updated>2012-01-21T19:58:51.863+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">productivity</category><category domain="http://www.blogger.com/atom/ns#">tips</category><category domain="http://www.blogger.com/atom/ns#">meetings</category><title>4 Ways to Deal with Ineffective Meetings</title><description>&lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="Productivity" border="0" alt="Productivity" align="left" src="http://lh5.ggpht.com/-73J5vVx-2Uk/TxsKaPxlqyI/AAAAAAAAACI/wwuTiFPzXws/productivity%25255B4%25255D.png?imgmax=800" width="128" height="97"&gt;In a &lt;a title="How to Conduct Effective Meetings" href="http://magnusnord.blogspot.com/2012/01/how-to-conduct-effective-meetings.html"&gt;previous post&lt;/a&gt;, I discussed how to conduct effective meetings. However, if you repeatedly find yourself in inefficient meetings, you need strategies to deal with it.&lt;/p&gt; &lt;p&gt;Although this can be difficult, obviously you should first try to change the meetings culture of your company. In the meanwhile, or as a last resort, consider the following four ways to deal with ineffective meetings.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Enforce your own time box.&lt;/strong&gt; If you know meetings tend to drag on: point out in the beginning of the meeting that you have to leave at a specific time. Refer to a prior engagement. If the time draws near and the meeting’s purpose has not yet been achieved, remind everyone that you are going to leave soon. This may help push the meeting in the right direction.  &lt;li&gt;&lt;strong&gt;Limit attendance.&lt;/strong&gt; It is often stressful to sit in meetings when discussions derail and become irrelevant, especially when you have a bunch of more important tasks waiting at your desk. Ask if you can be called in for items relevant to you. If there aren’t any more items on the agenda where you are required; excuse yourself and leave the meeting. &lt;li&gt;&lt;strong&gt;Question the purpose.&lt;/strong&gt; If you are called to a meeting without an expressed purpose or agenda, ask the person summoning the meeting what the purpose is. Ask why your attendance is required. &lt;li&gt;&lt;strong&gt;Come well prepared.&lt;/strong&gt; If you think there will be discussions about certain decisions: talk to people &lt;em&gt;before&lt;/em&gt; the meeting. If you know what you want: prepare a statement and think about your arguments before the meeting. If others are not as well prepared, it is likely your proposal is approved. Unless, of course, it’s completely ludicrous :-)&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;As a final advice, think twice before bringing your own work to a meeting. This might be ok. On the other hand, it may very well be considered disrespectful and self-centered. You can even miss important discussions and decisions and &lt;em&gt;really&lt;/em&gt; make yourself look like a jerk. In other words: be selective in what meetings you attend, but when you do, concentrate on the meeting.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-5540526335583249418?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/01/how-to-deal-with-ineffective-meetings.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-73J5vVx-2Uk/TxsKaPxlqyI/AAAAAAAAACI/wwuTiFPzXws/s72-c/productivity%25255B4%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-6966146937113054024</guid><pubDate>Tue, 17 Jan 2012 12:47:00 +0000</pubDate><atom:updated>2012-01-22T08:54:56.494+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tips</category><category domain="http://www.blogger.com/atom/ns#">programming</category><category domain="http://www.blogger.com/atom/ns#">review</category><category domain="http://www.blogger.com/atom/ns#">book</category><title>Five Books All Developers Should Read</title><description>&lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="books" border="0" alt="books" align="left" src="http://lh5.ggpht.com/-t7GuoQzYNxc/Txa-yZBN-oI/AAAAAAAABeI/GhhxV2X11uA/books%25255B4%25255D.png?imgmax=800" width="128" height="83"&gt;Amidst the myriad of books out there, here are five I find worthwhile for all developers. These books do not cover a specific language or technique. Instead they provide a broader spectrum of good advice. If I had to pick one of them, it would definitely be &lt;em&gt;The Pragmatic Programmer – From Journeyman to Master&lt;/em&gt;. This book offers some great insights into what the programming profession is really all about, and how to excel as a developer.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2 style="margin-bottom: 0px"&gt;&lt;a title="The Pragmatic Programmer: From Journeyman to Master" href="http://pragprog.com/the-pragmatic-programmer" target="_blank"&gt;&lt;img style="margin: 0px 10px 10px 0px; display: inline; float: left; clear: left" alt="File:The pragmatic programmer.jpg" align="left" src="http://upload.wikimedia.org/wikipedia/en/8/8f/The_pragmatic_programmer.jpg" width="140" height="175"&gt;&lt;/a&gt;The Pragmatic Programmer&lt;/h2&gt; &lt;h3 style="margin-top: -7px"&gt;From Journeyman to Master&lt;/h3&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;By Andrew Hunt and David Thomas&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Because more important than knowing this or that programming language, is to learn how to think, act and become a passionate (devoted if you like) developer. If you don’t, you will never truly succeed at – or at least not enjoy – work.&lt;/p&gt; &lt;p&gt;This book covers practices like DRY (Don’t Repeat Yourself), debugging, testing and prototyping. It explains the benefits of mastering a shell and the editor you use. It also discusses project and team aspects of development.&lt;/p&gt; &lt;p&gt;Read it. Then read it again.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2 style="margin-bottom: 0px"&gt;&lt;a title="Design Patterns: Elements of Reusable Object-Oriented Software" href="http://en.wikipedia.org/wiki/Design_Patterns" target="_blank"&gt;&lt;img style="margin: 0px 10px 10px 0px; display: inline; float: left; clear: left" alt="File:Design Patterns cover.jpg" align="left" src="http://upload.wikimedia.org/wikipedia/en/7/78/Design_Patterns_cover.jpg"&gt;&lt;/a&gt;Design Patterns&lt;/h2&gt; &lt;h3 style="margin-top: -7px"&gt;Elements of Reusable Object-Oriented Software&lt;/h3&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Because it is &lt;em&gt;the&lt;/em&gt; book about &lt;a title="Design pattern on Wikipedia" href="http://en.wikipedia.org/wiki/Design_pattern" target="_blank"&gt;design patterns&lt;/a&gt;, and design patterns is something all developers should know. The authors are also known as the &lt;em&gt;Gang of Four (GoF)&lt;/em&gt;, a well known name in design pattern circles.&lt;/p&gt; &lt;p&gt;This book includes a catalog with 23 design patterns divided into creational, structural and behavioral patterns. Each pattern is listed with its intent and motivation, structure, consequences as well as sample code and known uses.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2 style="margin-bottom: 0px"&gt;&lt;a title="Clean Code: A Handbook of Agile Software Craftsmanship" href="http://www.pearsonhighered.com/educator/product/Clean-Code-A-Handbook-of-Agile-Software-Craftsmanship/9780132350884.page" target="_blank"&gt;&lt;img style="margin: 0px 10px 10px 0px; display: inline; float: left; clear: left" alt="larger cover" align="left" src="http://www.informit.com/ShowCover.aspx?isbn=0132350882" width="140" height="186"&gt;&lt;/a&gt;Clean Code&lt;/h2&gt; &lt;h3 style="margin-top: -7px"&gt;A handbook of Agile Software Craftsmanship&lt;/h3&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;By Robert C. Martin&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Because writing neat, readable code may very well imply less use of the next book. &lt;/p&gt; &lt;p&gt;This book is all about writing good code. Chances are you read much more code than you write, and writing clean, readable code is perhaps the best way to cut down &lt;a title="Technical debt article on Wikipedia" href="http://en.wikipedia.org/wiki/Technical_debt" target="_blank"&gt;technical debt&lt;/a&gt;. The book covers everything from meaningful names of classes and methods to how to write comments, exceptions and &lt;a title="Unit testing article on Wikipedia" href="http://en.wikipedia.org/wiki/Unit_testing" target="_blank"&gt;unit tests&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2 style="margin-bottom: 0px"&gt;&lt;a title="Working Effectively with Legacy Code" href="http://www.pearsonhighered.com/educator/product/Working-Effectively-with-Legacy-Code/9780131177055.page" target="_blank"&gt;&lt;img style="margin: 0px 10px 10px 0px; display: inline; float: left; clear: left" alt="larger cover" align="left" src="http://www.informit.com/ShowCover.aspx?isbn=0131177052" width="140" height="186"&gt;&lt;/a&gt;Working Effectively with Legacy Code&lt;/h2&gt; &lt;p style="margin-top: 0px"&gt;&lt;em&gt;&lt;strong&gt;By Michael C. Feathers&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Because technical debt is a problem that’s not going away. The book is especially useful for consultants working a lot with other people’s &lt;strike&gt;mess&lt;/strike&gt; code.&lt;/p&gt; &lt;p&gt;This book defines “legacy code” as any code that without tests in place. This book covers things like how to get code into a test harness, and how to write tests without affecting existing functionality.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2 style="margin-bottom: 0px"&gt;&lt;a title="Jonathan Strange &amp;amp; Mr Norrell" href="http://www.bloomsbury.com/Jonathan-Strange-and-Mr-Norrell/Susanna-Clarke/books/details/9780747579885" target="_blank"&gt;&lt;img style="margin: 0px 10px 10px 0px; display: inline; float: left; clear: left" alt="File:Jonathan strange and mr norrell cover.jpg" align="left" src="http://upload.wikimedia.org/wikipedia/en/4/4d/Jonathan_strange_and_mr_norrell_cover.jpg" width="140" height="210"&gt;&lt;/a&gt;Johnathan Strange &amp;amp; Mr Norrell&lt;/h2&gt; &lt;p style="margin-top: 0px"&gt;&lt;em&gt;&lt;strong&gt;By Susanna Clarke&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Because you should take the time to read something else now and then (this is one of the tips from &lt;em&gt;Pragmatic Programmer&lt;/em&gt; as well), and this is a really, really great book.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-6966146937113054024?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/01/five-great-books-all-developers-should.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-t7GuoQzYNxc/Txa-yZBN-oI/AAAAAAAABeI/GhhxV2X11uA/s72-c/books%25255B4%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-1462554214747173004</guid><pubDate>Thu, 12 Jan 2012 12:56:00 +0000</pubDate><atom:updated>2012-02-11T22:01:49.783+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">rtm</category><category domain="http://www.blogger.com/atom/ns#">productivity</category><category domain="http://www.blogger.com/atom/ns#">tips</category><category domain="http://www.blogger.com/atom/ns#">tickler</category><category domain="http://www.blogger.com/atom/ns#">gtd</category><title>How to Setup Remember The Milk for GTD</title><description>&lt;p&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="" border="0" alt="GTD Remember The Milk cow" align="left" src="http://lh3.ggpht.com/-NIVXIhEM1lw/TwtYCzeE0mI/AAAAAAAABeQ/NAgXpGynm-0/gtd-cow%25255B1%25255D.png?imgmax=800" width="128" height="110"&gt;An efficient system for keeping track of things to do is a must have for anyone with a busy life. In this post, I describe my&amp;nbsp; &lt;a href="http://www.davidco.com/about-gtd"&gt;Getting Things Done&lt;/a&gt; (GTD) setup in &lt;a href="http://www.rememberthemilk.com/"&gt;Remember The Milk&lt;/a&gt; (RTM). &lt;/p&gt; &lt;p&gt;I can think of at least four requirements for a working task management system (read: a system I actually stick with and use):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;It needs to be very simple, if not idiot proof (call it self insight).  &lt;li&gt;It needs to be flexible and extendable.  &lt;li&gt;It needs to be accessible from just about anywhere.  &lt;li&gt;I don’t want to be bothered by stuff not relevant just now.  &lt;a name='more'&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The secret to my system is that I don’t use a standard list to keep track of &lt;em&gt;next actions&lt;/em&gt;. Neither do I to keep lists for each project, instead I rely solely on tags. Everything goes in to the Inbox – and is filtered automatically using &lt;em&gt;smart lists&lt;/em&gt;.&lt;/p&gt; &lt;h2&gt;Workflow&lt;/h2&gt; &lt;p&gt;Everything is dumped in to the default RTM inbox. This serves as a universal bucket for me, where I put everything from ideas and notes, to things like project items and recurrent events. All items stay in the inbox until finished, at which time they are checked off as completed.&lt;/p&gt; &lt;p align="center"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Overview of GTD setup with RTM" border="0" alt="GTD Setup With Remember The Milk" src="http://lh5.ggpht.com/-0s8gofEbElg/Twctkjsr7VI/AAAAAAAABeU/97QuOBjpFTk/gtd-with-rtm%25255B1%25255D.png?imgmax=800" width="500" height="346"&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;All new items are added to the &lt;em&gt;Inbox&lt;/em&gt; list.  &lt;li&gt;I sometimes tag items directly, either with a context or a project tag, or both.  &lt;li&gt;Tickler items are created by simply giving an item a due date. Possibly making it recurrent.  &lt;li&gt;Items neither tagged nor tickled end up in a smart list named &lt;em&gt;Unsorted&lt;/em&gt;.  &lt;li&gt;When a task without due date has hung around for too long, it will show up in another smart list called &lt;em&gt;Smellers&lt;/em&gt;.  &lt;li&gt;All context and project tags are reviewed regularly. (Of course, I have a recurrent task to remind me.) It is also easy to spot unprocessed items by simply looking in the &lt;em&gt;Unsorted&lt;/em&gt; list. Attention is also given to untouched tasks in the &lt;em&gt;Smellers&lt;/em&gt; list.  &lt;li&gt;The icing on the cake is the &lt;em&gt;TODO&lt;/em&gt; smart list. This is the only list with “next actions” and the &lt;strong&gt;only&lt;/strong&gt; list monitored continuously, at least daily.&lt;/li&gt;&lt;/ol&gt; &lt;div class="tip"&gt;&lt;strong&gt;Adding stuff quickly&lt;br&gt;&lt;/strong&gt;When I get some stuff to follow up from a conversation, or when having an idea on the go, I often just add it without categorizing it. Later, or at the weekly review, I process items in the &lt;em&gt;Unsorted&lt;/em&gt; list.&lt;/div&gt; &lt;h2&gt;The Setup&lt;/h2&gt; &lt;p&gt;The complete setup consists of the standard RTM inbox, three smart lists and an arbitrary number of tags.&lt;/p&gt; &lt;h3&gt;&lt;/h3&gt; &lt;h3&gt;Universal Inbox&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="todo-list" border="0" alt="todo-list" align="right" src="http://lh5.ggpht.com/-oVh5Ve8rp8U/TwcDFI4pXLI/AAAAAAAABeY/LCPvBHYz5zI/todo-list%25255B1%25255D.png?imgmax=800" width="64" height="86"&gt;&lt;/h3&gt; &lt;p&gt;As I use the default inbox as the universal inbox, all new tasks end up here, whether they are added from the mobile application, the browser or sent via email or any other of the functions available in RTM.&lt;/p&gt; &lt;p&gt;As all items go into &lt;em&gt;one&lt;/em&gt; list, it makes it really easy to perform searches, filter items, and so on.&lt;/p&gt; &lt;h3&gt;Smart Lists&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="smart-list" border="0" alt="smart-list" align="right" src="http://lh4.ggpht.com/-SlXFdW2O6Lo/TwcDGKrgkHI/AAAAAAAABec/Q_LyZldzqsA/smart-list%25255B1%25255D.png?imgmax=800" width="64" height="86"&gt;&lt;/h3&gt; &lt;p&gt;Smart lists in RTM are based on search criteria. Here are the three smart lists I use, and their respective searches:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Unsorted&lt;/strong&gt; contains items not yet processed; tasks without tags or due dates.  &lt;div class="code"&gt;list:inbox and status:incomplete AND isTagged:false AND due:never&lt;/div&gt; &lt;li&gt;&lt;strong&gt;Smellers &lt;/strong&gt;contains tasks who have stayed uncompleted for too long. It does not contain recurrent tasks.  &lt;div class="code"&gt;NOT addedWithin:"3 months from today" AND list:"Inbox" AND status:incomplete AND (due:never OR dueBefore:now)&lt;/div&gt; &lt;li&gt;&lt;strong&gt;TODO &lt;/strong&gt;is the “next action” list. It contains items marked with the &lt;em&gt;@action &lt;/em&gt;tag and items due on the same day (or for high priority tasks: tomorrow).  &lt;div class="code"&gt;list:Inbox AND status:incomplete AND (tag:@action OR dueBefore:tomorrow OR (due:tomorrow AND priority:1))&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Tags&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="tag" border="0" alt="tag" align="right" src="http://lh6.ggpht.com/-70iz9kEVJsY/TwcDHP1K3GI/AAAAAAAABeg/tWjdRLOGHzs/tag%25255B1%25255D.png?imgmax=800" width="72" height="74"&gt;&lt;/h3&gt; &lt;p&gt;I separate tags into two categories: Contexts and projects. Context tags start with the at-sign (@), everything else is considered a project tag. (Please note that I’m not using RTM locations as contexts – they are also denoted by @.)&lt;/p&gt; &lt;p&gt;Here are some of the contexts I use at the moment:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;@action&lt;/strong&gt; to mark an item as a “next action”. This displays the task in the TODO list.  &lt;li&gt;&lt;strong&gt;@computer &lt;/strong&gt;for items where I need the computer or tablet.  &lt;li&gt;&lt;strong&gt;@shop&lt;/strong&gt; for things I need to buy. I look at this context when at the local mall, or at the grocery store.  &lt;li&gt;&lt;strong&gt;@waiting &lt;/strong&gt;for things requiring an action or response from someone else.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;This is an incomplete list, and I add and remove contexts continuously as my needs change.&lt;/p&gt; &lt;p&gt;Project tags can be pretty much anything, and are simply a way of categorizing tasks. Some of the projects could arguably be contexts, and vice versa. Heck, you could skip contexts all together but there is at least one good point why to keep them: They end up in the beginning of the tag list, as it is sorted alphabetically. Especially advantageous is the fact that &lt;em&gt;@action &lt;/em&gt;pops up first of all.&lt;/p&gt; &lt;p&gt;I use a lot of project tags: For the blog, my children, work, for things to read, another for tips I get (for instance movies and books). The list goes on.&lt;/p&gt; &lt;h3&gt;Tickler File&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 10px 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="tickler" border="0" alt="tickler" align="right" src="http://lh6.ggpht.com/-t_MHhRc-Mgo/TwcDIcLhVqI/AAAAAAAABek/N_7W-kedCfY/tickler%25255B1%25255D.png?imgmax=800" width="84" height="66"&gt;&lt;/h3&gt; &lt;p&gt;A &lt;a href="http://en.wikipedia.org/wiki/Tickler_file"&gt;tickler file&lt;/a&gt; is implemented implicitly by the way I use smart lists. I never look at the items in the inbox directly. Instead, I use the TODO smart list as the “go to list”. Tasks with due dates, possibly recurrent, pop up in the TODO list when they need to be acted upon.&lt;/p&gt; &lt;h3&gt;&lt;/h3&gt; &lt;h2&gt;Wrap-Up&lt;/h2&gt; &lt;p&gt;Well, that’s it! I hope you found this post useful. If you have any suggestions for improvements, please let me know.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-1462554214747173004?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/01/how-to-setup-gtd-with-remember-milk.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-NIVXIhEM1lw/TwtYCzeE0mI/AAAAAAAABeQ/NAgXpGynm-0/s72-c/gtd-cow%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-855729411547703929</guid><pubDate>Tue, 10 Jan 2012 12:05:00 +0000</pubDate><atom:updated>2012-01-18T13:43:07.184+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">agile</category><category domain="http://www.blogger.com/atom/ns#">project management</category><category domain="http://www.blogger.com/atom/ns#">scrum</category><title>Agile Roadblocks: Stray Team Members</title><description>&lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="roadblock" border="0" alt="roadblock" align="left" src="http://lh4.ggpht.com/-4Jrxq2K_IBw/Txa-WiM7zhI/AAAAAAAABeA/vbY7RMcJnaY/roadblock%25255B5%25255D.png?imgmax=800" width="128" height="114"&gt;This is the first post in a series about agile roadblocks: obstructions for implementing agile processes in an organization. First up is “Stray Team members”.&lt;/p&gt; &lt;p&gt;To share resources between projects seems to be a more common practice than one would expect. What’s worse is that often it is done seemingly without good cause. Some managers do not understand the impact this has on productivity, and the well being of the individual.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;div class="excerpt"&gt;“It is virtually impossible to divide time between projects without generating cross project noise.”&lt;/div&gt; &lt;div class="excerpt-bottom"&gt;&lt;/div&gt; &lt;h2&gt;Description&lt;/h2&gt; &lt;p&gt;Sometimes key resources, for example with unique competence, &lt;em&gt;needs &lt;/em&gt;to be split across projects. Doing it routinely and without thinking it through is counterproductive, if not downright ignorant and foolish. &lt;/p&gt; &lt;p&gt;It is virtually impossible to divide time between projects without generating cross project noise. While working on one project you will receive e-mail, get questions and be asked to do things related to the other project. &lt;/p&gt; &lt;h2&gt;Effects&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;Shifting tasks and focus is time consuming and decreases productivity.  &lt;li&gt;The increased amount of stress has a negative effect on the individual’s well being.  &lt;li&gt;Both projects lose momentum.  &lt;li&gt;It is an annoyance for other team members when a resource they rely on is unavailable.&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Detours&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;Make it more difficult to split resources across projects. Maybe approval should be required by a senior manager.  &lt;li&gt;Minimize the effect of a resource sharing. Let people shift projects as seldom as possible, for example weekly.  &lt;li&gt;If you are a shared resource yourself, try to do the following:  &lt;ul&gt; &lt;li&gt;Minimize cross-project noise by applying mail filters and other barriers between projects.  &lt;li&gt;Let everyone know that when you’re working on that other project, you are indeed &lt;em&gt;busy&lt;/em&gt; working on that other project – and you are not going to answer e-mail, have time for meetings, and so on.  &lt;li&gt;Avoid leaving open ends when switching between projects.  &lt;li&gt;Write a note to yourself about what you were doing and the state of things, before starting to work&amp;nbsp; on another project. &lt;/li&gt;&lt;/ul&gt; &lt;li&gt;This might very well be an organization issue and part of corporate culture. In that case it really comes down to convincing management that this really is an issue.&lt;/li&gt;&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-855729411547703929?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/01/agile-roadblocks-stray-team-members.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-4Jrxq2K_IBw/Txa-WiM7zhI/AAAAAAAABeA/vbY7RMcJnaY/s72-c/roadblock%25255B5%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-6026174993628524639</guid><pubDate>Sat, 07 Jan 2012 19:30:00 +0000</pubDate><atom:updated>2012-01-18T13:52:36.326+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">productivity</category><category domain="http://www.blogger.com/atom/ns#">tips</category><category domain="http://www.blogger.com/atom/ns#">meetings</category><title>How to Conduct Effective Meetings</title><description>&lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="productivity" border="0" alt="Productivity chart" align="left" src="http://lh4.ggpht.com/-6PGJzyNMfJY/TxbAk0fq5UI/AAAAAAAABeo/os5AZQuuGlg/productivity%25255B15%25255D.png?imgmax=800" width="128" height="97"&gt;Have you ever found yourself in a room with people discussing the internal test server’s footer size, or some other similarly insignificant detail? Making things worse, did you go to the meeting because you thought you were finally going to make a decision about that business proposition that could make or break the company?&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt; &lt;p&gt;In my experience it is very easy to have a meeting derail and turn into a complete train wreck. If the person leading the meeting fails to be disciplined, or come ill prepared, the risk is even greater.&lt;/p&gt; &lt;h2&gt;Purpose and Agenda&lt;/h2&gt; &lt;p&gt;A meeting should &lt;em&gt;always &lt;/em&gt;have an expressed purpose or goal that is known to participants prior to the meeting. This is not the same as an agenda. The agenda should guide the meeting towards the goal.&lt;/p&gt; &lt;p&gt;When the meeting begins it is a good idea to remind everyone of the purpose.&lt;/p&gt; &lt;h2&gt;Participants&lt;/h2&gt; &lt;p&gt;Participants should be selected so that the purpose can be achieved. Including people that do not contribute to the purpose being fulfilled only increases the risk of derailing.&lt;/p&gt; &lt;p&gt;Similarly, failing to invite a person required to achieve the goal, is equally unproductive.&lt;/p&gt; &lt;h2&gt;The Chairman&lt;/h2&gt; &lt;p&gt;The chairman must have mandate to actually lead the meeting. This includes having the authority to cut off irrelevant discussions and steer the meeting towards its purpose.&lt;/p&gt; &lt;p&gt;This can be extra tricky when higher ranking managers participate. The chairman may hesitate to interrupt higher ranking individuals. On the other hand, they may have to participate to fulfill the purpose. If they are not: Do not invite them.&lt;/p&gt; &lt;h2&gt;Time Boxing&lt;/h2&gt; &lt;p&gt;Time box the meeting to increase the chance of it being productive. If participants start to go astray, remind them of the time box and also the purpose.&lt;/p&gt; &lt;h2&gt;Meeting Discipline&lt;/h2&gt; &lt;p&gt;Meeting discipline is important. This is primarily the responsibility of the chairman, but if enough people wander off it helps little if the chairman tries to maintain order. In my experience managers are more inclined to stray, maybe because they are more used to, and feel more confident, talking in front of the group.&lt;/p&gt; &lt;h2&gt;Conclusion&lt;/h2&gt; &lt;p&gt;To sum it up, keep the following three things in mind:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Always prepare the meeting well. Do not forget to formulate and distribute the purpose of the meeting, together with an agenda.  &lt;li&gt;Only invite people necessary for the meeting’s purpose.  &lt;li&gt;Most importantly: Successful meetings are a team effort. Everyone needs to be on board and adhere to meeting rules.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;In an upcoming post I will give a suggestion for meeting guidelines.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-6026174993628524639?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/01/how-to-conduct-effective-meetings.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-6PGJzyNMfJY/TxbAk0fq5UI/AAAAAAAABeo/os5AZQuuGlg/s72-c/productivity%25255B15%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2908580337550470500.post-7113355255097330549</guid><pubDate>Sat, 07 Jan 2012 12:41:00 +0000</pubDate><atom:updated>2012-01-19T21:29:30.965+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tips</category><category domain="http://www.blogger.com/atom/ns#">consulting</category><title>Lost on Your New Assignment?</title><description>&lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="" border="0" alt="Confused man lost on his new assignment" align="left" src="http://lh6.ggpht.com/-P5nvSfCUekw/TwsrNrnIfmI/AAAAAAAABew/i1ZbykCtacU/confused-man%25255B1%25255D.png?imgmax=800" width="128" height="96"&gt;When you start on a new assignment and land in a new environment, it is easy to feel a bit lost and confused. As a consultant, especially, you feel an obligation to contribute right from the start, and bring value to the team immediately. Easier said than done! Here are some advice that might help.&lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;h2&gt;Be Resourceful&lt;/h2&gt; &lt;div class="excerpt"&gt;“Fixing bugs is often appreciated by the team as it is not considered the most glamorous work.”&lt;/div&gt; &lt;div class="excerpt-bottom"&gt;&lt;/div&gt; &lt;p&gt;Face it: You’re not there because the team has a lot of spare time. Chances are you have been hired for the exact opposite reason. This means no one is likely to help you out much. Even if they do, they probably feel they have more important things to do. This is no doubt contra productive, but it is often how people react under stress.&lt;/p&gt; &lt;p&gt;A common task on new assignments is therefore to read up on stuff. You are handed piles of technical documentation and manuals – anything to keep you occupied.&lt;/p&gt; &lt;p&gt;It is going to be up to you to take initiatives. Keep an eye open for well defined, low priority tasks. Here are some jobs I like to do in the beginning:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Fixing bugs &lt;/strong&gt;is a great way of both contributing and getting familiarized with the code. It is often appreciated by the team as fixing bugs is not considered the most glamorous work. It is also often fairly easy to validate the result.  &lt;li&gt;&lt;strong&gt;Configuration Management (CM) tasks &lt;/strong&gt;are often not domain specific, and chances are your previous experience comes in handy. Sometimes these tasks haven’t been prioritized, even though they might very well be important to productiveness and efficiency. Many CM tasks are relatively independent from other work, making them perfect candidates for new team members.  &lt;li&gt;&lt;strong&gt;Pre-studies and evaluations (spike solutions) &lt;/strong&gt;are another example of independent tasks where previous experience is valuable. Others on the team may take things for granted. It might even be an advantage to use a new resource, as they look at problems from another perspective. &lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Be Perceptive&lt;/h2&gt; &lt;p&gt;Be perceptive to the work environment. Try to get a feeling of team dynamics, problems they face and how they apply methodologies and processes. Are there any unspoken rules? Pay attention to how the team interacts, review each others work and give feedback.&lt;/p&gt; &lt;p&gt;It is never a good idea to start criticizing, or talk about how things “should” be done, before you get to know the other team members and the appropriate context for giving feedback.&lt;/p&gt; &lt;p&gt;Perceptiveness might also help you pick up possible further business and areas where you can contribute.&lt;/p&gt; &lt;h2&gt;Be Open Minded&lt;/h2&gt; &lt;p&gt;Ideally you have a job description of what the customer expects from you: an expressed reason why they hired you. However, once there don’t be surprised if the job description does not match team reality.&lt;/p&gt; &lt;p&gt;Sometimes this calls for a discussion with your manager or sales rep, perhaps canceling the assignment altogether.&lt;/p&gt; &lt;p&gt;Other times, you might simply contribute more by helping out in areas outside the job description. Always make sure you fulfill any obligations you have, but if you have key competence in other areas, help out there as well. It will be worth more to the customer. And to you.&lt;/p&gt; &lt;h2&gt;Be Social&lt;/h2&gt; &lt;p&gt;As a consultant you might not think it is necessary to participate in certain events and meetings. (Sometimes you are not allowed to.) Maybe you feel your time is better spent reading up on documentation or getting your hands dirty with the code.&lt;/p&gt; &lt;p&gt;However, meetings and other team activities are a great way of getting to know project internals and team dynamics. Participating in social events might give insight into why certain problems exist, and the context in which the team works.&lt;/p&gt; &lt;p&gt;Try to have lunch and coffee breaks together with other team members. If they eat out, tag along. If they bring own food, follow their example. Not only is it fun, but a lot of interesting discussions take place off radar in social contexts.&lt;/p&gt; &lt;h2&gt;Be Relaxed&lt;/h2&gt; &lt;div class="excerpt"&gt;“Relax! Accept a feeling of chaos.”&lt;/div&gt; &lt;div class="excerpt-bottom"&gt;&lt;/div&gt; &lt;p&gt;Finally, relax! Accept a feeling of chaos. You are most likely overwhelmed by everything from code setup, new tools, names and roles of team members, logins and passwords to mundane stuff like time reports and finding the coffee machine – not to forget how to make it brew the perfect cup.&lt;/p&gt; &lt;p&gt;In the midst of all this, it is easy to lose the foothold. Keep your calm, though. After a couple of weeks you will feel much more comfortable, sitting at your designated desk in the team area sipping away at a perfect cup of coffee, working your way through the code like you’d been their all your life.&lt;/p&gt; &lt;p&gt;U669NS7ZZXCT&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/2908580337550470500-7113355255097330549?l=www.devoteddeveloper.com" alt="" /&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2908580337550470500-7113355255097330549?l=www.devoteddeveloper.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.devoteddeveloper.com/2012/01/feeling-lost-on-your-new-assignment.html</link><author>noreply@blogger.com (Magnus Nord)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-P5nvSfCUekw/TwsrNrnIfmI/AAAAAAAABew/i1ZbykCtacU/s72-c/confused-man%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></item></channel></rss>

