Helmes Summer Bootcamp 2017

Helmes Summer Bootcamp 2017

Tuesday, 22 August 2017

Day 16

Our last week of bootcamp. Feels sad. But the development cycle must continue. So the day started with a stand-up. After laying down our daily plans, we set to work on them.

Writing code became more of fixing the bugs and tying up loose ends. Getting into the nitty-gritty, making the UI understandable and appealing to the eye. All of this is highly time consuming and often does not produce the same level of satisfaction as adding a new functionality and figuring the problem out. This is more of a fine tune of the existing code and takes a lot of time and rewards the programmer only sparingly.

Did I break something?


With small tasks and improvements on our sprint board we chugged slowly closer to completing this sprint. By the end of the night we came to the realization, that we needed to get more stories. We scheduled a meeting with our PO, who so conveniently is always here for us. We took on a few new stories and gave assessments to a few more, that we didn't dare to add to the sprint, but if we had the time, we could get started on them. Not pure Scrum, but in the duration of the sprint it will be beneficial. Remember when I said we will play paintball on Tuesday?

Yeah! We played paintball today! We met up at Männiku where we were provided with the gear and the battle commenced. The first two games on the open the Java team dominated and won them in a convincing manner. But then the change happened, we moved to the area with terrain and it was clear, that the superior wits of the .net developers would triumph here!
Yeah..No. I don't know what Java team was compensating for on the battlefield, I guess we will see during the demo on Friday. They took the two next rounds even with strong opposition shown by the .net team. The last two rounds were split by the teams. And in the final round the Java team gained the upper hand once again. A dominant victory for Java team, but it was fun for all participants. Great experience, great people!

Day 15

As the day started with stand-up we had little to report on what we did yesterday as we had had a half day of programming since we had the sprint yesterday. So we focused more on what we were planning to do today.

The day after the sprint is always the most rewarding day as you can just crudely write code and see the features being implemented. These days have become my favorites and I had a nice time filling the criteria in my story. That is until I hit a roadblock. I needed to filter our contracts by date and had to send the date as a GET parameter. This didn't work since the default InvariantCulture was using a different format than our date fields. So I opted to write a slightly modified model binder that took the datetime object and parsed it the way I wanted. As I hadn't done this before it took me a lot of time.

Some days you just get stuck on a problem for hours and solving it takes way too long. Meanwhile my teammates were skillful enough to avoid all of this type of pitfalls and the progress made was significant. We were confident we would have to take on new tasks by Tuesday as we left for the weekend. 

How things are in the Java team ¯\_(ツ)_/¯

Friday, 18 August 2017

Day 14

Today started with sprint planning, we still had a nice backlog for our project so for us we just assigned story points to our backlog and added them to the sprint. The beginning was easy as we were adding new features that did not conflict with our completed stories. When we hit the famous attachment story about Power of Attorney documents, then our team decided to revisit the attachment module and make sure we would be able to support attachments over 100MB. This was taken on as a big story and it pretty much concluded our last sprint for us. 
Our last sprint :(

At 11 o'clock we had code review, where our code was deemed good, but we should make use of Linq more in our queries and iterations. This is somewhat easier than our Java team, where their code had to be more readable than this blog.
Java mentors when reviewing code
With our new tasks in hand we assigned them and everyone was busy working on their problems until the internet connection was gone from the whole house. As this happened half past 4 already most people decided to call it a day and head home. We on the other hand had our paintball activity event planned and it would be easier to leave as a group from our offices. So we waited out the internet issue, that only took about 25 minutes.

About 30 minutes before we were to leave for the event Oliver came into our room asking "Have you seen the weather?". We were caught by surprise as we had no windows in our room, "It's pouring rain outside!" Oliver explained. We still decided to give our group activity a shot, maybe it wouldn't rain there.

So yeah, it rained there. We rescheduled the team event for Tuesday and currently we are praying for good weather.

Wednesday, 16 August 2017

Day 13

Today is the demo day again. Wow time really flies when you got some problems to solve. Time had not flown as fast for my team as it had for our other team though. Beginning their last day they had completed half of their stories.

Due to us having only one story to do for our day and the testing being done for other components (Yay for taking on more stories at the end of the sprint), we tried out the fabled quad-programming, where one person codes, other person observes and two others are just distractions.

This was pretty much our day up until 1 hour before the demo when we experienced our first server downtime.
Our server got knocked out! We alarmed our bootcamp main organizer Oliver, who sped us to the Ops room, where they were aware of the problem and laughed at our timeframe of needing to do a demo in an hour. "Plenty of time." they said and asked "Do you want to install updates while it's down?". Joking aside the server was up soon enough.

Did our deployment still work? It did not. So we needed to redeploy. We went over the changes we had made since the last deployment and speed-tested it. Now or nothing we used the luck we had and deployed our newest publication.

The time for the demo was here and the Java team went first. Having complained for the whole day, that they had nothing to present to the client to due multiple blocking stories, they sure did have a lot completed. They had chewed through most of their harder tasks and those not implemented were just tiny features on the good foundation that they had. The demo was a screaming success.

Same goes for the .net team, but with less drama and simpler demo.

The Sprint retro was highly positive and everyone found more good points to put on the board. This concluded the sprint for us and we were free to go home.

Yay for an early day

Tuesday, 15 August 2017

Day 12

The morning stand-up revealed, that the sprint is looking good and all we have left is a bunch of testing and deploying.

We wanted to  get all of our tasks finished and deploy our changes to the test server before our PO demo at 1 o'clock. This challenge we managed, but we still couldn't fully demo it on the test server as it had some issues.

The demo went well and we got positive feedback from our PO. She highlighted some problematic decisions we had made in the design and gave us some feedback on what to work on next. Our PO also offered to test the authorization in the test environment, when it was operational. So getting our deployment running is what we focused on after the meeting with our PO. We only had 30 minutes to tackle this problem, because we had a meeting with the CEO of Helmes scheduled.

In the meeting we got to hear the day-to-day operations Helmes CEO has and how he helps the company run smoothly. Biggest revelation being that a manager has done his job well, if he is not needed by his subordinates. He spoke about attracting clients and described how the process can be a long one, especially for big multinational companies. Creating a link between your company and the other company is key in making future deals happen. Many big contracts with over 80 people working on them today have started with projects assigned to a team of 2. 

After the meeting we were back in the world of fixing our deployment. We had an issue with seeing all the contracts when logged in as an administrator. We couldn't figure out why the administrator didn't have all the rights he/she would need. As we couldn't just access the code running on the server we really needed to access the logs. Guess who didn't log their project? 


With a bit of messing around we got some logs to show up in the database, but still couldn't figure out why we were getting this error. But then I remembered, that we use AppConfig to store some variables. And the only file we didn't overwrite or even check when deploying? Yes, we really are that stupid.

Our mentors actually warned us about this and recommended to use a nice tool called TotalCommander, that allows you to compare contents of a folder and displays files that differ and enables you to view the differences in them. Being brash bootcampers we didn't heed these suggestions. May you be smarter than us.

We finished the evening by getting 2 more stories for our sprint and started on them.

Day 11

Over halfway through with our bootcamp. Time has really goes by fast when you're working on something new and complex. Mondays stand-up is always the hardest, because the 2 day break usually throws a wrench into the mix. Stand-up worked well as a refreshment on what we were working on and gave us an overview of the fact, that while we are closing in on finishing our stories, the testing has not yet been even started.

Even though this was the case we decided to finish the story as they were separate enough to not need any testing in between stories. I decided to unit test the logic of one of my more critical functions and as I didn't know much about testing this took a bit longer than expected. With some further complications presenting themselves during writing the tests it took me until lunch.


After lunch we had a seminar about UX&UI. The lecture part of the seminar went through the lifecycle of UX projects. It gave us recommendations how to create a better UX for the user without needing user input at every step.

The main emphasis was on seeing the problem and process through the eyes of the user not the eyes of the developer.
Some were excited about the lecture

Others had other ideas about it.

After the lecture we got to show our UI to our lecturer and get actual feedback. By sheer luck .net team went first and out of the feedback we got some good points, that we can include in our future stories. Unluckily for Java team the time ran out, so they had to rush their presentation. For this reason or maybe they just did a really good job, but the feedback was all positive and no changes were needed to be made.

And the rest of the day we wrestled with some inconsistencies with test data and real data. With some workarounds we got a testable and a working solution.

Monday, 14 August 2017

The 10th day.

Today is the 5th day of straight-up programming for us. Our stand-up was nice today as everyone had completed something yesterday. I was proud of my team. Luckily for me our PO caught a mistake in the problem I was trying to solve and guided me towards a better solution to the problem. Whilst this still wasn't the final solution to the problem it was a step in the right direction. I see this as a plus for agile development and stand-up.


So with that nudge in the right direction I was making fast progress on my issues. But the 5th day of programming was weighing on me and by lunchtime my head felt just as agile as a potatoe.


Having a nice lunch helped a bit and I could tackle some more problems. My team was feeling the struggle of becoming a vegetable as well. At some point one of our merges broke our attachment feature. By the time the clock hit 3 there were no more programmers in the room, but potato. Potato everywhere. The productivity dropped off a cliff. I'd say there wasn't a usable line of code written after 3. We actually went to our PO 3 times trying to figure our how to deal with linking our contracts to people working on them.


Luckily enough one of our team members had had a birthday a few days earlier so we had a small break wishing him the best and the Helmes staff had some handmade candy for him. Shortly after this we had a discussion what our next weeks team activity will be and we decided on paintball. Hyped for that!

And the day ended with us filling out the first part of the feedback about our experience here. Totally remembered what we did on the first day, honest.

Do you remember?

Friday, 11 August 2017

Day 9.

Another day, another stand-up? Not today, brother! Today is our second sprint planning. We are well armed with a plan to improve our codebase and do much more than the last sprint. With this positive mindset we started the morning rewriting our code so we could use repositories.

And then we got some more great news, our PO had written up a lot of new stories, that we could include in the sprint and didn't even have to give input on. This saved a lot of time and we could plan this weeks sprint in just over 2 hours. And we also kept our Sprint retro suggestions on hand so we would have more unrelated stories and gave our estimates with a bit of room to do refactoring.

With our stories selected we started writing some sub-stories to explain the story better and as we had unrelated tasks we could do this at the same time! Felt productive and great. Then we introduced the sub-stories to each-other and added some points we could have missed. With that done we could get coding.

As the first order of business half of our team finished up refactoring the existing code while others worked on their stories. This created a bit of a disconnect between trying to complete your bit of the problem as bit part of the system was going through some changes. So in order to not be like our Java team and avoid massive merge conflicts we discussed it so we wouldn't change the main part being refactored and it really worked out. Talk to your peers, people!

The day came to a rather early end, because today we had sauna and board games scheduled. It was funny seeing our teams of 5 looking blankly at the floor for the first 10 minutes, because the mind was intently fixed on the task that was abruptly cancelled by the announcement of arriving pizzas. Early communication was a bit rough, but after we got to playing some saboteur the chat started flowing more freely. Some classic jokes were made as the evening rolled into the night.