Helmes Summer Bootcamp 2017

Helmes Summer Bootcamp 2017

Friday, 18 August 2017

14th day.

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

13th day.

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

12th day

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.

11th day

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.

Thursday, 10 August 2017

Day 8. First demo

At the start beginning of our morning stand-up it seemed, that most of our stories were completed, but during the discussion it turned out we still had some features to add.


We started work on the features without too much panic, because the sprint demo was at 3 pm. With the tasks related to the sprint demo being in progress we tried adding some functionality from outside of the scope of this sprint. Our mistake in this was, that we also tried changing the part, that was in the sprint. This caused a big part of our system to have buggy implementation 2 hours before our first official demo.


This meant that it was time for our first hotfix, to restore the previous functionality in time for the demo. With this done we had an introduction to Jira for our next sprint.

The demonstration was up next and after a nervous start everyone got the gist of the story and our Product Owner had to decide if she accepts the story or not. I'm happy to say all of the stories presented were accepted.

With a successful sprint behind us it was time for our retro. As we stickied our ups and downs during the sprint we had some patterns emerging. On the positive side our teamwork is good. On the negative side.. Oh boy.. If Estonians are known to be critical of things, then in this sprint even our Georgian teammate ran out of red stickers. The conclusion for the bad part being : Task planning, Different views on programming, Code quality, Testing.

The last thing we did was discuss our codebase and decided to add The Repository Pattern to our existing codebase and refactor the existing codebase.

Tuesday, 8 August 2017

Day 7. Lucky number 7 they say..



Today our day started with the stand-up becoming easier and more informative at the same time. Our team is getting to know each-other and it feels great.


The bane of our existence has been implementing a file attachment feature. There is an existing one, but that just makes the decisions harder. Should we use the existing one? Should we use a hybrid? To even attempt to answer this, you have to understand the existing code. This is something that makes my head boil, as writing code is hard enough, but understanding why someone else has written their code in their own special way is just that extra nudge, that makes you want to take a breather for 15 minutes.

What can be worse is to struggle with a problem for the longest time and then find out you just mistyped the name by a character or forgot to pluralize a list and after an hour of searching you see it and a wave of relief washes over your followed by a tsunami of shame follows for making these dumb mistakes. Luckily the IDE catches many of them, but the mighty IDE  cannot always save you.

To cool off, we had a nice little team game planned to grow as a team and see how we interact with each-other, when there is a lot of room for interpretation. The task was to decide what should happen with 4 people marooned on an island if they had built a ship, that would be only able to sustain 3 people. The limited information given was that those 4 people were : A shipwright, a doctor, a genius and an extremely wealthy individual.

Our discussion went on for a full hour and in the end, we still didn't agree, with 4/5 people in our team deciding on casting out one person and our last team-member sticking with his choice. But that didn't matter, as I felt that we as a team became more open and everyone got to voice their concerns about the predicament.

I enjoyed the viewpoints my teammates and appreciated the reasoning behind them.
Today was a great day