<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>timezone « Plataformatec Blog</title>
	<atom:link href="/tag/timezone/feed/" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>Plataformatec&#039;s place to talk about Ruby, Ruby on Rails, Elixir, and software engineering</description>
	<lastBuildDate>Wed, 13 Dec 2017 19:47:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.2</generator>
	<item>
		<title>How to work with distributed teams</title>
		<link>/2017/12/how-to-work-with-distributed-teams/</link>
					<comments>/2017/12/how-to-work-with-distributed-teams/#comments</comments>
		
		<dc:creator><![CDATA[Lucas Colucci]]></dc:creator>
		<pubDate>Wed, 13 Dec 2017 18:25:30 +0000</pubDate>
				<category><![CDATA[English]]></category>
		<category><![CDATA[how we work]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[team]]></category>
		<category><![CDATA[the plataforma way]]></category>
		<category><![CDATA[timezone]]></category>
		<guid isPermaLink="false">/?p=7021</guid>

					<description><![CDATA[<p>For most people, especially old-school Agile devotees, distributed work is just impossible. According to some of them, interactions won&#8217;t be as productive, there will be knowledge silos, physical kanbans will not be possible, no one will pay attention to the flow, and everything is going to explode! Well, those are all good points. Really. However, ... <a class="read-more-link" href="/2017/12/how-to-work-with-distributed-teams/">»</a></p>
<p>The post <a href="/2017/12/how-to-work-with-distributed-teams/">How to work with distributed teams</a> first appeared on <a href="/">Plataformatec Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>For most people, especially old-school Agile devotees, distributed work is just impossible. According to some of them, interactions won&#8217;t be as productive, there will be knowledge silos, physical kanbans will not be possible, no one will pay attention to the flow, and everything is going to explode!</p>
<p>Well, those are all good points. Really. However, all of those are remediable. Nowadays you <strong>cannot</strong> say that distributed teams don&#8217;t work. You need to make it work! That is the reality of the world.</p>
<p>But enough of whys, let&#8217;s get to how. How can we remediate all those problems? Or even avoid them? How can we be agile without ever seeing each other?</p>
<h2>Communicate, talk, say, share!</h2>
<p>The first thing that you need to think about when working with distributed teams is <strong>communication</strong>. And since it is already difficult to improve it in a colocated team, you may imagine that the difficulty adjusting it in a distributed team is even higher, right? Not necessarily, actually. Those are different environments, with different challenges. And this difference is the key.</p>
<p>If you try to adapt what you do in a colocated team to use it in a distributed one, you&#8217;ll likely fail. Things like talking to someone at their desk is not the same as a private message on a channel, for example. In the first example, other people can hear you and enter the conversation if needed. A private message is like going to a sound-proof room with your colleague and talking about something. Therefore, keep an open mind and try new things. Below I list four things that you could change to improve your communication.</p>
<h3>No more poking</h3>
<p><a href="https://zachholman.com/posts/remote-first/">Zach Holman</a> calls that &#8220;remote first&#8221;. The idea is that you need to prioritize the use of asynchronous communication tools when in a distributed team. That means that those poking-and-talking meetings will be converted into written discussions, or video conferences, using your preferred communication tool.</p>
<p><em>&#8220;Oh, but we already use Slack!&#8221;</em></p>
<p>It is not about using it; it is prioritizing its use. And that is extremely difficult. Let&#8217;s say that you have five people on site and two offshore. Those onsite need to communicate <strong>every</strong> minimally important thing through the communication tool, with the preference for open channels and not private chats. Otherwise, you&#8217;ll develop an information silo, will decrease trust between people from different locations, etc.</p>
<h3>Online meetings? Really?</h3>
<p>Ceremonies and meetings are usually a dreadful experience when online, and there&#8217;s not much we can do about that&#8230; After all, the internet connection fails, you need to repeat everything ten times, the audio quality is never perfect, and it is just annoying to not interact with people.</p>
<p>However, there are some things that you can do to improve that experience. You need to have the right tools, and a clear goal for the meeting, you&#8217;ll find more on that in <a href="/2016/01/how-to-do-remote-meetings-effectively/">this blog post</a>.</p>
<p>Besides that, each person should preferably be in their own machine, even if you have some people together in the same building. In my experience, people that are together in a room tend to share information while the microphone is muted. However, that information could be useful to the offshore team.</p>
<p>But one thing that I want to demystify is the necessity of meetings.</p>
<p>Please, only have meetings if you need them! And that is something to consider even in a colocated team. Most people start working with Scrum, Kanban or whatever methodology that comes with their set of <em>necessary</em> ceremonies. You need to think, and re-think, all the meetings objectives and check if they are necessary for your context. And if they are, check if all invited people are required. Don&#8217;t waste people’s time with unnecessary meetings.</p>
<h3>But I&#8217;m in LA and she is in China!</h3>
<p>If you have distributed teams in just one time zone, you are a lucky one. However, people usually have distributed teams across the entire world, going from 1 to sometimes 12 hours of difference. And each team needs to adapt their process to make sure that everyone receives the same information and participates in decisions over the future of the project.</p>
<p>The important point here is to stay as a team and try to have at least part of the day (or of the week if the time zones are too different), like an hour, that everyone is online. With that synchronized time you can put everyone on the same page.</p>
<h3>Fly!</h3>
<p>You&#8217;ll need to meet in person eventually. Not frequently though. Once a month, or even once a year, might be good enough. The idea of this encounter is to humanize people since we will often only interact with faces and texts on screen. That improves trust among everyone and brings the team back together. Think of it as a reset for group relationship. Bringing everyone together will relieve stress and improve interactions.</p>
<h2>Different places, different cultures</h2>
<p>Culture is a crucial point to consider when having distributed teams. We often expect people to behave as similarly as we would in the same circumstances, and it can break our expectations, hence, causing stress. I&#8217;ll detail two points that I often face in distributed teams that could help you.</p>
<h3>Can I invite everyone to Carnival?</h3>
<p>Whether you are hiring someone that will work remotely or are entering a team that has people from other countries, you need first to understand the countries’ differences. I&#8217;d suggest a comprehensive analysis of the country&#8217;s culture, how people usually behave when facing difficulties, how they say things (if directly or indirectly), what are their working times and related subjects. With all that information, you can manage your expectations and change your actions accordingly.</p>
<h3>Hola, how você esta?</h3>
<p>That is a very tough subject to address. What if you are working with team members that don&#8217;t speak the same language? Well, we&#8217;ve been there, and the answer is pretty simple: you need to communicate somehow, and it doesn&#8217;t matter how. Sometimes we opt for a common language, Esperanto most of the time (just kidding), and sometimes we try to learn the other person&#8217;s language if it is possible, like Spanish. But it doesn&#8217;t matter if you speak English, Latin or whatever. What is important is that, at the end of the day, you understood each other.</p>
<h2>Just give them this bunch of tasks!</h2>
<p>Especially when you have part of a team distributed in another region, it is common to have them as a &#8220;black-box team.&#8221; It is important to avoid scenarios in which you select demands for that team, instead of having the stories being pulled by whoever is free at the time. It is better not to have this kind of differentiation.</p>
<h2>Ok, but what tools should I use?!</h2>
<p>Before surrendering yourself to products that claim to be the silver-bullet for distributed teams, think about your process and how you can improve it. Then, if you need a tool, you&#8217;ll know what to search for.</p>
<p>However, if you want to know some of the tools you may need, we have an already extensive guide in <a href="/2016/01/how-to-do-remote-meetings-effectively/">this blog post</a>. To make it easier for you, I&#8217;ll just mention some of the tools we use.</p>
<ul>
<li>A video conference tool, like <a href="hangouts.google.com">Hangouts</a> with a microphone handler like <a href="http://mizage.com/shush/">Shoosh</a></li>
<li>An asynchronous conversation tool, like <a href="slack.com">Slack</a></li>
<li>A place to put findings and documents, like <a href="drive.google.com">Google Drive</a> and/or <a href="basecamp.com">Basecamp</a></li>
<li>A wiki like <a href="https://www.atlassian.com/software/confluence">Confluence</a> may also be useful</li>
<li>For your Kanban board, you may use something simpler like <a href="trello.com">Trello</a> or something with more options (but less customizable), like <a href="https://www.atlassian.com/software/jira">Jira</a>.</li>
</ul>
<h2>Conclusion</h2>
<p>The takeaway from this post is to improve communication and have empathy to understand the other. It is all about the process, not the tools you use.</p>
<p>I presented a <strong>huge</strong> number of things to do in a distributed team. Ergo, if you are seeking perfection you would need all of them, but to be better than yesterday, you just need to implement one at a time. <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Do you agree with our approach? Leave your thoughts below!</p>
<div style="padding: 40px 0 60px;"><a href="/subscribe/?utm_source=our-blog&amp;utm_medium=referral&amp;utm_campaign=blog-subscription&amp;utm_content=cta-blog-post-bottom"><img decoding="async" style="border: none;" src="/wp-content/uploads/2016/03/CTA-subscribe-blog-1.png" alt="Subscribe to our blog" /></a></div><p>The post <a href="/2017/12/how-to-work-with-distributed-teams/">How to work with distributed teams</a> first appeared on <a href="/">Plataformatec Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>/2017/12/how-to-work-with-distributed-teams/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>How to serialize Date and DateTime to JSON without losing information</title>
		<link>/2014/11/how-to-serialize-date-and-datetime-without-losing-information/</link>
					<comments>/2014/11/how-to-serialize-date-and-datetime-without-losing-information/#comments</comments>
		
		<dc:creator><![CDATA[Fabio Yamate]]></dc:creator>
		<pubDate>Wed, 05 Nov 2014 11:00:36 +0000</pubDate>
				<category><![CDATA[English]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[datetime]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[timezone]]></category>
		<guid isPermaLink="false">/?p=4289</guid>

					<description><![CDATA[<p>When building APIs, it is pretty common to use JSON as a serialization format. JSON defines serialization for boolean, number and string, but not for date/datetime values. What most serializers do with Date and DateTime values is to use the ISO8601 standard. For example: # Date format 2011-07-14 # DateTime format 2011-07-14T19:43:37+0100 However, you should ... <a class="read-more-link" href="/2014/11/how-to-serialize-date-and-datetime-without-losing-information/">»</a></p>
<p>The post <a href="/2014/11/how-to-serialize-date-and-datetime-without-losing-information/">How to serialize Date and DateTime to JSON without losing information</a> first appeared on <a href="/">Plataformatec Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>When building APIs, it is pretty common to use JSON as a serialization format. JSON defines serialization for boolean, number and string, but not for date/datetime values.</p>
<p>What most serializers do with Date and DateTime values is to use the ISO8601 standard. For example:</p>
<pre>
# Date format
2011-07-14

# DateTime format
2011-07-14T19:43:37+0100
</pre>
<p>However, you should be aware that information is lost when you use the Date format. That happens because a Date value might differ between different timezones. Let me give you an example:</p>
<ul>
<li>a request was issued at <code>2011-07-14 T01:00:00Z</code> (UTC) from Brazil (UTC-0300) to a service in UTC</li>
<li>if the time the request was created is exposed as a Date, it would return the value as <code>2011-07-14</code></li>
<li>but from the client&#8217;s perspective in Brazil, the correct date is <code>2011-07-13</code>, since at the moment of that request was issued, the local time in Brazil was <code>2011-07-13 T22:00:00-0300</code></li>
</ul>
<p>If this information is used only inside your app, within the same timezone, you would have no problems. But, if you need to make this information available through a public API, one of your API&#8217;s consumers might recover an incorrect value.</p>
<p>So, from this experience, <strong>any date value that will be shared and consumed by different clients should be represented as date time with explicit timezone or using the Unix time format</strong>. That way, it is up to the client to treat the data properly.</p>
<p>Here is an example of an API that returns a subscription period in the right way:</p>
<pre><code class="ruby">{
  period_start_date: 1409175049, # Unix time
  period_end_date: 2014-09-27T18:30:49-0300 # ISO8601
}

# Time.at(1409175049)
# DateTime.parse(“2014-09-27T18:30:49-0300”)
</code></pre>
<p>The options above have the advantage that both are unambiguous and sortable. You may choose between one or another based on the fact that the timezone option is easier for human comprehension. But remember that <a href="http://unix4lyfe.org/time/">Timezones are a presentation-layer problem</a>, so if you just need to pass data around, Unix time is preferable.</p>
<p><em>Have you ever had this serialization problem or any other that caused information to be lost? If you have questions or any experience to share, please, leave a comment below.</em></p>
<div style="padding:40px 0 20px;">
<a href="/subscribe/"><img decoding="async" src="/wp-content/uploads/2014/11/subscribe-to-our-blog.png" alt="Subscribe to our blog" style="border:none;" /></a>
</div><p>The post <a href="/2014/11/how-to-serialize-date-and-datetime-without-losing-information/">How to serialize Date and DateTime to JSON without losing information</a> first appeared on <a href="/">Plataformatec Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>/2014/11/how-to-serialize-date-and-datetime-without-losing-information/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
