Developer cross training

0 comentarios

​It was several years ago first time I read about cross training concept, I was back to practice running after few years stopped and no sport practicing in my life. I understood in that moment, some professional dedicated to sports practice other sport or sports as part of their training to improve their metrics.

I've been practicing in the people working with me and myself the concept in Software Development, and it is a fact Developers Cross Training improves developers skills. As the most basic example, if a developer understands how internally web server (IIS, JBoss, Tomcat, Apache or any other web server solution) will identify faster any bug or problem in their code as well as make better decisions to develop a feature in the current software.

Another good example I've seen in he last few years is closer to communications, a developer could be working for a period more closer to the customer, like being part of es features being presented to a customer, it will help developers to deliver a software closer to customer expectations.
I know this has been told in many places and it is part of popular methodologies, but until you don't practice for a period of time you don't see how good is the idea and how good result could be.

Here is where team rotations is a good tool to apply developers cross training concept, a developer could rotate to be a product owner assistant for a period of time or a product owner could rotate to a customer service role. It is not just the benefit to improve people skills as Cross Training improves in people what day by day work don't, and also, it helps developers and others to know and discover what they really watt for their professional careers.
Read On

Android Maps Utils : Markers in the same location

0 comentarios

Recently, I came across with a request in the library Android Maps Utils which requested a fix for a problem when the markers have exact the same location. As this is a library I used recently and I was reading the code when I was integrating in an Android App, I just decided to implement the feature and here you can find the experience. All the details regarding the changes can be found in this pull request.

In case you want to include this functionality in your app, until the pull request is not accepted you would need to generate the library file including the pull request and then include it in your project through Gradle. After that, you can include to your map as shown in the code below:

mClusterManager = new ClusterManager<>(this, getMap()); 
getMap().setOnMarkerClickListener(mClusterManager);
getMap().setOnCameraMoveListener(mClusterManager);

mClusterManager.cluster();

The default implementation will distribute the markers with the same location around the real lat/long value following a circle when the user tap on the marker containing all the markers in the same location. To distribute the markers, the zoom level shown has to be the maximum zoom level, and once the user makes a zoom out all the markers distributed will be relocated to the original cluster.

Of course, this could be implemented in many ways and with different approaches, this is just an example of a way to get the feature implemented, I just wanted to get fun implementing and sharing with the world. It is important to mention a change needed in the ClusterItem interface could produce a backward compatibility problem as a copy has been added.

/**  * Produces a copy of the same object but setting the given location.
 *
 * @return The new object copied.
 */
ClusterItem copy(double lat, double lng);
As you can see in the first code block, cluster manager needs to be set up to listen camera moves actions on the map, if you also need to listen to the same events in your app or code just do as the code below:

mMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
        @Override
        public void onCameraMove() {
            mClusterManager.onCameraMove(); 
            // your onCameraMove code
        }
});
 You can place your code also before call mClusterManager.onCameraMove(); or even call mClusterManager.onCameraMove(); only when you need to distribute the markers of the cluster, it will depend in your app needs.

As mentioned, the default distributor for a cluster with all the markers in the same location distributes them in a circle, and it can be replaced just calling to mClusterManager setClusterItemsDistributor(mYourDistributorImplementation);. In case you need to implement your own distributor you need to implement the interface ClusterItemDistributor.

/**  * It distributes the items in a cluster.
 */
public interface ClusterItemsDistributor {

    /**
     * Proceed with the distribution of the items in a cluster.
     */
    void distribute(Cluster cluster);

    /**
     * Proceed to collect the items back to their previous state.
     */
    void collect();
}
Just take into account distribute(Cluster cluster); needs to distribute all the items in the cluster and collect(); needs to get the markers to their original state and cluster, see DefaultClusterItemsDistributor as an example.

Please, if you use this feature or you implement your own distributor let me know, or if you have any feedback or question I will be more than happy to listen and improve what I've done, helping others and getting help from others is the way to learn something new every day.
Read On

Mobile and beyond

0 comentarios

I want to begin this article mentioning it is a suggestion made by a teammate 1 or 2 months ago, a teammate who moving to do his dream and do what he likes and enjoys, this is a bitter-sweet feeling although I am always happy when people find their dreams and passions, anyway this is a different history.

My goal with this article is to share my thoughts and the journey in the team I work with in terms of which is the best approach in terms of technology for a mobile App development, it is a no easy decision to be made,

I've started in Mobile Development around 2005 when J2ME promised to develop an App in Java with to ability to run in many devices, but the reality was that lot of specific configurations, images and even code was needed depending on the device. Also, I remember we had many mobiles to tes same App in maximum variants as possible. This changed massively when Android and iOS came on board, I remembered my first iPhone Dev Conf in Madrid around 2009 where everything looked very promising to develop nice Apps although the programming language looked very odd to me. With Android and iOS a big step was made, they helped developers to don't get disturbed about screens sizes and different behaviors for device features like GPS, camera and others.

We can say after this new era with Android and iOS, hybrid solutions like PhoneGapp, Ionic and others appeared, but I've tried for a couple of times and they didn't convinced me for high performance Apps managing a certain amount of data, although for small Apps and for quick prototyping is probably the best choice. I've discovered those options around 2013, a bit late maybe but I've released at that moment 10 Android and iOS Apps, my bet at that moment and know is to develop Android and iOS Apps instead of use Hybrid options, maybe because I was more use to those platforms and it would be faster.

The next big step in Mobile Development is happening now from my point of view, where new "Hybrid" solutions are getting more popular in the market, we are talking about Xamarin and others. I came across Xamarin few years ago and I've recognized I've started to investigate more once Microsoft bought it. More and more Apps are being developed in Xamarin and from my point of view the key point of this is because the user interface can be defined once and it looks like the same App not just in mobiles and tablets running the same Operating System, it looks like the same in different operating systems, although my view is that a particular feature in the mobile is needed (let's say gyroscope) could be a big challenge for the Developers, needed a particular implement in each OS and imported as external library in Xamarin, probably acceptable in most of the cases.

Xamarin has let me discover other option in this Mobile Development World, its name is flutter (it seems supported by Google) and it promises one development for several platforms, although it is in a early stage and looks very young yet, but it will be good to see how it progresses.

I want to make clear I'm writing about my opinion and experience, which could be wrong but it will be nice to write a new article in the future if things change or my view is different cause I collect ore information and experience. It is a reality people in the street is very familiar with Android and iOS devices and I don't think it will change in the recent future although businesses are b coming more Microsoft friendly in terms of devices, it seems because security reasons. That means if you want to develop an App for people my bet would be for both Android and iOS Development, and if you want to develop an App for private businesses yes should probably go for Xamarin which will let you run your App in Microsoft devices but also in Android and iOS in case some businesses want to use other devices with your App.


It is very difficult to see really the next big step after the current one happening, I would say there are few questions to be answered like which is the roadmap of Xamarin to be followed by Microsoft I the next few years? Will Google introduce Flutter as one single solution to develop Apps in Android removing Java as an option? Apple see,s to be also in the same "Hybrid" way with one solution to develop Apps for mobiles, tablets, laptops, etc running OS X or iOS, will be iOS a substitution of OS X? Probably functional programming will be also an important variable in the equation of the next step in Mobile Development tale, it looks a very good language for UI, another chapter or spin-off in the history of Mobile Development would be.
Read On

After 6 months automating tests with QA Team

0 comentarios

I've read several times in the last few months that there are companies removing Test or QA Teams in the organization. Something that was like a "seriously? It can't be as testing ensure the quality and quality is one of the most important thing if not the most in product development", but after a few months tuning the ALM I was involved I've started to understand what the comment "that company has removed QA" means. I have to say I didn't read more than comments about remove QA, I never red the reasons, probably because I didn't want to know as I thought on that as something unthinkable.

If we imagine the usual situation where there are teams developing the software and teams testing the software, some years ago those teams where located in different places even in the same office, but now companies are moving them together, QA team member next one or two or even three developers, keeping the communications faster and clearer which is one of the key of the QA - Development relationship.

6 months ago we started building our QA Team with our first member, sitting down next to Developers and understanding how company runs Development Lifecycle, and at some point our QA player started to write UI, Integration and Instrumentation tests, so he became to be part of Development Team but not developing code or fixing bugs, everything related to testing the code to be written or already written.

After few months running this experience we can say it has been great for both parties, developers and testers feel they are the same team and they are developing the same product, giving to that product the right quality. Now, we can say or understand QA Team Members are becoming part of the Development Team, removing the words QA Team, but behind the scenes QA is still present.
Read On

QA is not testing

2 comentarios

Let's say we are part of an Agile team, running sprints to develop a software product where developers, testers, product owners and scrum masters are collaborating to deliver new features or functionalities in each sprint. One the classic discussions are around testing within sprint or testing after the sprint, but let's have a quick look to both approaches.

Testing within the sprint could mean that developers write Unit Tests and Code as first thing in the sprint and deliver the new code to QA Team some days before the sprint ends to let run testing plan and see if new code is bugs free.

In the other hand, testing after Sprint ends could mean developers are focused in write the new functions and features while running the sprint and the code is released to QA Team once sprint ends, letting developers to run a new sprint.

My thought came to my mind when running running sprints following the first approach (testing within sprint) developers were always delivering new features to QA Team with a very tight time to run the testing plan. We made the decision to run testing plan at the beginning of the next sprint, which means developers would prepare a new release ready to test when Sprint ends and move to the next Sprint. This helped to let the Developers understand the release ready to test should be under proper testing (developer testing) as they are the owners of the work delivered, letting QA Team to be focused on ensuring the software works as the Product Owner defined.

With QA is not testing we say Developers proceed with the testing of the new code written, following TDD they test their code runs properly and put in the output the expectations for the given inputs. With this Development Testing in place, he QA Team will run testing plan rounds being focused in the functionalities, ensuring the quality of the product meet expectations.

Of course this is not a must, each team should find their path at any moment and look always to the results to see if they should tune their current process, an specific approach could work for a particular moment developing a particular product with particular team members, a change in the equation could produce a change in the approach followed, just keep looking yourself to keep moving to the great success.
Read On