17 October 2016

Coolpointer.007

What is Coolpointer ? Check this : http://dominiksymonowicz.blogspot.co.uk/2015/12/coolpointerintroduction.html

Retrospective is my favourite part of the Scrum and most important one.
Why ? 
In biggest shortcut, retrospective is a event to do  health check of your team and process. It allows you praise people for hard work and  solve  problems about things  that didn't go perfectly well. Anyway , I am sure you know these things already (if not , check  Scrum Guides ) .

This article helps you investigate reasons why people do not enjoy retrospective anymore and how to make changes to make retrospective valuable and enjoyable again.


Nothing to talk about on Retrospective, huh?

10 October 2016

Coolpointer.006

What is Coolpointer ? Check this : http://dominiksymonowicz.blogspot.co.uk/2015/12/coolpointerintroduction.html

Interesting article about  naughty tricks that thisv
Newspaper overslept digital age revolution and they kick badly at the moment.

Dark Patterns by the Boston Globe

3 October 2016

Coolpointer.005

What is Coolpointer ? Check this : http://dominiksymonowicz.blogspot.co.uk/2015/12/coolpointerintroduction.html

Nice list of Front End Frameworks with informations about:

  • what browser they support
  • are they support sass/less
  • are they design for phone/tablet/desktop
  • license 



Front End Frameworks List

26 September 2016

Agile/Scrum notes


WARNING!
This is personal notes for personal and my friends only:
http://dominiksymonowicz.blogspot.co.uk/2014/01/itnotes-information.html
You can read them,but I suggest look to link,resources only

AGILE/SCRUM NOTES

Agile is a Adaptive software development. Think "Agile " as synonym for flexibility

SCRUM:
"Scrum is a framework for developing and sustaining complex products. (...)  Scrum
employs an iterative, incremental approach to optimize predictability and control risk." (The Scrum Guide"™ -  https://www.scrum.org/Scrum-Guide)


BUSINESS VALUE DESCRIPTION:
  • It is hard to write  bways to better measure and communicate the value of your code and related work.
1. Think in percentages


DEFINITION OF DONE

One of the most painful thing to define. I think dod should answer these question

  • Is it ready to be released?
  • Definition of done, is about the quality of the code.
  •  Has all of the documentation that the organization requires been updated?
  • Does the code have a reasonable level of unit tests?
  • the code covered by system level tests?
  • Has the code been reviewed by one other programmer?
  • For business people: “If we ship this today, can we make,save money ( by reduce waste)?”


DEVELOPMENT TEAM (part of the Scrum Team)
  • Group of people who do the work of delivering releasable Increment of “Done” product by the end of each Sprint.
  • They are self-organizing.
  • Size of team starts from 3 up to 9 (on average 'best practice opinions)..



ESTIMATES:


There are many way to do estimates but I learnt one thing.
Estimates are forecast not commitment!
If business treat them as commitment then there wil

Time based vs point based.

Although ,I liked time-based  estimate tor a bit of time , because they give nice imagination and projection of what's will happen but this create a minefield ..one mistake and KABOOM
However, I discover time-based estimation suffer
It is a very danger tool for company where

It tools
Estimation of bug fixing is a mistake. I never seen this work.In fact , I prefer kanban aproach to bug fix
Problem is how

Truth is that great agile people, if you use this tool

Points are more accurate but less precised
One thing which is missing for me is defition of units we using..
For example when you using points  system like 1 2 3 5 8 ...
What's defition of 1 and How many points are more less description of 1 day of work

To remember:

  • Estimates are forecast not commitment!
  • Don't estimate bugs .From what I see it causes more problems and disorganize sprint.




There should be one gold rule ,that estimate and achieve goals "on time" as part of
  • Sprint Planning:
    • Define the sprint goal
      • For example "Add Bluetooth Test"
    • Decide how much to chew off
    • Decide which stories to do this sprint
    • Create tasks for stories
    • Check how much availability do you have during spring
      • It can be Bank Holiday
      • Holidays
      • Company Events
    • All information required for story must bed completed and  groomed 
    • Decide which stories to do in this sprint
      • [TIP] It sometimes makes sense to prioritise a risky story higher to just learn, 
      • [TIP] leave some space for unexpected events (bug fixes ,thing can take longer due complexity
    • Sprint forecast sounds better than spring commitment

PAIR PROGRAMMING:

Link to article: Pair Programming is Best in Discovery Mode

Today, I found an article about Pair programming.
I can only add ,that I agree with opinion that

Tips:


  • Product manager tend to jump to the first acceptable solution without trying to consider other, (radically) different and perhaps better alternatives. 
    PRODUCT OWNER:

    • PO is like an entrepreneur , an innovator , system thinker and mini CEO .  
    • PO is not a Business Analyst!
    • It is responsible for maximizing the value of the product and the work of the Development Team. 
    •  Manage Product Backlog items (CRUD operation and prioritize list
    • It must be a one person. (entire organization must respect product owner decisions)
    • No one except Product Owner is allowed to tell the Development Tram what to do and when.

    SCRUM MASTER


    • Person is like process owner who is responsible for ensuring Scrum is implemented correctly and works smoothly.
    • Update the team's definition of done (or write one if they don't have one)
    • Instead of maintaining an impediment list, remove each impediment the day you hear about it


    STORIES:
    • Should be described using  this formula
      • Given ( context ), 
      • When ( action ) ,
      • Then (expected result) 
    Scrum Team

    • Product Owner
    • the Development Team
    • Scrum Master



    TIPS AND TRICKS
    1. Don't planning for more than 3 months.Don't bother.  from my experience, planning for longer
    2. Product must share a common definition of “Done”.
    3. Fix crap code immediately because bad code accumulates . If fix is more than "one liner" or  not sure about  it, consult your  technical/practical leads
    4. Email is great for communication, but not collaboration. All collaboration should be done by accessible by team tools like Jira, Wiki
    5. Meetings must be meaningful. “Is this meeting important to getting your job done?”
    6. Don’t Estimate Software Defects
    7. Pair programming  (link: http://itsadeliverything.com/pair-programming-is-best-in-discovery-mode
    8. A major factor in your choice of Agile framework/methodology depends on the ‘Reaction Time’ your team needs in order to change their currently agreed scope of work.
    9. For Scrum, the agreed scope is the Sprint Backlog (1, 2, 3 or 4 weeks long)
    10. For Kanban, the agreed scope is staying within your WIP limit threshold(s)
    11. Scrum is more about spirit rather than practices. I



    INTERESTING READS:


    QUOTES:
    • "A late change in requirements is a competitive advantage" 
      • by Mary Poppendieck

    • "As humans, we have a hard time acknowledging we don’t have control over everything. Hitting the estimates serves as compensation for not knowing everything. Drilling through the known unknowns, compensates for the unknown ones. "
      • http://www.javacodegeeks.com/2015/08/estimates-jumping-to-wrong-conclusions.html

    Resources:
    1. https://www.linkedin.com/pulse/how-run-sprint-planning-meeting-way-i-like-sandy-mamoli
    2. https://www.mitchlacey.com/intro-to-agile/scrum/definition-of-done
    3. http://www.mountaingoatsoftware.com/blog/clarifying-the-relationship-between-definition-of-done-and-conditions-of-sa
    4. https://www.scrumalliance.org/community/articles/2008/september/what-is-definition-of-done-(dod)
    5. http://blogs.atlassian.com/2013/10/8-steps-to-a-definition-of-done-in-jira/
    6. http://less.works/events/meet-up-less-of-a-story-an-introduction-to-large-scale-scrum-less-56
    7. http://less.works/less/rules/index.html
    8. http://scrummethodology.com/scrum-backlog-grooming/.
    9. https://www.scrumalliance.org/community/articles/2014/july/dos-and-don-ts-of-agile-retrospectives
    10. http://www.okapya.com/jira-agile-definition-of-done-acceptance-criteria
    11. http://java.dzone.com/articles/continuous-improvement-scrum
    12. http://www.romanpichler.com/blog/product-owner-sprint-retrospective/
    13. http://guide.agilealliance.org/guide/gwt.html

    19 September 2016

    Funq.66

    "Doing things you enjoy, can often lead to not sucking at them.Life is long, sucking is temporary."

    12 September 2016

    How looks process of finding job as software developer part 3 : HOW TO WRITE A GOOD CV?

    WARNINGS:
    This is a NOT a professional advice.
    It based on my personal experience only and resources that I read on internet.
    It will contains many  grammar mistakes.
    Please drink double espresso and energy drink as article is long and boring.


    HOW TO WRITE A GOOD CV?



    Good template for CV varies depends on country and type of job.

    I suggest do quick research about it.
    If you live in UK .Follow UK or EU CV's style.

    What to remember:
    •  In opening statement, you need sale yourself as  somebody said : "The most effective way we can increase our value is to market ourselves"(I forgot who wrote that :(  ). Write who you are  and what you looks for.
    •  Do not use 'CV dialect' given by recruiters and agencies! You should allow recruiters to  check your CV and allow them to do changes ,but ask them to see this CV, before they send to company.(Remove CV dialect and skills that you don't have!).
    • GRAMMAR - second most important! Any grammar mistakes will reduce your chance significantly . Dom't believe it ? Imagine this notes will be much readable if I will use a proper grammar.
    • LAYOUT -  Formatting is important as person, who check your CV in company has 2 minutes and if they cannot find what they looking for due your mistakes in layout decrease your chance.
    • Link skills with achievements and experience.
    • Use bullet points for skills.
    • Ensure that you include the right and relevant keywords in CV. Most recruiters scan for keyword like Java ,Java 8 ,Spring Framework and so on. If you do this wrong ,you will be spam with jobs that you are not interesting at all. 
    • Add hobbies and bit of personality to your CV. Most recruiters told me that I shouldn't do it and most people who likes my CV said,that it was due I added these things,so hobby is good way to shows your personality.
    • If your English is rubbish (my English is rubbish as you probably noticed already) ,then you can give to professional CV writers BUT give to person who knows your industry (Has real experience with IT) or you make thing much worse!
    • Do not  hide "easy to catch" important details. Shit happens in your life but if you show "lesson learnt" it can turns be a positive thing. For example ,if you got fired ,write what you learnt and how you prevent to make this mistake again.
    • Designer and other creative jobs should have portfolio website.Software developer should have github account.
    • If you put CV online then  add skills that you are good at or you want use in your next job .Otherwise recruiters will spam with weird job (For example I mentioned that i have experience with extjs ,so recruiters send me offer for Sencha Developer (because "Sencha Touch Developers tend to have worked with Ext.js, a skill listed in your CV. Because of it’s a rare skill, I ran a broader search of our database to capture developers that may have worked with ext.js that have since moved on into Sencha Touch. "
    • Good recruiters should point out mistakes in your CV. Adapt his changes as he may work with HR closely ,so he may know which CV catch your future company eye.
    • Add info about your account on Github , LinkedIn ,blogs and so on.

    5 September 2016

    How to test method that uses System.out.print ?

    Did you ever need to  System.out.println ?
     Quite unlikely? Well I am not surprised ,  because you never use it this kind of thing in production. However sometimes when you write some personal piece of software,you don't bother to use debugger or logging and you fancy to use System.out.println instead.

    However as TDD fanatic you would love to test it but question is how ?
    Well, it was something that I was curious about it and after doing wide search on internet and I found that in order to test it you need  set your own printstream, how see example below :).

    Message.java
    public class Message {
        public static void error(String errorMessage) {
            System.err.print("ERROR: " + errorMessage);
        }
     
    }

    MessageTest,java
    public class MessageTest {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        PrintStream original = System.err;


        @Before
        public void setUp() throws Exception {
            System.setErr(new PrintStream(outputStream));
        }

        @After
        public void tearDown() throws Exception {
            System.setErr(original);
        }

        @Test
        public void displayErrorTest() throws Exception {
            //Given
            final String errorMessage = "Test";

            //When
            Message.error(errorMessage);

            //Then
            assertEquals("ERROR: " + errorMessage, outputStream.toString());

        }
    }

    I hope this help

    29 August 2016

    it'quote.031

    "Date class however has numerous flaws: (...) It does not represent... date. Seriously, officially date is "[...] the day of the month or year as specified by a number [...]" whereas in Java it represents point in time without any specific calendar (day/month/year). It has 20+ deprecated methods, including getYear(), parse(String), and many constructors. These methods are deprecated for a reason, because they lead you to believe Date represents, you know, date."
    source: Tomasz Nurkiewicz 

    22 August 2016

    Lesson learnt:000 - Introduction

    When I read Henrik Warne's blog about his way to  lesson learnt from bugs (https://henrikwarne.com/2016/04/28/learning-from-your-bugs/)  , I decided to do the same thing,  because I believe it will help me to be a better developer over time.

    Each blog entry will contains:

    Date - when this happen.
    Story - what happen
    How was discovered - describes how this was found it.
    How many times happen - is it first time or is it a mistake a made few times.
    Fix - how I fix it.
    Caused by me  yes or no
    Could be avoided: yes or no ,
    Time taken to resolve bug:
    Lesson learnt - what  I learnt from mistake and what i can do to not make this mistake in the future.

    18 August 2016

    How to get difference between 2 dates ( LocalDate ) in years , months or days ?

    Solution for :
    Java 8 and above

    STORY:

    August in my month of Java 8 where I try practice various things that are new in Java 8 and I should know already. At some point , I tried to create person  with  birthday stored as LocalDate and get age in years , but I found it that there is no method on Duration to check that. I was wonder can I do it this using only Java 8 . As it turns out yes.

    SOLUTION:
    You need use ChronoUnit class that has a nice method to do this.
    LocalDate birthday = LocalDate.of(1980,4,4);
    ChronoUnit.YEARS.between(birthday,LocalDate.now()));

    EXAMPLE: (To run this example you need copy these 2 classes and add junit and assertJ libraries )


    Person class:
    package dms.pastor.kb.java8.example;

    import java.time.LocalDate;
    import java.time.temporal.ChronoUnit;

    /**
     * Author Dominik Symonowicz
     * Created 18/08/2016
     * WWW:    http://pastor.ovh.org
     * Github: https://github.com/pastorcmentarny
     * Google Play:    https://play.google.com/store/apps/developer?id=Dominik+Symonowicz
     * LinkedIn: uk.linkedin.com/pub/dominik-symonowicz/5a/706/981/
     */
    public class Person {
        String name;
        LocalDate birthday;

        public Person(String name, LocalDate birthday) {
            this.name = name;
            this.birthday = birthday;
        }

        public String getName() {
            return name;
        }

        public int getAge(){
           return Math.toIntExact(ChronoUnit.YEARS.between(birthday,LocalDate.now()));
        }

        public int getAgeInMonths(){
            return Math.toIntExact(ChronoUnit.MONTHS.between(birthday,LocalDate.now()));
        }

        public int getAgeInDays(){
            return Math.toIntExact(ChronoUnit.DAYS.between(birthday,LocalDate.now()));
        }
    }


    PersonTest class:
    package dms.pastor.kb.java8.example;

    import org.junit.Before;
    import org.junit.Test;

    import java.time.LocalDate;

    import static org.assertj.core.api.Assertions.assertThat;

    /**
     * Author Dominik Symonowicz
     * Created 18/08/2016
     * WWW:    http://pastor.ovh.org
     * Github: https://github.com/pastorcmentarny
     * Google Play:    https://play.google.com/store/apps/developer?id=Dominik+Symonowicz
     * LinkedIn: uk.linkedin.com/pub/dominik-symonowicz/5a/706/981/
     */
    public class PersonTest {
        Person person;

        @Before
        public void setup() {
            person = new Person("Dominik", LocalDate.now().minusYears(18).minusMonths(1).minusDays(1));
        }

        @Test
        public void shouldReturn18YearsTest() throws Exception {
            //When
            final int age = person.getAge();

            //Then
            assertThat(age).isEqualTo(18);
        }

        @Test
        public void shouldReturn217MonthsTest() throws Exception {
            //When
            final int age = person.getAgeInMonths();

            //Then
            assertThat(age).isEqualTo(217);
        }

        @Test
        public void shouldReturn28DaysTest() throws Exception {
            //Given
            Person toddler = new Person("Toddler",LocalDate.now().minusDays(28));

            //When
            final int age = toddler.getAgeInDays();

            //Then
            assertThat(age).isEqualTo(28);
        }
    }



    :) I hope, you found this useful