Follow by Email

Search This Blog

Posts

I have started blogging since 2014. In fact, I just happened to know a very nice free blogging course of John Sonmez. Time flies!

I currently work at a startup to build an AI chatbot. It was where Python and Machine Learning become my most focus from now on. That also was a reason why I wanted to rename my blog theme. I still keep using Java in my projects though.

Thank you all for reading my blog so far. It motivates a lot to keep me carrying on this habit.

Using daily meetings for frequent course corrections. However, you should keep the meeting short because time is burn rate.
Though good collaboration doesn't guarantee a project's success, poor collaboration almost always guarantees a project's failureWhat benefits does the daily meeting bring to you?

- Keeps inexperienced developers and experienced ones on-track.
- Avoids reinventing the wheel.
- Limits tumbleweed developers' damage.
- Leverages the entire team’s experience to solve problems quickly.
- Improves team communication.
- Helps every people have a big-picture
point of view.
Who are tumbleweed developers?
We’ve all worked with a few tumbleweed developers. These developers lose direction and drift through their days. They wade through the random code and “improve” it, cleaning up method signatures, polishing algorithms, and reformatting brackets. Tumbleweed developers lack the discipline to finish any task you ask them to do and generally cause more harm th…

Customer Needs
My team already had a go-live app in a customer environment some months ago. We have been developing some new features for our next milestone. The situation is described in the picture below:

We used Git for our codebase management. The go-live app running on our customer environment was at version `v1`. The latest sprint release was at version `v7` for our developing app.

Our customers wanted to have two separated release packages for our current sprint release. We all know that it was easy to ship the package to the developing app. However, the issue was that how we just picked some features needed for the go-live app. We called this package was a hotfix.
Git Cherry-Picking
Fortunately, we found that Git provided a way to achieve this task. Actually, we had all commits on the branch `master` already. We created a new branch called `hotfix/v1.1` and we traced back which commits needed. We used cherry-picking for merging these commits to this branch.

The topic is about my experience on my first project with my freelance team. We implement the last step of this process which you can find in the end of this post.

You might have heard of something like the following:
Many customers don't know what they want.
Yes, that's a fact. In order to help customers solve their needs, we'd better consult them or we provide a consulting service. The next questions is "how?".

Our approach is enhancing the collaboration with customers or providing a design of customer interactions. Firstly, we create a website wireframe to express the idea of website's functionalities. For example:

Source: Wikipedia
And, the further step is that we make a running app based on the created wireframe where the real UI/UX is demonstrated. However, it is just a GUI/frontend with dummy data without interaction to a backend. Technically, that is just a html template which contains source code of HTML, CSS and Javascript. For example:Source: ThemeF…

Passion for System Design
After finishing a one year project, my longest stable team (lasted for 3 years) was separated into two smaller teams. Sadly, but that was a good chance for me to become a key member in my new team. My preferred skills were about system architectures; therefore most of the tasks of building the application structures were handled by me. In order to enhance my design system skills, I have spent much my time for reading books closely after work. These following books help me a lot.
- Object-Oriented Thought Process | Matt Weisfeld
- Head First Design Pattern | Elisabeth Freeman and Kathy Sierra
- Java 8 in Action: Lambdas, Streams, and Functional-style Programming | Alan Mycroft and Mario Fusco
Junior Technical Architect
I was requested to join a technical architect team (aka Team. Alpha) where I actually had gained experiences almost on interviewing candidates for my company (lol). Besides, I noticed myself must improve the skills of convincing people because …

https://www.scrum.org
Scrum is not only designed for software development
Scrum can be used for addressing any complex issues:
1. Research and identify viable markets, technologies, and product capabilities;
2. Develop products and enhancements;
3. Release products and enhancements, as frequently as many times per day;
4. Develop and sustain Cloud (online, secure, on-demand) and other operational environments for product use; and,
5. Sustain and renew products.Scrum Values is a key factor for building trust and respect among team members
The five values are:
1. Commitment
2. Courage
3. Focus
4. Openness
5. Respect
Daily Scrum's questions are more focused on inspection and adaption rather than the status
1. What did I do yesterday that helped the Development Team meet the Sprint Goal?
2. What will I do today to help the Development Team meet the Sprint Goal?
3. Do I see any impediment that prevents me or the Development Team from meeting the Sprint Goal?
Why Scrum still needs Scru…

Everyone talks about it, but not everyone knows what it is.
Why DevOps?
In general, whenever an organization adopts any new technology, methodology, or approach, that adoption has to be driven by a business need.

Any kind of system that need rapid delivery of innovation requires DevOps (development and operations). Why?DevOps requires mechanisms to get fast feedback from all the stakeholders in the software application that's being delivered.DevOps approaches to reduce waste and rework and to shift resources to higher-value activities.DevOps aims to deliver value (of organization or project) faster and more efficiently.
DevOps Capabilities
The capabilities that make up DevOps are a broad set that span the software delivery life cycle. The following picture is a reference architecture which provides a template of a proven solution by using a set of preferred methods and capabilities.

My Remarks
Okay, that sounds cool. What does it simply mean, again?
The following is a simple case…

How can you design the software which is built in tiny increments?How can you ensure that the software has a good structure which is flexible, maintainable and reusable?
ARE'NT YOU GOING TO MISS THE BIG PICTURE?

Not really! In an agile team, the big picture evolves along with the software.

How? With each iteration, the team improves the design of the system so that it is as good as it can be for the system as it is now. They focus on the current structure of the system, making it as good as it can be.
How do we know if the design of software is good?
Avoiding these following symptoms of poor design (design smells) should be a way.

In my point of view, if a team has a good collaboration, team members will achieve the following: To be more effectiveTo make work more enjoyableI have been working for a company for nearly four years as an software developer. Working on various projects from maintaining existing systems to developing a substantial product resulted in me moving to new teams three times. Actually, my most stable team lasted only around three years. Every time I've moved to a new team, I have a chance to work with new members and a new team culture again. Indeed, I realize that there is a process of developing the team collaboration which gets better time by time. I think it is an evolution!
Phase 1: Poorly collaborateFor example, that is when the team members have the following issues: Only work on his/her area of expertiseDon't communicate to othersBe not confident to take on new challagesDon't listen to other members. Subsequently, the team has some Failed Sprints and the knowledge gap betwe…

If you do Scrum at work, you might be very familiar to the estimation
in Planning 1. My PO has once complained to my team that why it took too long for estimating just a story. Wasting time results in the planning timebox is violated.

I give you some advice from my experience:
Estimation is estimation, not measure.
When you read some requirements, you see some risks but you actually don't know how complicated it will be. Don't try to influence the others by explaining how to do it in too detail. Just keep in mind that you know the business domain pertaining to customer needs and estimate how much effort you will spend for it. The effort should be compared to your baseline one that you use for a simple requirement.

The bottom line is we do "relative estimation", not absolute estimation. For example, you are asked to estimate the height of a building. Basically, you just need to answer "how many times higher is the build than your height"; you don't ha…

User Story is the place PO gives his ideas about features so that developers are able to know what requirements are. Acceptance tests are these show the most valuable things of the features represented by some specific cases. Usually PO defines them, but not always. Therefore, refining existing acceptance tests – even defining new ones that cover all features of the User Story must be a worth task.

If we understand what we are going to do, we can complete it by 50%
I have worked with some members those just start implementing the features one by one and from top to down of the User Story description. Be honest, I am the one used to be. What a risky approach! Because it might meet a case that is very easy to miss requirements or needs to re-work after finding any misunderstood things.

I have also worked with some members those accept spending a long time to clarify the User Story. Reading carefully of whole User Story by defining acceptance tests makes us more confident. Having an ove…

Have you ever got bored with the Retrospective meeting? I have, sometime. Most of the times, this meeting just goes traditionally by answering three questions: "What good things have we done? What bad things have we done? And, what actions should we improve?" Ever and ever again! My team found a way to make it a little bit more exciting. The idea is that each member - not only our Scrum Master - will become a host. If a meeting is hosted by a memeber, the next meeting will be hold by another one.

Yeah, I used "Sailboat" pattern in my turn. So, I just want to share with you guys how it was.
I started the meeting by telling a short story that I hoped everyone in my team could recall the meaning behind of Retrospective meetings: There is a group of people trying pick up trash in a park. At the first look, the park seem not to have a lot of trash because they are spread out all over the place. However, these people continuously found trash when they started. They kept …

This article is available at blog.scrum.org, here I just quote my favorite points and give my comment at the end of this post.

Ken Schwaber and Jeff Sutherland, the creators of Scrum delivered a webinar on their latest update to the Scrum Guide. The update was a simple one, adding the 5 values of Scrum to the Guide:

These values sound easy? Well, there are many misunderstandings and common problems when applying these values. Here are some example:

Value Misunderstanding Getting the value right Commitment Committing to something that you don’t understand because you are told to by your boss. Committing yourself to the team and Sprint Goal. Focus Focusing on keeping the customer happy Being focused on the sprint and its goal. Openness Telling everyone everything about all your work Highlighting when you have challenges and problems that are stopping you from success Respect Thinking you are helping the team by being a hero Helping people to learn the things that you are good at and not judging the t…

"Names are everywhere in software". "The hardest thing about choosing good names is that it requires good descriptive skills"[1]. In my previous post, I emphasized that we should take care our code, so now let's start with naming.

Have you ever thought that we won't need to code anymore because programs might be generated from specification? The answer can be yes or no; there is still arguing about it.

The programming language is more and more closed to the requirements. The starting is from a very low level as Assembly to a very high level like Python. However, it doesn't make much sense when saying that we will eliminate coding. For me, we currently still need to express our ideas in exact words that tells the machine what we want. Otherwise, I hope in the future the machine is intelligent enough to understand our requirements directly from our words. ;)

Take a look at the famous quote of Robert C.Martin about what I mentioned above:"Remember that code is really the language in which we ultimately express the requirements. We may create languages that are closer to the requirements. We may create tools that help us parse and assemble those requirements into formal structures. But we will never e…

I have not yet had a chance to attend this event but I just watched it on Youtube as usual. :)Google Assistant
You might be very familiar to Google Now if you're Android fan. I saw that Google Assistant is like an upgrade to Google Now. It looks smarter because we are able to make a conversation with Google rather than just saying "Ok Google" and getting the tasks done as Google Now. That means Google Assistant can understand our personal words in our contexts.

For example: I: Who is Google CEO? Google: Sundar Pichai I: Show me his awards => Here I don't need to say "Show me Sundar Pichai awards", because I don't know to pronounce his name correctly. :)
I am thinking about that we can compare Google Assistant to Siri of Apple. Google Home
At Google I/O 2015 last year, Sundar mentioned about working on a exciting project with Internet of Things and I think Google Home is a result. Working with Google Assistant, Google home is a very smart and modern devi…