 Hi, thanks for joining my talk, bots, chat ops, COVID, and the Symphony Java Toolkit. I'm also going to talk about hackathons, workflow, agile, GitHub, and open sources we go. Hopefully I'll be able to tie all that together into some consistent whole, but you can be the judge of that. And I know that this might be a confusing bunch of disparate keywords, but over the next few minutes I'll unpack all those and hopefully you'll see how they all fit together. So let's start with Symphony. This is a screenshot from Symphony. It's a chat platform. I'm imagining that lots of people here today are very familiar with chat platforms now and use them from their day to day work. And this is Slack. It's pretty similar to Symphony, maybe you're familiar with that. You've got your chats down the left-hand side and the box at the bottom for entering text. And this is Microsoft Teams. And again, it's the same kind of layout. I guess you could say there's a lot of convergent evolution going on here. All these platforms share a lot of the same features. And we'll talk about some of these features as we go. And you might have seen this in the press lately about how the guys building Slack are trying to sue Microsoft over exactly that issue. Not only is Teams similar to Slack, but they're trying to push Teams out to everyone. They're using their dominance of office tools to try and muscle in on Slack's territory. And here is a Google Trends chart of those two. As you can see, Teams is now a lot more popular as a search term than Slack, which explains why Slack guys are getting mad. Now what's really interesting to me, at least, is what happens in March. Suddenly Teams gets this huge boost and Slack gets a smaller one, loads more people are using it. And I'm convinced this is COVID-related. It ties into when we all started to work from home. Somehow Microsoft got a big COVID-related uptick here, which really helped their notoriety. Now, Symphony isn't on this graph. Symphony is a kind of a small player when compared to Slack and Teams. It's super specific to the finance industry, and it has a really good market share there. The reason being, it has a much better story with regards to compliance and security, which is something that banks and financial regulators are really keen on. At Deutsche Bank, we saw the same thing as in this chart. The number of messages going over Symphony since about March has doubled. And that makes sense. People can't communicate face to face anymore. Obviously, COVID has changed the way we work. And Teams and Slack and Symphony, they're the kind of tools we used to interact with each other now. So let's just change tack now. This is the Manus Festo for Agile Software Development. It's a website from about 20 years ago. And I expect most of the people at this conference are going to know what Agile Software Development is. Basically, the guys who came up with the Agile Manus Festo were unhappy about the way the software got built in the 90s. And they wanted to throw out the big project plans and the big upfront design and so on and try and build software in a more collaborative exploratory way. This has had a massive impact on software development. And I'm going to run through a few Agile practices now really quickly because I know everyone's just going to be nodding along to these. They know what they are and I want to get up to the good stuff. But there are four main statements in this Manus Festo here. And the one I want you to keep in mind is the first one. Individuals and interactions over processes and tools. So here are a bunch of beautiful people having a stand-up meeting in their office. This could well be a photo taken at Deutsche Bank in 2019. Everyone stands up to keep the meeting short. These are individuals having interactions over processes and tools. Now, if I'm in meeting now, no one knows whether I'm standing up or lying down. The other thing about stand-up meeting is that it forces you to concentrate. But on a conference call or a Zoom chat like this one, I might be present but engaged in some other task on my computer. And if I'm present, but I'm not really paying attention and if you're there but you're not really focused and involved, is it really still even a meeting? Number two, this is a scrum board. It's a bunch of post-it notes keeping track of what works being done and who's doing it. And these were already on the ropes before coronavirus because of distributed teams. But now it's just impossible. There's no way I'm devoting a wall to my house in my house to do this. And it wouldn't help anyone because my team are everywhere else. So we end up with tools like JIRA for tracking this stuff. And here's some guys doing some pair programming, two people at one computer. And you can see there's scrum board in the background there. This doesn't really happen anymore either. We have to screen share to get things like this. And even then it's not quite the same. And the tools we generally use for screen share are things like Teams and Skype and things that allow us to do chat too. And so there's this idea of having teams big enough to feed with two pizzas. Now, this is attributed to Jeff Bezos on this slide. But I think this idea kind of comes from Kent Beck, who came up with the agile approach called XP or Extreme Programming. He was very keen on his developers all eating together and working in close proximity to each other so they could discuss their issues over a coffee or a donut. I don't know about you, but most of the people I work closely with now, I've never even met physically. A lot of them are in India. And finally, this is planning poker from scrum. The idea is that when you're planning what work to do, everyone's playing cards. And you play a card down and the higher the number of cards you play, the more complicated you think a piece of work is. And the idea that is that everyone in the team will eventually agree on the complexity, the size of a piece of work. The reason you're doing this with cards is to stop peer pressure and group think you don't want the first person's estimate to affect the last person's. So you play all your cards at the same time, face down, and then discuss why you all came up with something different. Again, cards, table, face-to-face discussions, it's all gone. And so this is that statement from the Agile Manifesto again, individuals and interactions over processes and tools. It's apparent now and certainly for a while that you can't do individuals and interactions without chat and phones and video conference tools. We need those tools. It's not a choice of this over that as the Agile Manifesto had it. It's literally, you can't do that thing on the left without the thing on the right. It should be individuals and interactions via processes and tools. But luckily, there are teams that have been working like that for a while now on GitHub, like a lot of other people. I contribute to software projects. And rather than coordinate with people using Agile approaches that I've discussed, we coordinate with chat. And here's an example where someone on the internet has contributed a minor fix for an article I wrote on GitHub. And they opened an issue, submitted a pull request. And then I reviewed and merged it. And GitHub works really well like this. So COVID is really forcing us to move away from those traditional Agile practices. A while ago, whether or not your preferred one approach over the other was personal style. But now that's kind of irrelevant. You have to make that change. Let's talk a bit about chat ops now. So when I've done previous presentations, I've thrown up the definition of chat ops. And it's got a lot of people scratching their heads and maybe not really understanding the full impact of it. So today I'm going to come up to add it from a different direction. So let's ask the question, what is an operating system? And according to BBC Bite Size, which is part of the BBC for helping school children revise for their exams, an operating system or OS controls the general operation of a computer and provides an easy way for us to interact with computers and run applications. The reason I chose this definition is because it's one of the only ones that mentions us. And OS provides us an easy way to interact with our computers and do the stuff we want our computers to do, printing, editing, spreadsheets, whatever. On the desktop, the dominant operating system is Microsoft Windows. It's mediating the interactions between you, some software applications, and the hardware. Whereas on mobile, the dominant operating systems are iOS and Android. Microsoft did try to have a Windows version for mobile, but that didn't really work out. The types of things we do on our phones and tablets are different to the things we do on the desktop. So perhaps that's one reason why we ended up with a different operating system there. The underlying hardware is also different. So the operating system is doing different things. And the applications a lot of the time are different too. Now, here's a couple of other things that you could claim to be a bit like that definition of an operating system. Things like Skype or WhatsApp here. Mediate the interactions with a lot of people rather than applications. And something like Apache Kafka on the right there, which is an enterprise service bus, is mediating the interactions between lots of applications. It's allowing them all to talk to each other. So chat ops, essentially, is the chat platform as some kind of operating system. Lots of users, lots of applications all working together. So let's look at an example. And for this, I'm going to show you an issue from our GitHub projects, Symphony Jam Toolkit. So in this issue, Gab raises an issue suggesting changing to the name space. And he's CCing now on this with that app symbol there in his comments. And on the next line, you can see a verified badge, which says that Gab's commit was verified. And next to that, you can see a red X, which shows that the result of the commit, a builder's run and it's failed. And additionally, you can see that there's the Finos CLA bot has added the tag CLA present. And Mao mentions the issue somewhere else and I comment on it. And this is a workflow involving people and applications. Although in this context, we call them bots, but for historic reasons. And GitHub have arguably achieved a type of operating system here designed to allow people and applications to collaborate and build software. Whereas Windows was an operating system about, well, Windows and people and the mouse and on-screen buttons, GitHub is an operating system about chats and repos and bots and users and releases and software. And this slide says it all. Teams is the new operating system. Essentially for a customer, it's where they will do everything that they need to do. And this is Microsoft saying this, Microsoft gets this. They want to recreate the glory of Windows so much that they bought GitHub and they own that. And they're also throwing everything they have at Teams. So where we are so far, well, one, there's a new kind of operating system that hosts our applications. Two, COVID has forced us into a new way of working. And three, old agile practices don't work anymore. So if that's the case, we need to build our applications to suit this new working environment. I've been developing bots and apps on Symphony for a number of years, both at HSBC and Deutsche Bank. Since being at Deutsche Bank, we've put together the Symphony Java toolkit. And recently we've donated this to Finos to own a market going forward. It's an open source collection of libraries available on GitHub that you can use to build Symphony bots. But to frame this work, I want to take you through the evolution of our thinking with respect to building bots. And through that arrive at the reason why we built this toolkit. So to start with, my view of bots was like, oh, it's the command line all over again. I can type commands to my bot and have it respond, text in, text out. It's just like DOS or Linux. And although that's limiting, it's also really liberating because I don't have to worry about authenticating the user. I don't have to worry about testing in different browsers or worry about networks or firewalls or accessibility or keeping up to date with the latest fad JavaScript libraries on the front end. So that seemed nice, but at the same time, it's much more limited than building a web app, say. We've also seen a lot of times bots being used for things they shouldn't be. It seems like every website has a bot these days and they're really victims of a hype cycle. But there are use cases that work better on a chat platform. The first is anything to do with notifications. That works so much better than on a web application because generally people always have their chat platform open. And it's probably a better way to receive a notification via email. If the notification is something short. And a chat platform doesn't replace like a wiki or a content management system, but it's a great way to notify people of things and it's great for persistence. So all your messages are recorded for all time and they're searchable. And obviously a chat platforms are better, it's way better than a browser app for sharing things between groups of people because all of those abstractions are provided for you around identity and rooms and groups and messages and so on. So you've got some good reasons for building bots. And next I started to see that a chat platform was really a bit like a big append-only database like Datomics, if you know that one. You can do indexing through hashtagging mentions, hashtagging and mentioning people. And you can control access to different pieces of information via private chat rooms since different rooms have different members and privacy settings and administrators. Each message on symphony, and this is true on Teams and Slack too, have a JSON payload as well as some markup formatting the message. And that means that the chat is perfect for storing details of a workflow as we saw in those GitHub examples earlier. So rather than do a tour of the functionality of the symphony Java toolkit, I'm just gonna demonstrate something we built with it and show you how it works. A lot of the stuff I'm building at Deutsche Bank is behind our firewall. So I can't show you any of that, but a week ago the DB symphony practice participated in symphonies yearly London hackathon. Now, as you'd expect, this was done remotely. We were all sitting at home chatting about what we were going to build using symphony, obviously. And we were visiting video conferencing and screen sharing, but actually this was a plus. As I've said earlier, my team is based in India. So if we'd had a physical hackathon in London, it would have been a very different story. My team wouldn't really have been able to get involved at all. But this just underlines the point further about the changing nature of development work. So we had to choose something to build for the symphony hackathon and probably somewhat fortuitously, it ties together all of the things I've been talking about so far, at least I hope. So we've talked about symphonies being like an append-only database which handles access control and indexing. We talked about chat as being like a new kind of operating system, linking people and bots and allowing them to work together. And we've talked about the effects of COVID on agile and how a lot of the practices of agile don't work anymore. And the symphony hackathon gave us a great chance to test out how quickly you could build something with our symphony Java toolkit. So what did we build? Remember, we only had an eight hour working day to build something in. So we weren't really looking to change the world, but hopefully it will give you an idea of how the symphony Java toolkit works. So we built a symphony bot that allows you to play the scrum-planning poker game via a symphony chat. So remember back to how I described this earlier. People get together, they play cards face down and they try to indicate the complexity estimates for tasks and then everyone reveals their estimates and shows you the results. And now I'd like to do your live demo of that, but unfortunately at the time of recording, all my colleagues are very asleep. And so instead I'm gonna replay the demo we gave to the hackathon as a set of slides. And yeah, I mean, this also recheases the chance of a massive technical disaster too. So this is a bit of a cop-out, but hopefully you'll be able to see how it works and get an idea of what's going on anyway. And I'll be using screenshots of symphony to illustrate my points. And at the same time, I'll talk about the symphony Java toolkit and how it allows us to build these things at hackathon speeds, sorry. Just as a trigger warning going in, there's gonna be some screenshots of Java code. I'll be talking about them at a high level so there'll be no need to comprehend what that code is doing. So instead of getting our developers together in a meeting room, we're gonna get our developers together in a symphony room to play planning poker. And on this first screen, I've typed slash help. Often when you want to address a command to a bot, you put a slash in front of the word so people know it's for a bot. This is kind of a convention we have in symphony. And everyone in the room gets to see these same messages. So they see this help message. And symphony allows you to embed form elements into a chat. So you can have these buttons like these blue ones here and people can press them to tell the bot to do things. And we're gonna use those later. So first up in planning poker, someone proposes a story to vote on. And at the bottom, I'm typing in the details of the story. Now to identify the story, we're using a hashtag. So there it's hash moon tower. So people can refer to that story by using that hash moon tower hashtag. And as I said before, hashtags are kind of like an index and in symphony, I could also watch tags and get notifications each time they're used just like in Twitter. So the rest of that line is a description of the story for the other developers to think about. And then I hit enter and this happens. So the bots replied back with like a card here containing the story. It's got a name, a description and an empty story points field. Now remember back to our database metaphor. This is something like adding a new row to the story table in the database. And as I said before, although there's markup on the screen here to display the story, there's also a JSON representation of this story that symphony and our bot both understand. So on the left is the underlying JSON and that workflow 001 bit at the top there, that's the main bit, the rest you can kind of ignore. It's got the name and the description and then the empty story points field in it. And on the right, this is the Java representation of that story. And you can see it's got fields for the name as a hashtag and the description and the story points. And the symphony Java toolkit handles all the serialization and de-serialization for you through the magic of Jackson data binding. So we didn't have to think about any of that while we did the hackathon. We just wrote the thing on the right and then the thing on the left we offer free. And the symphony Java toolkit also handled the presentation of that story on symphony forest kind of a basic way. Although as we're going to see, it's customizable with some templates. So we haven't set the story points yet. Next, if I click on that poker button, which in this screenshot turned into a tick after I pressed it, then our symphony bot replies back, poke bot created for moon tower and then there's a button there to end the poll. And as you can see on the top left of the screen in that little red circle, I've been notified of a private message from the bots. And this is the private message here asking me how many points I want to give to this story. So this is the equivalent of the playing cards from that real poker planning game. And yeah, I know this looks a bit scrappy in a bit. The presentation's not great, but you know, this was a hackathon. We were just working quickly. So yeah, scrum uses the weird Fibonacci series numbers which I can't quite get behind, but you know, whatever. This is just a hackathon. We're not trying to reinvent the world here. So everyone in the original room, everyone who is a member of that original chat gets a message like this and then they all reply back with their votes. And so here you go. You can see all the votes coming back into the main room. And we did this live in the hackathon and we got all the judges to be in the room and vote on the story too. So you can see them all voting here. And you can't tell how many points they gave, but you know they voted. And so this was quite a nice interactive experience for everyone and made a really good demo for our hackathon entry. But behind the scenes, what's happening? In the room, we're basically writing these votes as messages into the room. So again, so I can append only database. We're appending each answer into the room. Here we see the Java bean code for the answer on the left and that JSON representation for it. Again, the workflow 001 thing is the main answer. We've got the user, the poll ID, the choice they made, when they made it and so on. Now what we didn't show you, no, so that we didn't show you how many points the user gave, we customized the message view with a free market template. And you can see that there at the bottom. It's referenced in the answer Java class using that annotation, online 12 on the left there. And the Symphony Java toolkit just takes care of all of this. Super, super easy to set up and it basically generates and dumps out these free market templates if you don't provide them. So what you can do is you can have a template free running of the code, look at the templates it generates and then go and customize them and then reference them in your project. So you don't really even need to code, know how to code Apache free market all that well. You can just sort of play around with what's there and work from that, which is nice and makes things really simple. At some points then, so everyone's voted, which we left as that button to click in the hackathon, but you can close it by clicking that end poll button. So the bot then looks back at all the answers in the chat room and tallies them up. It's just like doing a database query. And again, using the free market template and the JSON, we produce this table of results. And at this point, because all the results are different in Scrum, what you'd normally do now is you'd have a discussion about why they're different and vote again. And obviously all of that can just happen in a chat room with messages, or you could fire up a conference call in Symphony and hash it out between you. But the idea is really is that this sort of stuff can happen asynchronously and not in a meeting anymore. Once you get some kind of agreement, you can hit the assign button and set the results and by the time we got to this point, we were really running out of time. So we kind of fudged it. I think there should be like a button here to assign the most popular number of answers, which is eight as well, but we didn't get to that. So if I hit that button to assign, what happens now is we write a new message into the room with the details of the story updated and it's got now the number of story points attached to it. And I'm going to show you just one tiny bit of code to demonstrate how that function works. So what you can see here, this is our result class in Java. It's got all the details of the fields that you need to display that bar chart who's voted for what, like the counts and the names and the options and the question and the story hashtag in there. And it's got that template on there so we can format the bar charts. When you hit that highest button on the results, it actually is going to run this method called highest here and it gets past some parameters. So the symphony Java toolkit will hand you pretty much whatever parameters you ask for here. It's very open and extensible. So here we're passing it, the details of the room where it all happened and also this history API too. And on line 37, we find the relevant story that this was the result for. And on line 38, we figure out which was the highest option that got voted on. And on line 39, we changed that number of story points and on line 40, we're returning that new version of the story which symphony will then put back in the chat room. So as far as our bots concerned, we don't really need to know much about messages and chat rooms and stuff. We can let the toolkit handle about, toolkit worry about all of that and the JSON formats and all that stuff. It's all just taken care of. So the hackathon bot was just really for a bit of fun for us and we wanted to try out, use our toolkit in anger and see if we could build things quickly with it. We're gonna show some people internally this bot and see if they want us to carry on developing it. But personally, I'm not completely sure that scrums planning poker is gonna survive the transition to the post agile world. But hopefully I've used this to demonstrate some of the power of the symphony Java toolkit today. There's actually a lot more going on here that I haven't covered. So it does symphony apps, it handles clustering, it handles microservice configuration, 12 factor apps, that kind of thing. It does fixed messages, it can do reporting on Maven builds, it's got health endpoints and spring actuator metrics and it handles authentication token life cycles and all this sort of stuff. And we've got tutorials for all these things as well. We're really proud to have been able to contribute this to Phinos because we think this is something lots of developers can benefit from. And we're talking to a symphony themselves about this too. And they've agreed that they're going to donate their bot toolkit development to Phinos too. And sometime in 2021, we're gonna combine our efforts together and build something really great as a whole piece. So yeah, watch this space. There's a lot going on in the world of symphony bots. And we actually have a lots more pieces of this in the pipeline, which maybe I'll come back and talk about another time. So thank you very much for listening. If you've got any questions, put them in the chat and I'm gonna hand over and discuss those now. Cheers.