After coding live at Lean+Agile DC 2018, Ben Scott of Ippon Technologies joins Bob Payne to talk code craftsmanship and getting proper feedback from the business side.  Ben explains a way to quickly build a quality demo from scratch – creating the first demonstrable piece of value.  Bob and Scott walk through their opinions on (shudder) best practices, living in ambiguity in agile methods, and bridging the gap between IT and business.

Bob Payne: [00:00:03] Hi I’m your host Bob Payne. I’m here at Lean+Agile D.C.. I’m here with Ben Scott and we’re listening to “Stand in the Place Where You are” by RBM played on the music fiddle version which is really disconcerting for me. It’s like Fugazi. You know elevator music which is definitely elevator music. But country elevator music. So Ben we were talking earlier about lots and lots of things but you were talking about sort of your experience here trying to do live coding and talk. What was your what was the gist of your talk? What were you talking about with.

Ben Scott: [00:00:56] So, let’s start with the problem statement: Whenever you start a project from scratch mainly it’s really hard to get good business demos and keep the business interactive with getting proper feedback. You’ll see a lot of demos with terminals. Hey let’s see what my code can do and you have to look at log statements or use post postman to demonstrate APIs. And then the business kind of glazes over it. And I think a lot of issues stem from developers trying to recreate everything internally. Someone has to provide a demo that even started a presentation with zero code I could provide a business level demo with a front end application backend with database usage deployed to the cloud. All within the same presentation within 45 minutes. So that was kind of the gist, some people really liked the felt it really demonstrated well what could be done now. They’re probably unsure how to adopt down to their own organization but it’s mostly a show that it is able to do that and you don’t have to buy it. It’s FREE.

Ben Scott: [00:02:14] It’s opensource a tool that I use is called J Hipster and I think overall great.

Bob Payne: [00:02:23] Yeah I mean for those of us who’ve been familiar with play or Rails or any of the generative frameworks you know that it was not should not have been surprising but I realized how how painful it is for most organizations to get to that first demonstrable piece of value.

Ben Scott: [00:02:50] Yes.

Bob Payne: [00:02:51] It is a little a little insane.

Ben Scott: [00:02:53] It is. The key differences are with J hipster is it really tries to adopt the enterprise level technology.

Bob Payne: [00:03:00] You see the full stack you’ve got full size containerized deployments.

Ben Scott: [00:03:05] You can you don’t have to but it sure does generate Docker containers. I use the docker file to let you generate a Docker container from your code. It will generate your CD pipeline script. It supports multiple privacy circles C.I. Jenkins obviously and a few other really really kind of handhold you through the whole process of getting a code from scratch all the way to diploid and ready. It can’t do anything about your business level code that’s on you right. But all the bootstrapping and plumbing it generates according to best practices of the time with us.

Bob Payne: [00:03:45] I winced on the inside. I don’t like the phrase best practices but best that I’m okay with.

Ben Scott: [00:03:54] Yes well it’s always a big debate. What is best practice. Like for depending on where you are which technology you’re using and your opinion because it’s a hotly debated topic Your Domain Driven Design or you don’t. Some people really love it some people hate it. Yeah that type of thing.

Bob Payne: [00:04:12] Yeah I try to stay away because people always ask us for as consultants are always asking for the answer and there really only is know fee here given your situation. Here are a few options that we’ve seen people be successful. Yes you know and you know I always sort of try to steer people away from that. Like calling people resources. There’s a few you like hot button words that I can’t make can move resources around us our projects exactly rituals and scroll to find that I hate things that that pull it out of the somewhat grey world that we actually live in.

Ben Scott: [00:05:05] Yes I actually like to prefer I prefer to live in this ambiguity. I don’t like to define what scrum is definitely. I don’t like too dear to a Agile philosophy per se or implementation whenever somebody dresses. Hey what is ads out to you. To me it’s you delivered a piece of software that was correct at the right time and how you got there might differ based on the people working in your company. Yes we might use Scrum or not. It depends if it’s a good fit with that place and sometimes it’s now or sometimes they just decide as long as we do what scrum says we are agile and we just get away from what they really mean.

Bob Payne: [00:05:50] Yeah. Defer to authority. There is a good strategy.

Ben Scott: [00:05:55] So I don’t like to prescribe things.

Bob Payne:[00:05:57] Yeah.

Ben Scott: [00:05:58] When we hire Scrum Masters always ask me what’s your process. What tool to use. You know you use Jira. I don’t prescribe – you use what you like to use right.

Ben Scott: [00:06:07] Well your client will let you use yes whatever you is best for your situation which will change.

Bob Payne: [00:06:15] So how do you so I know you’ve been doing a lot of technical coaching coaching. What do you what do you find most rewarding. Because sometimes it’s it’s you know it’s it’s a tough slog sometimes and there are always those little nuggets that just say yeah you know that will keep me going for a few months banging my head against this team or this wall or whatever.

Ben Scott: [00:06:43] So I really enjoy bringing upskilling developers on where they lack and I’m not a awesome developer. I’m a very niche developer who understand the agile practices so I can do their job testing frameworks Cucumber, or perform sensing as a Gatling I know how to do them and the basic forms right and the tools to know how to use them. Eventually it clicks at first like I don’t want it. It is what QA is for but eventually it clicks and it’s really fun to see a click. Likewise I work a lot with the business side on bridging the gap between developers and the business we actually start working together instead of the whole campus. This is the business that we need to take to go on like what we need is. Of course we do to this refactoring. We need to adopt this technology or just trying to bring them together so they actually work as a team and we’ll stack clicks which is much harder than it was going developers.

Bob Payne: [00:07:40] Yeah.

Ben Scott: [00:07:41] That’s that’s really fun.

Bob Payne: [00:07:42] Yeah that is. Yeah. We like speed we have that sort of mission of making people’s lives more valued fulfilling and productive. It’s kind of our or our mission if we can do that on an individual basis or you know we health and organization so that it helps the folks. But it all fundamentally comes down to you know people people in interactions and you know hopefully making a you know a decent world for them to sort of grind away at the code code is an unforgiving.

Ben Scott: [00:08:21] Yes we’ll spend days looking for that tiny little mistake.

Bob Payne: [00:08:27] Yeah yeah. So what’s the other big dogmatic thing you’re railing against. I don’t know that you’re actually railing against any big dogmatic things but you seem like the sort of person that might.

Ben Scott: [00:08:41] There are some things I’m very strict on and it’s is code craftsmanship to the detriment of sometimes I’m actually delivering value and I understand that. But there are times to be fast and dirty. You have a production bug.

Bob Payne: [00:08:55] Yep.

Ben Scott: [00:08:56] There’s a feature that needs to go to the market right away. OK we can do that fast and dirty. But if that’s every time there’s a problem.

Bob Payne: [00:09:06] Right.

Ben Scott: [00:09:06] And at that point I don’t have any issues slowing everything down and I guess focus on craftsmanship. Let’s focus on actually teaching what solid principles mean because over time you’re going into being faster more maintainable code. The sustainable pace and that takes time to learn. It might take six months a year to really get there. It’s a huge investment and it’s the responsibility of the entire organization to to foster that. So just like we have the Center for agile excellence or you go to an agile coach organization talk about processes.

Ben Scott: [00:09:39] You should have a software craftsmanship as well a new way to mentor the developers. And that practice that’s probably where I’m the most strict on.

Bob Payne: [00:09:51] OK yeah no that’s … Yeah. That’s a good place to be strict I think. I often think of the three things that can make a great team. It’s discipline, continuous improvement, and play the long game you know not the short term gain necessarily but product delivery is is not project right now.

Ben Scott: [00:10:16] And I completely understand there’s times we have to go really fast for whatever reason it is. Maybe there’s a bug that’s costing thousands of dollars. When it’s in production.

Bob Payne: [00:10:23] Yeah.

Ben Scott: [00:10:24] And yes. Quick and dirty fix but then think about it and fix it again the right way.

Bob Payne: [00:10:30] Yeah. Well everybody. It’s interesting because that the current understanding where the current sort of popular understanding of technical debt is that it is a bad thing and you know when they first started talking about it Ward Cunningham and and you know some of the folks on the first XP team actually used it in more the financial term debt. Sometimes you do take down. You know you go fast to be quick and you might incur some debt. You got to pay it down. Always cost a little bit more to pay it down. But sometimes that’s the right decision. But when you’re paying off the credit card with another credit card you’re in drips.

Ben Scott: [00:11:20] That compounds quickly.

Bob Payne: [00:11:21] Then You need to re platform the whole thing.

Ben Scott: [00:11:26] And then it just never ends.

Bob Payne: [00:11:27] Yeah.

Bob Payne: [00:11:28] And that’s what the craftsmanship comes in play because if you instill those values when you build a new software and maybe you’ll be a little bit better and last longer.

Bob Payne: [00:11:36] Yeah. So is IPPON primarily you know do you or most of the folks steeped in XP stream programming and.

Ben Scott: [00:11:47] So I would say most of us are what I would consider like Premier consultants as far as developers. Most of us are developers. So in that sense we’re a bit different from most agile consulting companies. We focus a lot on the engineering aspect of agile versus the process and most of our developers don’t always subscribe to Agile values. They like to get their stuff done and they’re like good code and beautiful aspects that don’t always adhere to delivering to agile way which is fine. But you couple that wish people would truly understand agile and you’ve just multiplied yet the actual value of it. It’s like the cross-functional needed agile deep expertise to guide the ship but you still need a technical deep expertise on what good coding practices look like. Yeah and we also like to embed with our clients. We don’t always like to take the whole project and then deliver at the end. We like to develop right and while we could develop we’ll pair with them or we’ll teach developed practices how to test and how to automate the whole thing and the whole the whole package. I think that’s where our values will be different than other places.

Bob Payne: [00:13:07] Yes. And we’ve you know at LitheSpeed we’ve been happy to be able to partner with the guys periodically because we focus primarily on the people in the process and you guys can focus on the technical chops.

Ben Scott: [00:13:25] Yes.

Bob Payne: [00:13:25] Yeah. I’m primarily a PowerPoint engineer and there is no PPT unit.

Ben Scott: [00:13:34] No I’m really bad at PowerPoint.

Bob Payne: [00:13:39] I wouldn’t say I’m good. But the reason I’m not very good is because there’s no there’s no unit test framework to how to get good. I was talking to somebody earlier because I I was when I was developing you know I got immediately test infected like TTD like real TDD not the ATDD or BDD. Not that those things are bad but that thinking and design process of TDD was an amazing force multiplier for me as not a terribly great developer. It allowed me to focus know where I was know that I hadn’t broken something else because I couldn’t keep every esoteric detail from the entire system.

Ben Scott: [00:14:38] Yes.

Bob Payne: [00:14:39] In my head some people love that they loved the challenge of I’ve got every single detail in my head. But that doesn’t scale. It does and test.

Ben Scott: [00:14:52] It’s a good thing you brought TDD like I have my own opinions about it. And you’re right. Some people love us some people hate it. And to me there’s a lot of focus from the process scores to do TDD when developers aren’t ready for it.

Bob Payne: [00:15:06] Yeah yeah yeah.

Ben Scott: [00:15:07] Just like everything will be fine if you just do TDD.

Bob Payne: [00:15:11] Yeah I don’t believe that to be true. Everything will be fine if you have engineers that are that are that really you know there I sort of look at the code and you can see the thought process of the developer in the code and that is much easier for me to read to read tested code than it is to to create an elegant you know you start throwing in some Lambda’s there and we’re we’re we’re parked. I mean because I struck part of my psychosis if you will. And I think it’s reasonable to call it that around TDD as I started in Lisp and I don’t know if you’ve ever tried to debug lisp or scala. It’s probably easier now and in scala but there’s just the interpreter. Back when I was doing this so you had a command line and you read in a file and something pops out and it is the most amazing black box in the world because it’s just it’s interpreted. It’s a functional language and 42 is the answer, right? I forgot the question we asked in end. So unless you knew that those little pieces worked. Yes pull that out throw it into an interpreter and see if it give it some some values in and see if it makes sense because all it takes is a misplaced pen. It could be anywhere and it will usually evolve out to something that still works.

Ben Scott: [00:17:04] And I guess where I differ what it is like or I’m strict on tests in the same commit as the code.

Bob Payne: [00:17:11] Yeah.

Ben Scott: [00:17:12] I don’t prescribe to. You must write a test first.

Bob Payne: [00:17:15] Sure.

Ben Scott: [00:17:16] But it must be in the same commit. Yeah that’s that’s kind of where I differ. And some people are really good at writing tests first. Some are not.

Bob Payne: [00:17:24] Yeah.

Ben Scott: [00:17:24] But everybody should be able to write before or after, there’s not. Never does ..That’s Not allowed.

Bob Payne: [00:17:31] Yeah I think it’s a reasonable place to be strict. I think for me just I.

Bob Payne: [00:17:39] I loved Arlo Belshee. I think it was our Arlo Belshee that coined the term test infected because some people either are or are not. And it’s like you know that zombie strain virus. And I don’t know which side is the zombie in which is the not here but I think the TTD folks are probably the zombies. But if you were when you find yourself on one side of that divide I think that the folks that actually like TTD and I know it is not universal. It’s it’s one of the more powerful and least used agile engineering practices.

Ben Scott: [00:18:15] Yes.

Bob Payne: [00:18:16] I mean Pairing, people say they pair, but nobody pairs. I mean not like.

Ben Scott: [00:18:21] Well not like extreme program where you must pair. Right. We like to pair for occasions like right. Here’s a difficult piece of code. Let’s work on it together or for mentoring. We’ll pair for code reviews the type of thing we’ll do some pairing for writing prose not so much right. How hard is it to write Pojos. You know it’s so many people go down this rabbit hole to we test the setters and getters like I don’t care. Like ok. Probably not. I’m OK. But really how long would it take you to actually do it if you said if everybody said we need to.

Ben Scott: [00:19:09] So. So interesting thing. So the debate by just writing a piece of code using reflection finds a perjures sets the value gets the value a certain done. So all my pages are tested automatically.

Bob Payne: [00:19:25] Yeah. and now with generative frameworks it is it is relatively easy. I was cured of that debate because I’m not a great programmer. When I misformatted the way I created a Java date. And so when I made and I always know how to make your assertion not against the same constructor that you used. So I use distracted at this other date class add some other stuff in and misuse the constructor and when I assert it against the string format it value, i’m like “Well that’s not right.” And I don’t know that I would have found that regular regular test or I would have I would have found like f’d up dates in the database or in the persistence layer or in the front end and I’m like I might not know. Then I’ve got a whole different problem but because I knew it I found out early that it didn’t work like the debugging. For me it was just so much so much easier.

Ben Scott: [00:20:36] And eventually you have to use common sense. You look at your POJO like well maybe I don’t need to test every single one of them. But if you’re serializing a date you should test that because for whatever reason it’s so strict that the date format it will kill you application is different for might just use a whole AI behind it to be able to extract data and decide what date it is.

Bob Payne: [00:21:00] You guys likes you know you guys like screw up the order of the month and the day like what is this?

Ben Scott: [00:21:05] It has Slashes no slashes.

Bob Payne: [00:21:07] Dashes no dashes, dots..

Ben Scott: [00:21:10] Or you add milliseconds and you expect no milliseconds and it still won’t truncate it’ll just die right there.

Bob Payne: [00:21:17] Yeah.

Ben Scott: [00:21:17] So testing that. That’s a good test. Typically also have a serialization test if it’s data layer i’ll serialize or deserialize back to the object, validate, but I might not validate.

Bob Payne: [00:21:30] You know that was that it was more important when he had to write her own serializer.

Ben Scott: [00:21:37] Well I don’t write my own serializer but I do write my own test for the annotations like for date format for example did you do the right format right. Does the precision matter or those type of things you have and I’m working on a project right now that for whatever reason the order matters. The order should not matter but whoever was sending it to they got that code where the order of your serialization matters and they can’t just construct the object they actually validate it in its raw format first.

Bob Payne: [00:22:05] Okay.

Ben Scott: [00:22:06] So then we have to validate that we send in the right Json format but in the right order each field. It shouldn’t matter. At least in my opinion it should not matter.

Bob Payne: [00:22:15] No. But yeah well unless you want strong coupling in implementations which I’m shocked at how many are organizations really like strong coupling.

Ben Scott: [00:22:33] I’m not sure they like it or just live with it.

Bob Payne: [00:22:36] Yeah it’s Like oh my god. It’s like it’s like the old Korbo or SOAP. Oh man.

Ben Scott: [00:22:42] This is how we’ve always done it so we will continue.

Bob Payne: [00:22:44] Yeah. Yep. So what else would do you. What’s interesting to you in what hobbies do you have besides like?

Ben Scott: [00:22:56] Kids.. Does that count as Hobbies?

Bob Payne: [00:22:58] Yeah.

Ben Scott: [00:22:59] It takes a lot of my time – it’s fun time, it’s really interesting and enjoyable to watch and grow. But I did find my most of my hobbies dropped away little by little.

Bob Payne: [00:23:10] Yeah.

Ben Scott: [00:23:13] When I did become a parent.

Bob Payne: [00:23:16] I picked up new hobbies like I had never watched soccer before because I didn’t like sports because those were the people that beat up the geeks. And now I’m doing like Magic the Gathering which I avoided in college like the plague.

Ben Scott: [00:23:43] I never got into that.

Bob Payne: [00:23:43] Because I was more of a punk than a D&D. There’s a reasonable Venn diagram there. But but. Now I’m going to Friday Night Magic with my son.

Ben Scott: [00:23:55] So that’s a very fun but very expensive game.

Bob Payne: [00:23:59] It is. Like you know a lot of people like do sports gambling. I think that’s even worse. You know.

Ben Scott: [00:24:06] Yes.

Bob Payne: [00:24:07] Liaisons in a Russian hotel. Let it get very expensive very quickly depending on what you’re doing.

Ben Scott: [00:24:17] And I also do gaming video games typically do single player story type games.

Bob Payne: [00:24:23] Oh really? given your military background. You’ve had enough First Person Shooter..

Ben Scott: [00:24:31] We’ll it’s more that to play online takes dedicated time whereas a single player. I can stop anytime. Pause and walk away.

Bob Payne: [00:24:39] Yeah.

Ben Scott: [00:24:40] I find that sometimes as a parent it’s really hard to get an hour dedicated time.

Bob Payne: [00:24:43] Oh yeah yeah.

Ben Scott: [00:24:44] straight to play, it’s like no I cannot help you to do anything because I’m in my game. If I’m doing single player I can quickly pause and do something else. That’s how I mostly got into it.

Ben Scott: [00:24:54] Before kids I was mostly into Dota.

Bob Payne: [00:24:59] sorry?

Ben Scott: [00:24:59] Dota Which is a different type of game.

Bob Payne: [00:25:02] OK.

Ben Scott: [00:25:03] League of Legends. Very similar as the birth of League of Legends. Was one of the first of those types of games.

Bob Payne: [00:25:11] Okay. But that’s when I decided it would be hard for me to play because it requires 1 hour blocks.

Bob Payne: [00:25:19] Oh yeah. Yeah.

Ben Scott: [00:25:22] Couldn’t dedicate that anymore.

Bob Payne: [00:25:23] I know, yeah. So there’s there’s probably a game waiting for me this evening when I go home. So let’s see. But.

Ben Scott: [00:25:35] Let’s see what else now spend time with family. Every Wednesday we have.

Bob Payne: [00:25:42] Long walks on the beach and.

Ben Scott: [00:25:43] Ah.. Not that, Just cook and eat and and drink and be merry. Revolves around food, and every Wednesday we have big family dinner.

Bob Payne: [00:25:55] Wednesday?

Ben Scott:[00:25:55] Yeah Wednesday just because weekends are crazy. We also do on weekends. But we found that doing it in the middle of the week it kind of cuts the week and half.

Bob Payne: [00:26:04] Yeah. You talk about work a little bit the stress and excuse to escape the daily grind of get up go to work. Come back do homework or other things. It’s another event middle of the week that’s a bit unusual but yeah it works for us.

Bob Payne: [00:26:22] Yeah Wednesdays are not that exciting, it’s dessert day. So.

Ben Scott: [00:26:26] I like family Wednesdays. It’s fun.

Bob Payne: [00:26:29] Ok cool. We’ll have to we’ll have to do dessert/Dota/.

Ben Scott: [00:26:37] Well I haven’t played that game in so long i’d probably be terrible at it now.

Bob Payne: [00:26:41] It’s ok. You’re better than I am

Ben Scott: [00:26:44] Probably.

Bob Payne: [00:26:48] Thanks a lot, Ben Really appreciate it.

 

Questions?