 So good afternoon everyone. My name is Kwan and I work for a company called Denden. It's a startup here in Barcelona and what I wanted to very quickly talk to you about today is an idea, a conversation I had with Fadi Chahade. He's the CEO of ICANN and I had this conversation about six months ago and it's a thinking piece. It's a thinking piece. So as you all know ICANN essentially runs the Internet. It assigns domain names, it runs the IP addresses and the reason ICANN is important is because it holds the Internet together as a single Internet. It's not multiple Internets and the whole job of ICANN is to make it one Internet because that's the most useful Internet. So for example fullstackfest.com always produces the information at fullstackfest.com. ICANN ensures that the fullstackfest.com address goes there and resolves there every time. The IPA address for it goes to a single machine. So the reason I'm having this talk with you is that I think we're at the cusp of a very interesting new era and this era is dominated by a few different technologies and one of the most interesting consumer technologies is maps. Maps are everywhere and I think they're going to become one of the most interesting services out there. Who used a map to get here? Probably almost everyone and I think probably over the last year I would say the majority of you have probably used a map to search for a restaurant or some other service and over the coming years you'll be able to find products and specific services on maps so right now you can't find let's say a pair of Nike Air Jordans on a map but soon you probably will be able to. And the reason I'm talking about maps and ICANN is that we have Google Maps, Apple Maps, Baidu. Anyone from China? Nobody from China here but there are a lot of Chinese people out there using Baidu Maps and they're traveling all over the world. You know what their problem is? Baidu's map ends at the Chinese border. This is a problem. Imagine if you had Google Maps and you went to Germany and your map showed nothing. This is a big problem out there. So map information is not distributed evenly and people who run maps like Apple or Google or even Facebook coming out with its own map right now are not particularly interested in sharing that information because the information that you get on maps particularly information related to shops is very very hard to come by and there's a really interesting reason for that. If you if you don't actually go to the physical shop most shops don't exist anywhere except for physically in real life whereas the the main utility of a map is to be able to find these services. So how do you find them? You actually have to go there and physically get there. If a shop gets onto a map currently we get that information through social services which is fantastic because that's how we have the information and that information can be guesswork it can be different and as maps become more useful it can also be malicious. In the United States there's a lot of work around Google Maps to clean up what's happening around locksmiths. Phantom locksmith services for example pop up all over the place. Locksmiths competing with each other on the maps. Un locksmiths that don't actually even exist but exist in your physical search so that they can get your business. So the opportunity here is to think about maps and the identity of shops and I'm talking about shops because shops are probably the biggest value gain on maps when you go out to search for a product to service in your local area 70% of people are shopping for things in their local area and not actually buying things online so shops are going to become a kind of economic backbone for the rollout of map services. So shops should have a way of being represented on maps in a single uniform way in the same way a domain name gets out there. So imagine if you have a shop and you're running this shop and on one map you're open at some hours on another map you're open at different hours and on the third map you don't even exist. So this is currently a minor problem but that problem increases for shop owners as maps become more useful and I think we can see that at the rate of utility of maps growing in its current speed in the next two to three years it's going to be imperative for shop owners to be able to have a single identity across different maps. So simply it's a thinking piece what if there was an ICANN for map identity services right? If your shop can be on different maps all over the world in different places and be the same identity everywhere that's like an ICANN for maps. So that's all I wanted to tell you about and thank you for your time. Okay hello guys. My topic my subject is full stack polyglot framework proof of concept. I made it for Pivorak Ruby user group in Lviv. I recommend Bob. Okay so everything is at this links. Let's start with polyglot programming. This is the approach I used in this proof of concept. So the first important thing is to choose the best tool depending on your task and normally you would use something for example from your current stack if you solve new problem you think in existing libraries for your stack but well just think just try to think in whole universe of programming tools and the way I achieved how to combine all these technologies together is universal one structure for all of them. So just let's start with services. Think about them like of ideas which are just not physical ones then go to components which are also ideas but user can touch them like see and touch they are kind of physical and up is the root directory which contains components with context. So if your component has only one specific context then it's right place to use it for example top search bar in some application. It's a good examples because you use it only once so context give you gives you some order and if you go into app you will know what's the purpose of this application and also the well we have jobs. So just look at this chart on left and right side so from left you serve user events and from right you serve admin of the application events and additionally to this you have tools directory where you can implement any kind of technology you know. So this technology just needs to be aware of this structure and also well I think it should be this way. This is how I build this different technologies like what's my main idea of full stack applications so a lot of stuff is just a static file which you keep in on CDN. Well I will just go to benchmarks so we can run now out of the boxes like 1000 requests per second using Ruby and Ruby is not a bottleneck there. I know how to go into 6,000 requests and let's just show the application because I'm running out of time. So yeah it's bundled somehow. Let's start a stack. Let's refresh the page. Yeah I'm glad it works. So that's just a proof. It's a lot of different ideas bundled just because I was leading this chart which I had no chance to no time to explain. Well I have still a time so I can show you some features which you will not normally find in your application. For example together with your stack you have kind of another tool which is in PHP. I don't use PHP but it was really quick to implement and here is our view to database on our development stack. Also if I will delete whole database which is on Docker. It's empty right now. Well let's reset application. So the thing is it created database for this application. It created migrations for models I've used and it created relations and maybe something more and it's automated because it's possible and it was just one of the idea and also I will show you quickly. Like if you go into the tools I've implemented Electron it was five minutes after I just knew this tool called Electron. It's for making from web application desktop application. So it's like out of the box after five minutes implementations right. And if you use some tool you like you can integrate it with it easily. You just need to learn this universal structure where you keep things and it lives for it lives together in for example you can see like I have here many different technologies like CSS, JavaScript, Ruby, HTML and you know what's this application about just because directory organization. So just consider it as the only common thing in your between different languages. So you can structure with your application and it's well organized even if you have a lot of different technologies. And also you can think about it as a fractal structure because no matter how deep you you you'll go into directories it's familiar to you what's what's inside. And one more thing I can show you like in tools. These are components of the chart I've showed quickly at the beginning. So for example if I would not have this config here basing on a config example it will say like there is one config file missing and also everything was inside this young no matter where did you put it in your structure you will have this this stuff as the environment variable which is also a common stuff for any kind of language. So it's you can use it in Ruby node PHP or whatever. So that's how you configure this kind of stuff. Yeah well just let me know if it's interesting somehow. Thanks. Okay hi everyone my name is James and I work with a company called Teespring and today I'm going to talk a little bit about a subject that's come up a couple of times in the in the talks this morning this afternoon and it's going from a monolithic application and towards something else is it microservices is you know some of the kind of more modern architecture and this is something that we're doing right now at Teespring and I've formed some opinions about patterns that definitely don't work or didn't work for us anyway and some opinions about things which do work or at least currently are working and I hope they continue to work otherwise we'll have to figure things out again. So for background we are a company that has been going for about four years. We've got about a hundred hundred and ten contributors to our main monolithic code base over the years. There's been multiple different styles coming in and out. There's like 300 database tables. There's a huge amount of craft and legacy which is the sign of us having kind of grown quickly and found success and not had the time to put the polish when we might have done when we might have liked to have done. But the first the first point I want to make and it's because it's the most important is unless you absolutely have to decompose your monolith do not do it. It's a huge pain. There's no getting around how painful it is. You're going from a single system which might be kind of funky but if there's a problem you know where the problem is. It's in the monolith. You've got one stack trace. Super super simple. Anything else where you have multiple services is a distributed systems problem. There's no easy answer. It's a really difficult problem to address. Even simple problems turn really complex when they're distributed. So unless you have to just don't do it. Anyway so the first approach that we took that didn't work for us was to build a separate standalone system which captured one domain one kind of business domain that currently existed inside of our monolith and to build a separate system which did exactly just that one thing. And it's so appealing right because it's green filled development work after you've been kind of slogging around in this monolith. It's really refreshing. You get you feel you're getting loads of stuff done. It's you get to use them the latest programming technologies and all these great patterns that we should have had in from the start and you know blah blah blah blah. However it's a false simplicity. It does not actually tackle the true complexity of the problem. What you're taking on is extra complexity in terms of the operational the operational footprint. You are going to have multiple things running in your production system. We also found that our mental model of how the business truly worked was different from all of the stakeholders. It was also different from what was in the code base. So we were building this separate system that's perfect in pristine. But it's only perfect in pristine compared to our flawed notions. We also found that there was tons and tons of data old unclean data that existed in the database and we couldn't get rid of it because you know this is this is what the business was built on. This is our sales our users our sellers our buyers our t-shirts our campaigns. We can't get rid of it. But it didn't really fit in this brave new world where everything was fresh and clean. Like there was no kind of migration path forward there. More generally there was no migration path of like how do we stand up this new thing and do like a cut over like that. There's no there was no kind of simple way maybe even no way at all for us to move from this kind of monolith and be a kind of clean switch into this totally separate thing. The last problem was we couldn't freeze the logic we couldn't change the we couldn't prevent changes happening inside the monolith because this was like a critical business domain. So even though we're building this separate pristine super clean separate system it was out of date after a week and then we fixed it and then it was after date after a week because we were going after a moving target. So I definitely don't recommend trying to build a separate standalone thing. It actually reminds me a little bit of one of the slides that Amir showed of deconstructing a monolith and when you might want to use unicornals and in his diagram on the left side he had a kind of mosaic almost of like little triangles and rectangles and he sort of checked them off and then stood them up and sometimes are in containers sometimes they're unicornals and unfortunately that just isn't it wasn't the case with us and it probably isn't the case with with true monolith. It's actually this kind of meshed network of unexpected kind of pointless super confusing dependencies going in every single possible direction and the true challenge is to try and work out what those kind of atomic units are to move out and if you're building a separate standalone system all that complexity still exists in the old place and you're going to have to tackle that sooner or later so you might as well do it sooner. I'm going to skip our second approach because I'm going to respect your time a little bit so the approach that we are currently using and that's working quite well is that we have decided to establish a bulkhead within the monolith and say okay this is going to be the interface between our kind of legacy code and the new bounded context of you know Eric Evans terminology the new kind of new business domain is going to be behind this interface and we're going to define it now even though everyone is still talking to each other and it's a huge mess and it's super tangled whatever else at least we are planting a stake in the ground of in the brave new world after we've done this extraction everything will be going through this interface and it means that we can work towards the interface from two directions inside of the so we're all the work is going on inside the monolith we're just kind of repointing the bindings and the couplings to go through this single clean interface so in a legacy code rather than that reaching underneath the covers and like filling around in this domain it shouldn't know anything about we're repointing it to you this this bulkhead and in the in the system that we're going to extract into into a separate service rather than that reaching across the other other direction we're having that get this information from from this kind of conversion layer this this shed surface and that means that we are we have a single fixed target it means that we can work in isolation inside the the the ish inside of the domain that's going to move the legacy code is kind of in isolation ish and at the point that we finished we should theoretically be able to just kind of cut down that separation line with a scalpel and move it off into into a separate service so yeah I think the reason that's working well is because we're having to address all of these really gross couplings that I'm sure a bunch of you are really familiar with their existence so okay in summary definitely do not decompose your monolith unless you absolutely have to it's a huge huge huge pain no matter which approach you take I would also recommend against micro services for their own sake because every service you have definitely brings more complexity there's like a n squared increase in the number of linkages that you have if you add more nodes so have like have two services and see if it works and then have three and have four and have them be big and useful and important and and map to a real life business domain as well otherwise you're just kind of smearing the coupling over the network which makes it like an order of magnitude more complex right the complexity still there it's just now you don't even have the certainty of a message arriving it's it makes it way way way worse if you do need to decompose your monolith then it's all about the data you can't ignore the fact that there is kind of coupled data it's incredibly simple to refactor to refactor code compared to refactoring data and the references that exist within it so the first step that we found to be most helpful is to think about where the data is going to live think about how the data is going to be transitioned and then it's actually fairly simple to change the code on top of that and then the final point is duplication of both code and data is normally like a big no no for great reasons but in some cases it can be really really handy if you're planning on the two things not being co-located right so if you're trying to figure out how to make a module kind of work with both this side of the world which is going to be in service a and that side of the world which is going to be in service B you kind of already lost the game you need two separate implementations or to to facet the implementation to the separate pieces or whatever and same with and same with data if you if you can get away with not having extra dependencies of things being fetched and pushed and pulled and everything else and you can instead just duplicate your data in two places it's actually fine as a strategy for speeding the speeding the thing up I think making some compromises in terms of like the you know like the scheme of modeling and the the don't repeat yourself principles can actually really help and we found it to be really helpful so if you have any questions about how we're tackling this problem I would love to talk more and I've got a bunch more strong opinions about how to do it and how not if you have any other opinions I'd love to hear them hopefully to prevent me from having to discover things not to do all my own thank you very much wow let me enjoy this for a second look at this guys I don't have a talk for you today but I heard a great story that I would like to share with all of you I like I like sharing it with people it's about the mobile app of course it's called Duolingo who here has used Duolingo before hands up please my god who has not used it okay so the idea with Duolingo for the people the few of you that do not know is that it allows people to learn a new languages is very fun kind of gamified way to learn a new language I used it to to learn a bit of Spanish before I came here I failed but it's not the app's fault but what's cool about Duolingo is that they go to developing countries and they help people who do not have money or they cannot afford like better education to learn a foreign language an example of that was Brazil where they go to public schools and they allow people to learn English through the app which is great now here's the cool stuff though I read an interview with Bill Gates currently the richest man in the world and he said that in his free time he enjoys learning new languages especially using Duolingo and now this is a very powerful idea think about it you have the richest and the poorest man in the world having access to the same education now having been inspired by this I wondered is it possible to truly make education price less not in a metaphorical kind of sense but really allow people who needed most to have access to the kind of education only Bill Gates used to have access to less than a decade ago and for that we started something called restart network as you all know in 2015 alone more than a million refugees have reached the shores of Europe many of them came to countries like Spain but also to where I'm from from in the Netherlands Germany most of the countries you guys are coming from and our governments have tried at times slow and at times inefficient to integrate them in our community well I am a programmer and my first idea that came to my mind is what if we try to create the best computer science course a three-month long program that would take somebody with no IT background and would allow them to learn the fundamentals to bring them close to junior level so they can start the career as a web developer and that is why I'm standing here in front of you today because I realize that in order to truly accomplish this to create what we call a world-class program we need your help and what better place to ask for it than a room full of web developers and programmers in general so my message for you today is simple it's more of a question in the past three months we had a group of 20 refugees went through our program most of them were musicians architects pretty much anything else than a web developer or had any experience with programming and now they're graduating actually I have to leave midways through this conference even though I love it and I love socializing with all of you here because I have to attend the graduation and we realize here at the end of these three months that we have to make this program better if we if we truly want to be the Harvard of coding boot camps we need help and we need advice so please by all means come come to me afterwards say hi and tell me how do you think we can make the best computer science course in the world so we can help the people that need most start a new life on our continent and before I say thank you please allow me to take a screenshot with all of you as a memory from a full stack fest thank you guys thank you very much hello guys my name is Kirill I work at Susie Linux and I'm here to talk to you about schedules about budgets and all that boring stuff so to prove that I know something about what I'm talking I will finish before the light turns red and before my five minutes budget is over so please all of you who are currently working on a project which is behind initial schedule raise your hands come on come on don't be shy nobody's counted really only two I don't believe you the idea is that scheduling and setting estimations is a probabilistic process and because of that it's a world where one plus one is 3.5 maybe because you see we're engineers and estimation is probabilistic process so when we estimate something we will say what is the distribution around our estimation oh it's bell curve it's normal we ask engineer about something and he answers it's a normal distribution but obviously it is not because if I'm two hours earlier for my plane I'm probably flying the same plane so if I'm ahead of schedule it's just disintegrates but if I'm two hour later from a plane I'm fluent tomorrow and because of that the lagging behind accumulates so distribution is obviously not normal and I think that we can estimate better and for that I'm building a tool which helps you estimate optimistic but get pessimistic results and because of that always hit the schedule so during the gap day please join me and let's build this tool together I have a prototype and yeah maybe we'll show it on the next lighting talks