Subscribe: techno.blog("Dion")
http://www.almaer.com/blog/index.rdf
Added By: Feedage Forager Feedage Grade B rated
Language: English
Tags:
android  developers  doctor  don’t  fwww youtube  google  great  https  make  man  new  platform  things  time  web  work 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: techno.blog("Dion")

Stories by Dion Almaer on Medium



Stories by Dion Almaer on Medium



 



Flutter

Tue, 13 Mar 2018 10:28:45 PDT

Flutter

(image)



render() your consciousness

Tue, 20 Feb 2018 09:06:00 PST

I recently woke up, remembering a dream that tied together the following:how does our consciousness surface a certain subset of the huge amount of input that is processed in the brain?how can we best handle all of the events in our computing systems, and render a UI that represents a valid state?how can we build a UI representation that helps users, with their consciousness, actually get something useful done? src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Flyu7v7nWzfo%3Ffeature%3Doembed&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dlyu7v7nWzfo&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Flyu7v7nWzfo%2Fhqdefault.jpg&key=a19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=youtube" width="854" height="480" frameborder="0" scrolling="no">https://medium.com/media/5ae0827600fa382f31671f5ea9f5e654/hrefIt wasn’t shocking that I had this dream, given that I fell asleep listening to Anil Seth as a guest on Sam Harris’ podcast, which I turned on right after coding.When we write programs that model the world, one of the areas that we often struggle with is the notion of representing time, and how state changes over time. It is a source of many bugs, and has lead many to look toward immutable state as a way to avoid foot guns. Rich Hickey famously explains his experience on the topic in Are We There Yet?How our consciousness batches timeWhen you zoom in with concurrency and time, you get into the notion of something happening at the same time. At first blush this is a simple concept, but when you look deeper at how our consciousness deals with this, it is fascinating. As we get new tools to probe the brain, we are uncovering a lot of new information, such as learning that decisions have been made before you thought you made them.Simple experiments show the layers of filtering and input changing that occurs. If you touch your finger to your nose, it always “feels” like the touch happens at the same time for both digit and nose, yet your arm is longer than your nose. Inputs from the nerves must reach the brain at slightly different times at therefore at some point they get put together as a batch.It appears that our component systems are getting masses of input that we are processing, and there is competition for the right level of info to reach our consciousness. We can direct things at times (e.g. we can take control of our breathing, but fortunately don’t have to focus on it to always happen) but mostly we are observing and our consciousness is revealing what has happened.Back to programmingThis shares some similarity with painting the right UI for our users (and vsync). We can gather information from our components, batch together the state, and prioritize what to render. With the appropriate amount of complexity in our state, especially considering the difference between app state and UI state, it may make sense to use a system such as Redux to manage the batching, or maybe you prefer TJ’s state management library https://twitter.com/tjholowaychuk/status/957853652483416064.Elsewhere, it is common to debounce, sometimes with exponential backoff, to make sure we aren’t wasting a lot of time and resources.joshwcomeau/redux-vcrImmutability also has huge side benefits. We can save snapshots that enable improved testing and time travel debugging. Also, any excuse to bring back a VCR is surely a win ;)Using the past to change the futureHaving snapshots of state is one thing, but what about using old states to help you in the now? While we often save past state snapshots, we don’t often use them in rich ways to help change future state, but your brain does just that. Experiment after experiment shows the importance of context. src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F3P8q_dCU3RI%3Fstart%3D56%26feature%3Doembed%26start%3D56&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D3P8q_dCU3RI&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F3P8q_dCU3RI%2Fhqdefault.jpg&key=a19fcc18[...]



Gearing up the Web for 2018

Fri, 29 Dec 2017 10:40:25 PST

It’s the time of year when you reflect and refocus. With the recent news of Edge and WebKit bringing service workers to their people, it is hard not to reflect on the long journey of bringing rich, some may say app-like, capabilities to the Web.body[data-twttr-rendered="true"] {background-color: transparent;}.twitter-tweet {margin: auto !important;}@MSEdgeDev ❗️It's like we got huge present from web platform this holiday🎁 Safari Technology Preview release from @webkit says "we're excited to enable Service Workers by default in this release. Please test our implementation with your websites" 🎉🎉🎉 https://t.co/tINheFZSzv — @ChromiumDevWith 2017 sunsetting (in some ways: good riddance!), I thought back ten years to 2007. You may remember the simpler times where Arnold was the Governator in California, Mad Men and Flight of the Conchords were on the scene, and Steve Jobs showed us his new phone.In the world of the Web, I was working on Google Gears.Any excuse to get the zipper image back!This was a pre-Chrome world where developers who were trying to bring bleeding edge desktop web apps (Gmail, Google Docs, etc) often reached to a browser plugin to deliver the functionality that they needed (Flash and Silverlight). We were seeing a resurgence in using HTML/CSS/ and JS to power the UI, using plugins to get access to some native capabilities — Remember XMLHTTPRequest was born as an IE ActiveX component.Picture yourself with a Gmail that nailed spam and search so well that Eudora was tossed aside. One restriction though was the reliance of a tether to the Internet. A next obvious step was to take Gmail offline (including that great search!) and improve all of the perf (always an issue ;).Gears brought us the modules to do just this, and it is fascinating to see which primitives we ended up with:A Database module (powered by SQLite), which could store data locallyA WorkerPool module, which provided parallel execution of JavaScript codeA LocalServer module, which cached and served application resources (HTML, JavaScript, images, etc.)A Desktop module, which let web applications interact more naturally with the desktopA Geolocation module, which let web applications detect the geographical location of their users (Google Maps any one!!!)How many of these are still needed to pull off a great web experience, worthy of the home screen addition from a loyal user, even as we have moved to mobile and beyond?But a browser plugin wasn’t the ideal solution. You want the platform itself to grab onto good ideas and bake them in (hopefully learning from the implementations to come up with something much better). Also, 2007 remember….. with Safari on iPhone, and Jobs said “nope” to the plugin world (and thus the fall of Flash and Silverlight).Let’s take a peak at the problems we were solving and what the solutions we now have available, with the new context of mobile, and where we can be heading in 2018!Dealing with dataThe Gmail team dealt with much pain on the bleeding edge as everyone worked out how to store (sometimes large amounts of) data correctly locally and sync it with the backend.We quickly codified SQLite into the platform via WebSQL, which didn’t quite stick. There were issues with baking in an implementation into a standard, but I also wonder how much gas was lost from the effort because the world jumped into a “NoSQL” bandwagon. The many benefits of SQL have held the test of time, and with new innovations such as Spanner, I do sometimes wonder if it wouldn’t be kinda great to have SQL back in the client toolbox?Instead we got the likes of DOMStorage and IndexedDB, as well as many solutions on top of our primitives. Today we see a lot of usage of Firebase (including the new Firestore which has offline support on the Web!) and there is also large mindshare in the GraphQL space, with great clients such as Apollo.So, we have a lot of work going on with respect to data, both on the clie[...]



Can Syntactic Sugar be Nutritious?

Mon, 11 Dec 2017 08:36:00 PST

When it comes to nutrition and food, there is nothing that we vilify more than sugar, as we find out how wrong we were with fat. As programmers, we often poo poo syntactical sugar, but two interactions that I witnessed reminded me look deeper.The two stories were of Kotlin and ES6.Once you kot, you can’t stop src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FER9L6Gg3HrE%3Ffeature%3Doembed&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DER9L6Gg3HrE&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FER9L6Gg3HrE%2Fhqdefault.jpg&key=a19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=youtube" width="854" height="480" frameborder="0" scrolling="no">https://medium.com/media/8a87abb0177f4f3a9843de563ed0fdf3/hrefLet’s start with Kotlin. There has long been excitement with the language, and when we announced our support at Google I/O there was a huge cheer, as this signaled that, not only will we not be doing anything that could harm Kotlin support, but that we would invest in making it great. Java isn’t going away, but everyone knows they can safely dig into Kotlin. I would go even further and say that you should at least be playing with it. Many top apps have been using it in production for some time, but if you aren’t quite ready for that, look for other areas to get your feet wet such as writing unit tests to get a feel.Pat still wasn’t sold. Why bother with a new language? Functionally what can it do that can’t be done with Java? What about finding knowledgable engineers? Or the fact that we don’t have as much documentation for it yet? At a high level this is logical, but then something happened. Pat tried it, and after a weekend of hacking with Kotlin realized how productive and fun it was. As often happens, the expectation bar rose and it meant that going back to the verbose Java code seemed…. old fashioned. Less code, fewer NullPointerExceptions, and new libraries got the juices flowing in a new way, and it didn’t hurt that Android Studio was a nice helper along the way.I don’t need no stinking classesDevyn saw ES4 come and go. After years of working with JavaScript, with The Good Parts on the office desk, the notion of prototypical inheritance was a huge feature, and there was no need for class syntax.CoffeeScript came around, and although Devyn actually liked many of the features (arrow functions, the role of spaces, rest…, lexical scoping) they never seemed worth the cost.Then we started to see changes in JavaScript itself via ES6/2015, and Devyn was still skeptical. Do I really want to use babel in my flow and set things up for older browsers? Once again, a coworker pleaded with the TL to give it a go on a small project. Fast forward a couple months and Devyn is one of the biggest proponents on the team. When asked why, a huge turning point was the road from callback city, to promise mountain, to async/await lake. Finally, it was all making sense.const makeRequest = async () => { try { // this parse may fail const data = JSON.parse(await getJSON()) console.log(data) } catch (err) { console.log(err) }}Say what you meanAll of this was wrapped up in our project’s mantra: “say what you mean”. —Alex RussellWith this cleanup, we are moving developers closer to the point where they can cleanly say what they mean, without scaffolding getting in the way. Gone is some of the verbosity, and we can huffman encode things that we use all the time.Don’t function make me function in my function chainWith custom elements we can get away from div div div divitisNot having type information shoved in your face all the time gives your code space to breath (Dion (a Person) went home (a House))It turns out that paper cuts really do matter. Speaking of types, one area that ES2015 has stopped short on is optional types, leaving room for TypeScript to become yet another example of something that many developers thought they didn’t want. Casey t[...]



Platform? Patience

Tue, 14 Nov 2017 10:01:01 PST

“We are a platform company” — VC pitchWhenever I hear this utterance I get curious to understand what this person thinks that means. Sometimes it ends up being related to wanting to be a platform company, but that is besides the point. If you really do end up being a platform company, then one key aspect of a great one is patience.If you are fortunate enough to grow a business that has success, you now have producers and consumers working with you (I will switch to developers and users because I think about developer platforms :). Congrats! Just one small thing though….. it may start to feel like you are driving a boat vs. racing a Ferrari, and you need to account for that.Hopefully you got into this situation carefully and have plans for keeping momentum and moving the ecosystem.I once got stuck in a boat off of the Florida Keys. Everyone had forgotten that it was a full moon, and the tide came out quickly. This meant that we had a boat sitting on shale, and we had to slowly push it as fast as we could to catch up to the water.The tides are always moving in your business too, and you need to make sure that you have a way to keep moving ahead of them. You could also argue that your role as a platform is to be the ocean, and thus you need to keep the tide moving, nudging the boats in the right direction.To do this nudging correctly you need to be able to:Communicate the vision of the platformWhere are you going? Why?Keep the vision updated and get into the rhythm of “we are going over there!”, “remember when we said we were going over there? that time is coming!”, “we have made the change so you can go there, but haven’t broken you yet, but really…. time is running out!”, “ok, it’s really painful for you to not have made this change…. the warning signs are flashing”, “done.”Have a connection to developersHow well connected are you to your developers. If you have an important message to get out to them, how many of them get it? Far too often a platform is shooting out UDP messages that get missed, and developers don’t even have the information to do the right thing for them and our users.This can be really tricky. We have many ways to communicate, and most of them are lossy in some way, or don’t reach the right people on the other end. You can broadcast to email, or you can put messages in consoles, but do they reach a general “admin” account?Knowing that you have a lossy protocol is important, and puts the burden on you to re-try across the board, and capture when there has been real action. There are plenty of basics to get right such as having the same messages reach the various touch points. E.g. can the central console messages reach developers in the tooling that they live in each and every day? Do the various tools even get the same message across? Often the answer is…. sub-optimal.Have a connection to usersDo you have good control over the platform that the user actually has? Can you update it and secure it? Just as the connection to developers is key, so is this.By moving the developers you keep upgrading the experience for users.By moving the users you give reason for developers to prioritize.By moving them both, everyone progresses, hopefully leading to much success for allThe patience partOnce you have a plan on how to keep momentum, you still need to acknowledge that you will probably have to be patient. Your platform priorities may not always totally align with those of developers and users.With both, there are incremental updates which can work nicely (smaller changes) unless they are too small to prioritize.With larger efforts you are reaching a new level, and you may find yourself running into a natural cycle. E.g. it’s been a few years and there is enough value to be had that the product team is ready to rewrite a large part of the system, giving them a chance to jump to the next level.Now, building the next generation of primitiv[...]



Nudging out screen time

Sat, 04 Nov 2017 15:32:38 PDT

I found myself on a long plane trip from Europe (the Firebase Dev Summit in Amsterdam, which was so much fun…. getting to hear from developers creating) and in the frozen-in-time-haze found myself looking at the old tale of a Rabbi helping a family in a small house, find contentment.Living in the Bay Area, having a small area to live in definitely resonates. However, I then found myself rewriting the story, inverting the order of “filling up the space” and targeting an area that I struggle so much more with: creating a healthy relationship with devices and technology.Here is the adaptation, which I believe is just as cheesy as the original ;)A middle class man lived with his wife and six children in a very small house in Palo Alto. They were always on screens ignoring each other and it was driving the parents crazy.Finally the man could stand it no more. He talked to his wife and asked her what to do. “Go see the psychologist from Screenagers,” she told him, and after arguing a while, he emailed.The doctor greeted him and said, “I see something is troubling you. Whatever it is, you can tell me.”And so the poor man told the shrink how miserable things were at home with him, his wife, and the six children all addicted to their screens. The poor man told her, “We’re either not talking at all, or we yell and fight to get each other off our devices. Life couldn’t be worse.”The doctor thought very deeply about the poor man’s problem. Then he said, “Do exactly as I tell you and things will get better. Do you promise?”“I promise,” the poor man said.The doctor then asked the poor man a strange question. “Do you have any hobbies?”“Yes,” he said. “I like sports, and hiking, and making things in the shop.”“Good,” the doctor said. “When you get home, get the family to go for a walk after dinner each night.”The man was hoping for advice around device usage, but he promised to listen to the doctor so he went home and after dinner took the family for a walk.The next week the man met with the doctor. “We are all still arguing about screens“ he cried. “Going for a post-supper walk is nice and all, but it isn’t helping“The doctor listened and said calmly, “Now go home and signup everyone in the family for a weekly piano lesson, with 30 minutes of practice, daily”The chap did as the doctor said, but hurried back again the next week. “The piano practice is great, but still…. the screens!!” he moaned. The good doctor said, “Go home and make sure everyone reads for 30 minutes before bedtime.”So the poor man went home and got his family reading at 8pm. But he ran back again the following week, still crying and wailing. “The reading is great and all, but still, too much screen time is afoot“The doctor said sweetly, “My friend, you are right. Relax as a family and just play some board games.” And the poor man went quickly home and took out the backgammon.The next month he came running back to the doctor again. “O Doctor,” he said with a big smile on his face, “we have such a good life now. We are getting exercise, and spending time with each other, and the kids are doing well in school. I hardly mind that we spend some time with technology. Our lives are so full elsewhere, it finally feels appropriate”Any thoughts on success that you have had managing family balance are appreciated ;)Nudging out screen time was originally published in Ben and Dion on Medium, where people are continuing the conversation by highlighting and responding to this story. [...]



Google: The Iron Man we strive to be

Tue, 05 Sep 2017 07:08:09 PDT

In a recent meeting we were playing with the question:“If Google was a super hero, what would we be?”The first thing that came to mind was Iron Man. You know, the innovative engineer who uses his technical ability to become super human.In the developer group our mission is to make sure that Tony Stark uses his power for good. In our case, we want to give away the suits to democratize AI, computing, and more. We take this mission seriously.Why do we need to innovate and also help developers? Let’s turn back to Tony again. His origin story included the need to create a source that can power an electromagnet keeping shrapnel from reaching his heart. Innovation due to necessity.Google is a platform company, and one that thrives with open ecosystems. It is imperative that we do all we can to help the survival of open systems over closed ones. This is why we care so much about an open Web, Android, TensorFlow, and open cloud computing.We also know that we are still young. Google is turning 19 a pivotal time for anyone. Can we keep our youthful optimism whilst gaining maturity?Brother Chrome, Brother AndroidI am currently in Krakow for the large European Google Developer Days (a beautiful city!) and a developer came up to me to ask how I felt about “Chrome vs. Android”. Someone else leaned in to ask if I was frustrated with the fact that we “have so many platforms.” I get it. We have multiple platforms, and they are sometimes a lil more messy due to their openness.On the flip side though, I wouldn’t have it another way. Where some may see “Chrome vs. Android” I see “Chrome and Android”. Not only does Android literally give us a vehicle for us to build a world class mobile Web browser that can push on rich integration, but the reach that we have with both is amazing:With Android we have a world mobile OS that is on billions of devices all over he worldWith Chrome, and even more broadly — the Web, we extend the reach to non-Android devices.That sounds like a killer duo to me. Ben and I actually just gave a short talk about the “brothers” of mobile native and the Web, and they journey as siblings growing up together. src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FwGhwxQbhUdg%3Ffeature%3Doembed&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DwGhwxQbhUdg&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FwGhwxQbhUdg%2Fhqdefault.jpg&key=a19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=youtube" width="854" height="480" frameborder="0" scrolling="no">https://medium.com/media/4acc751b3c79ba66b8394c9529fa70ec/hrefI look forward to a bright future for all.Google: The Iron Man we strive to be was originally published in Ben and Dion on Medium, where people are continuing the conversation by highlighting and responding to this story. [...]



Operating System? Help Me Operate

Mon, 28 Aug 2017 09:12:42 PDT

I want my computing platforms to help me reach goals and get things done. At this point, I have hacked and slashed my current “system” which involved manual process and automated scripts, to try to help me progress.However, I often feel like I am fighting my environment, and long for an update to my devices that say “ok, let’s really help you be super human”.Beyond using Google tools (Gmail, Google Docs, Google Drive, Google Calendar, etc), I also use Asana, Coach.me, and Anki to store, track, and learn. I trick out my Gmail, somewhat akin to how Greg Wilson does, and after reading Algorithms to Live By I stopped trying to build the perfect system and embraced things like caching. My hacks make sure that important data gets into multiple systems, allowing me to search from any of them and get to what I need.When I saw that Thomas and Amy were working on a new task system: Sweep it reminded me of the friction that I face with driving habits. I have found that I can become reliable at doing something when I do it daily. The difference between doing something twice a week vs. daily is huge for me, so I try hard to find a way to make the unit of work a daily thing, even though for many things this isn’t possible.How do I handle daily habits via my phone?I have a folder called “👊” that houses the apps that represent a habit. In there lives a tracker app, such as Coach.me (there are others such as HabitHub (Android, soon iOS) or Productive (on iOS)) to make sure I am tracking the work. In here I track the daily status for things like: Exercise, Study, Ate Healthy, etc. I have alerts in the morning and evening to make sure to check in and check off. Some of the apps have that built in, else you need to just use the Calendar.The rest of the folder contains the specific apps that map to the activities. E.g. 100 push ups for a quick exercise, Duolingo for language learning, Headspace for meditation, Metabolic for food tracking, etc.This manual tracking is far from ideal and what I really need are the following features:Smart notificationsYou want to be reminded and nudged to do the work, but in a smart way. Elevate has a smart notification system that will only bother you at a certain time if you haven’t done the work (duh).Some of the trackers have decent features here, but still often go a lil off. I don’t need to be told “there are 4 items to be done today”, I got that.Google Calendar has a feature specifically for habits, based on the acquisition of Timeful. You need to block time to get things done. Sure, you can block off a set time, and that can work, but the habit feature is smarter than that. If an emergency meeting is placed right over your time slot it will find another time for you, to make sure you don’t miss it.Smart badgesShow me how many I have left as a badge. Productive even has a nice option where you can tag a habit to a time of the day, and not show you a count if it isn’t time yet.Usage detectionFor habits that have an app associated with them, they know when you are actually complete (vs. the app just being launched say). It would be nice to have an API so the app could give that information to the system. Then you would get tasks auto checked off, and could even show badge colors (yellow for started but not complete?).Some activities that aren’t simply about app usage could still track. Were you at the gym for an hour? Did you run or bike? There is a lot of context that can be used.Magic FolderI want to go beyond a folder. On Android you can create a much deeper experience, which I hope to see. I would love to have a rich widget that shows me information and auto hides apps when they are done for the day.I haven’t even gotten to the tracking of actual outcomes yet. In a world where so many of the brightest minds are fighting for attention, I am hoping that we can pivot the ze[...]



Ecosystem Engineering

Thu, 17 Aug 2017 10:01:27 PDT

“An ecosystem engineer is any organism that creates, significantly modifies, maintains or destroys a habitat”— WikipediaWhen you are working on platforms, you have the needs of the producers, consumers, and the market itself. As the market, or platform owner, your job is to make sure that the ecosystem as a whole is healthy.One key is to not get too greedy at the platform layer, as Bill Gates put it:“A platform is when the economic value of everybody that uses it, exceeds the value of the company that creates it. Then it’s a platform.”This is somewhat common sense, but why do we often do such a poor job of taking care of our ecosystems?One reason is that it is a hard, complex slog. When you are building something new you have a lovely green field and pivoting doesn’t have the number of side effects. You don’t have as many dependencies to manage, so you can run fast and break things. You have built a lean product team with top notch engineers who are cranking through their sprints like Usain Bolt.Then something happens. The success of the work slowly changes the game, and before you know it you may be in a situation where the team members don’t really know it has changed! The incentive structures in the company may have been setup to reward the wrong things.For example, as an engineer, the way to get promoted is to tackle harder and more complex problems, delivering fantastic solutions, in record and reliable time. You level up by showing how your craft has improved. This may be utterly at odds with the needs of the day.Let’s look at a real world example. The Web is too slow and this causes a major drag to the ecosystem health, resulting in the current epidemic. If you are an engineer on a browser team, you will be working on more and more complex technical solutions to either:Taking the existing content, speed it up in the browser. Incredible work has been done here, and it gets harder and harder (and more complex). Compare older browsers and how they blitted pixels to the screen vs. the complex GPU architecture that is in there now.Build new standards and implementations that have faster paths. This is geological time, and a ton of work too…… and the solution isn’t enough, you need adoption.If your core metrics are based on browser metrics, these are the paths you will take. However, if your core metrics are around the speed of the Web at large, which includes other browsers, then your point of view may change. Your investigation occurs at another layer and you may end up with totally different conclusions.For example, Wordpress is a huge percentage of the Web, including new content. This may have you conclude that helping make Wordpress faster (better AMP support, service workers, etc etc) will actually generate a truly massive impact on the perceived performance of the Web at large, and it may also cause a competitive push with other CMSes. We see this happen again and again. For example, Flipkart being the “Google Maps of PWA” drove a lot of mindshare in India on investing in performance, especially from the eCommerce vertical. But this work is far from sexy. Many engineers would rather NIH yet another amazing CMS versus go in and make Wordpress better.Engineering teams are naturally working on the next feature / version of the platform. Take something like iOS or Android. Their yearly drumbeat is intense. I get to see this first hand by witnessing the mammoth effort that the Android team takes on. As we tick to the N+1 version, it is natural to focus on solutions there, but the ecosystem lags behind.This is why work such as the Android Support Library came from Chris Banes, an engineer in Android DevRel. If you are talking to developers everyday, you are living in the real world constraints of today.It is critical that we line up the outcomes at the ecosystem le[...]



Embrace and Opine

Thu, 27 Jul 2017 15:25:53 PDT

How do you embrace all of the great work that a community is doing, and also share strong opinions on the health of an ecosystem and guide developers away from the paradox of choice?We often struggle with this at Google. I have seen a trend occur, which is the title of this post: Embrace and Opine.We want to be part of the community, understand it’s needs, and help foster the creativity abundant in it. We are reluctant to be kingmakers (or queenmakers etc!) and thus have to be delicate not to squish anything in the ecosystem. We can’t allow this to paralyze us though, so we have worked to detail the outcomes that we feel are important and we invite the community to offer solutions.For example, the Web isn’t widely experienced in a way that highlights what it is capable of. Web DevRel works to not solely offer guidance, but also share tools such as Lighthouse, which can help you walk the path to a good experience. This isn’t just about performance, but helps share best practices across security, a11y, PWA, and more. Lighthouse has been written to be extensible, so you and the community can write audits.There are also great examples across our other developer platforms:Android has become much more inclusive of the community. The most obvious example is the embrace of Kotlin, and how we are collectively working to make it as great as possible on Android (it’s got a great starting point, but we can always do better…. and we will). There are many other efforts here too, where we are talking about how to best solve problems, and being inclusive of how great open source and community libraries can be part of the solution.The Assistant team acquired API.AI, which thinks developer-first by recognizing that you don’t necessarily want to build things differently for every platform out thereFirebase has a vibrant third party ecosystem that the team fosters. We open sourced much of the Firebase SDKs at the recent Google I/O (and this was just the start).Setting guidelines on the outcomes that are important and embracing the community is great, but it isn’t sufficient.We often hear from developers that they want to understand our opinions. To that end, we are trying to delicately walk that line without closing down options, and being humble when we don’t know.Building on some of the examples, you can see how this works as the other side of the coin via:The fact that we have highlighted Kotlin, when there are plenty of other choices on the Android platform. Our high order bit is helping you build fantastic experiences for your users. This can be done in a variety of ways. With Kotlin we felt that we could join forces to deliver more. We are also sharing more opinionated positions and libraries for how to best build your apps via the Android Architecture Components (side note: I am really enjoying Florina’s series on exploring Room)AMP is very opinionated in using constraints to enforce performance. Polymer is very opinionated in how best to build Web applications as close to the platform as possible. We are excited when companies such as Wego put these together to great success (in terms of user engagement, dev productivity, etc), but we also highlight success of other companies using other frameworks, such as Twitter. With HNPWA we provide a way for everyone to play the game and compete, which is great. We are seeing more and more frameworks supercharging their mobile support, and showing how to build web apps that work for users. If many frameworks are pushing on this, more users win.Firebase is obviously very opinionated itself. The Firebase team has a high bar for developer experience, and thinks about how the sum of the parts result in more value for developers. The notion of being *part* of Firebase it an opinion in of itself. Hopefully developers are learning [...]