Archive for the ‘agile’ Category.

Injecting new skills into the team

Last week I passed through a very nice experience, so, I couldn’t hold my self about the desire to share it.

Out team needed to build something really new and a bit though, also we have a very mixed skill sets in the team, furthermore we had to bring awareness to everybody about what should be done and how, but we had no easy way of doing this. The solution couldn’t be better, we defined two sessions of what I called “team design/programming”, where we locked ourselves into a room, using a notebook and a 50″ TV, this way everyone could see what was happening. We started presenting the goal of that session, what we would look for, what to build, the platform we’re aiming and so on.

After that we started coding and all of us could code a bit, fix, re-factor, bring new ideas, ask questions, discuss and help. That was really an amazing experience, in despite of the fact that sometimes someone wanted to dominate the notebook ( that includes myself :D ). The bottom line of these sessions was a well defined platform, everybody having the knowledge about what we did, why, how, the ability to provide support to other teams, and now we have these new skills into the team. That was really astonishing.

Bringing new people into the team

Change is always something stressing at some level, because there is uncertainty, energy must be spent to adapt, react, change minds, learn new skills and so on. I’ve passed through the experience of move from companies and also moving from different teams inside the same company, and I learned something very useful about it.

It’s a very simple rule of making the newcomer comfortable with the new environment, making things clear and easy to him/her, give them time to breath and perceive the environment. Also, the team should be supportive to this new person, because the adaptation will be at the speed of light in comparison of any other kind of environment.

A good bookshelf

Well, I’ve been postponing this for so long, but not anymore :)

If you didn’t already read my post about learning, please read it first.

These are the books I consider nice books to learn how to program, what is agile methodologies, OO/OOAD, Java/J2EE/JEE and Software Architecture.

1) To learn learn Java and JEE you should read this books :

Head First Java, 2nd Edition -> This book is a very nice and didactic introduction about Java (Fundamentals).

Test Driven Development: By Example -> The title talks for itself.

SCJP Sun Certified Programmer for Java 6 Exam 310-065 -> If you want to take the certification and have an in depth explanation about some core java subjects, this book is for you. (Fundamentals)

Head First Servlets and JSP -> This book is about Web Development with Java, and also a help to pass in the certification, this book is part of Head First Series, that is a very didactic reading.  When I was studying Java Web Development, I used the next one, but feel free to choose the most convenient 4u. ( Web Dev )

SCWCD Exam Study Kit -> The same subject as the previous one. Actually there is a second edition of this book, but as I don’t read it yet, I’m suggesting the first edition. ( Web Dev )

Head First EJB -> The best book to learn the fundamentals of EJB 2.x spec. Of course this specification became deprecated with the introduction of EJB 3 spec, but there still a lot of things running on the previous spec in the world. So, it’s nice to know how things work if you have to provide some maintenance on this ( Distributed Programming )

Mastering Enterprise JavaBeans, 3rd Edition -> The same as before, but this book will give you another view ( not so didactic ) about EJB 2.x ( Distributed Programming )

EJB Design Patterns: Advanced Patterns, Processes, and Idioms -> Almost the same thing as I wrote for Head First EJB… if you want or need to develop something on that way, take a look at this book. ( Distributed Programming )

Enterprise JavaBeans 3.0 (5th Edition) -> Now we got the an interesting point. In this book you’ll learn the new way of develop distributed components using the EJB 3.0 spec. This book shows how to work with business components as pojos, the life cycle, mapping the database ( JPA ) and more. ( Distributed Programming )

Java Messaging -> Here you will learn distributed programming model in java using asynchronous messages and JMS.

Core J2EE Patterns: Best Practices and Design Strategies (2nd Edition) -> Design Patterns focused on the J2EE world.

2) To learn Software Integration, SOA and EAI :

Service-Oriented Architecture (SOA): Concepts, Technology, and Design -> This is a award winner book about SOA. Here you’ll learn the guts of SOA, the concepts, what is a service, how to build a service, how to compose a service, what is the true and the false SOA. This book is a must read for every one that wants to work with software integration. ( Distributed Programming / SOA )

SOA Principles of Service Design -> A sweet continuation of the above subject. ( Distributed Programming / SOA )

Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions -> A book about Enterprise Application Integration. This book shows lots of design patterns about how to handle software integration using messaging. ( Distributed Programming / EAI / Messaging )

3) If you wanna learn about what UML is and how to use it, then this books will help you :

UML Distilled -> Although this book is about the old UML specification (1.3) I still consider it a good introduction, but feel free to choose any other you want !!!!

4) Learning OOAD :

Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) -> As the book’s title said.

5) To Learn Design Patterns and Software Architecture :

Head First Design Patterns -> An introduction about what design patterns are and how to use it properly. I recommend you to read this book first because it was written on a simple, visual and didactic language, and you won’t have to fight with the complex code that the Gamma’s book will show you ;)

Design Patterns: Elements of Reusable Object-Oriented Software -> This is the design patterns book ! At this point things will become very interesting. Here you’ll learn in depth how to apply design patterns to avoid code duplication, bad designs and make you software flexible enough to accommodate changes easily and keep woking. The down side of this book is the C++ syntax, but indeed this is one of the best books you ever read !

Patterns of Enterprise Application Architecture -> This is an awesome book about Enterprise Software Architecture. This one is a must read for all enterprise software developers. It covers a wide range of topics, such as layering your application, concurrency, domain models, remoting, presentation patterns and more.

Pattern-Oriented Software Architecture Volume 1: A System of Patterns -> Another great book about software architecture, here you’ll learn a more general SA.

Software Architecture in Practice (2nd Edition) -> Another sweet SA book. This one has lots of good contents about what is an architecture, how to create it, how to document, evaluate and analyze the costs. Throughout the book you’ll see very beautiful examples about many different systems challenges and their solution.

Domain-Driven Design: Tackling Complexity in the Heart of Software -> Here Eric Evans brings valuable thoughts and teachings in how to design a good and functional software taking care, modeling and preserving the domain model.

Applying Domain-Driven Design and Patterns: With Examples in C# and .NET -> Maybe the concepts of Evans book will be dense to digest, so this book will help us with some other practical examples.

6) Learning about Agile Software Development :

Extreme Programming Explained: Embrace Change (2nd Edition) -> The roots of XP development.

Agile Project Management with Scrum (Microsoft Professional) -> Scrum from manager’s perspective (Scrum Master).

Agile Software Development with SCRUM -> Scrum for software developers.

Lean Software Development: An Agile Toolkit -> Lean principles in software development management and process.

Well, I’m gonna stop by here, what else I will propose you to buy the whole amazon website + the company :D

I will revisit this subject sooner, trying to bring something else to share with you. Another tip I want to share it that you should not feel unmotivated because there are so many books up there !!!

You don’t need, you can’t and you won’t read everything at once ! what else you’ll need a psychiatrist, in order to help you to recover you mind. As I don’t want you to damage your brain, I will ask you to follow my tips :

I tried to put the books on some kind of “natural” way, kind from beginning to expert, but feel free to choose whatever fit in your needs, you can mix basic ones with distributed computing or even architectural with methodologies. I tried to make it easy for novices to have an “easier” path to go, but you can build your own path and feed your knowledge hungry !

I hope I could help you to learn more and better, feel free to post a comment back !

See Ya !

Product BackLog

Few days ago I was talking to some friends here about scrum, it’s roles (scrum master, product owner and the team), and the artifact we work with “The product backlog”.

Then we started to discuss about the product backlog scope, how things appear there, how to manage it, and so on. Then he complained that he disagree about the idea that scrum says that we cannot keep put things inside the sprint backlog after we have started the sprint.

Well, the thing is that scrum has a work flow to operate upon, that is the SPRINT BACKLOG ! the backlog is the artifact where the development will be driven by implementing it. Also, the sprint backlog was chosen by the product owner as the most valuable features to be implemented, and of course we won’t be able to implement everything on a single sprint ( I’m talking about to develop an Enterprise Software ). Furthermore, team has also committed themselves that it’s a feasible work to be done.

Saying that means that it’s not possible to keep inserting things in the middle of the sprint, develop, test and integrate it. It will be possible to add more things if we are ahead of schedule, of course nobody wants to be stopped waiting for the next sprint. But we should be careful about this, what else we’re going to merge 2 or more sprints in one, and we won’t be able to deliver anything in the end.

That is the role of Scrum Master, to coach/mentor the team and the product owner, remove anything that is blocking the work to be done, and facilitate people’s lives.