• Post Reply Bookmark Topic Watch Topic
  • New Topic

How do you get started when given an established project?  RSS feed

 
Ranch Hand
Posts: 245
3
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I was placed on an established project and my first story to add a new feature.  It's really simple and if I knew where to go , I think I know how to do what is being asked by me.   However I'm not positive that I'm looking in the correct places .  My initial thought is to run the already established unit tests , ensure they pass.  Then I'll create my own unit test and try and get that to pass.   However I'm still not 100% positive that I'm in the correct area. 
I'm just wondering if anyone has tips ?   What do you do when you get put on an established project to get started?
 
Marshal
Posts: 59438
187
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
What do you know about the old code? Do you know how it works? Has it got a recognisable public interface you can use?
 
Marshal
Posts: 5804
401
BSD
  • Likes 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Do you use any IDE?

If the project is big, one of the mostly used feature of mine is, "search in the path (project)" for text occurences.

  • In case of Eclipse, there is a plugin "STS Quick Search" (Cmd+Shift+L)
  • In case of IntelliJ IDEA it is built in (Cmd+Shift+F [mac], windows similar)
  • NetBeans must have something similar too

  • So you could research the area by the likely keywords. i.e. If you need to add functionality to delete person contacts, look for the places where the functionality for adding contacts exists, search: "addContact", "contact", "person", etc...

    Once you find some occurences you need to be able to read the code and understand how it is implemented and how it works. Unit tests can be a good resource understanding the code usage, so definitely look up for these. And of course write yourself.

    Where to put the code sometimes can be a hard call. Need to think well, where such functionality might belong to, whose responsibility it supposed to be. Starting to write unit tests can help find reasoning for yourself whether the code you are about to write makes sense to put in place X or no.
     
    Sheriff
    Posts: 12102
    197
    Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    Even as an experienced developer, I would ask for someone who is more familiar with the code base to pair up with me and kind of show me around. I would first ask where the tests are. I would try to get a better understanding of the high level architecture and learn how the program code has been organized around it. Knowing that, I would then ask to be shown around the part or parts of the code that I will probably have to integrate with. This is all about building the context around the problem I'm trying to solve and how the feature I will be adding fits into that context.

    If nobody is available or willing to pair with me to do that, I would go to whoever I have to be accountable to to delivery the feature and make sure that they understand that it may take me longer to get my bearings and actually start down the path to completing the work.
     
    Rancher
    Posts: 506
    15
    Java Notepad
    • Likes 1
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    - Know the people who work in that project.
    - Know well the people or person who you will be working with.
    - Verify that what you are understanding (about the new feature) is correct.
    - Know what is expected and when.
    - Know what the practices (or procedures, tools. etc.) are in that project.
    - Find the project resources or repository or wiki (generally there is one).

    In general, good and honest communication helps a lot (don't hesitate to ask relevant questions); its been my experience and I have spent my years working with existing projects and teams and its almost always worked to get one integrated.
     
    Lisa Austin
    Ranch Hand
    Posts: 245
    3
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator

    Campbell Ritchie wrote:What do you know about the old code? Do you know how it works? Has it got a recognisable public interface you can use?



    Sorry for the late reply.   Just my luck that when I try to run a unit test to see if I'm in the correct area , I come up with issues with my Mac.
    I don't know anything in my opinion about this code.  I was just placed on this project .  I was moved from one that I worked from the ground up to this project.  This project is already established , been going on for  over a year.  The story I have looks like something I could work IF I knew where to start ( I think ).
    Regarding public interface.   I apologize , it has interfaces.  I am not 100% sure if that's what you are asking.

    This code is the middle of the application if that makes any sense.  It has a GUI front end , and this is the core .  Front end sends to it and it sends to where ever is applicable.  I'm familiar with the architecture of the application .
     
    Lisa Austin
    Ranch Hand
    Posts: 245
    3
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator

    Junilu Lacar wrote:Even as an experienced developer, I would ask for someone who is more familiar with the code base to pair up with me and kind of show me around. I would first ask where the tests are. I would try to get a better understanding of the high level architecture and learn how the program code has been organized around it. Knowing that, I would then ask to be shown around the part or parts of the code that I will probably have to integrate with. This is all about building the context around the problem I'm trying to solve and how the feature I will be adding fits into that context.

    If nobody is available or willing to pair with me to do that, I would go to whoever I have to be accountable to to delivery the feature and make sure that they understand that it may take me longer to get my bearings and actually start down the path to completing the work.



    Thank You for the advice.  I'm glad to know that I should just KNOW.  I am having trouble getting some help .  I work remotely and my company doesn't have great communication.
     
    Lisa Austin
    Ranch Hand
    Posts: 245
    3
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator

    Liutauras Vilda wrote:Do you use any IDE?

    If the project is big, one of the mostly used feature of mine is, "search in the path (project)" for text occurences.

  • In case of Eclipse, there is a plugin "STS Quick Search" (Cmd+Shift+L)
  • In case of IntelliJ IDEA it is built in (Cmd+Shift+F [mac], windows similar)
  • NetBeans must have something similar too

  • So you could research the area by the likely keywords. i.e. If you need to add functionality to delete person contacts, look for the places where the functionality for adding contacts exists, search: "addContact", "contact", "person", etc...

    Once you find some occurences you need to be able to read the code and understand how it is implemented and how it works. Unit tests can be a good resource understanding the code usage, so definitely look up for these. And of course write yourself.

    Where to put the code sometimes can be a hard call. Need to think well, where such functionality might belong to, whose responsibility it supposed to be. Starting to write unit tests can help find reasoning for yourself whether the code you are about to write makes sense to put in place X or no.




    I use IntelliJ.  I am researching by keywords and trying to create a unit test which may satisfy the requirements and thinking if I could work to get it to pass that maybe the correct way to go about it.    Thanks for adding your feedback.  At least it seems like I have a good approach but I still think I need to ask for a walk through.  The code set is huge.
     
    Lisa Austin
    Ranch Hand
    Posts: 245
    3
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator

    Prasad Saya wrote:- Know the people who work in that project.
    - Know well the people or person who you will be working with.
    - Verify that what you are understanding (about the new feature) is correct.
    - Know what is expected and when.
    - Know what the practices (or procedures, tools. etc.) are in that project.
    - Find the project resources or repository or wiki (generally there is one).

    In general, good and honest communication helps a lot (don't hesitate to ask relevant questions); its been my experience and I have spent my years working with existing projects and teams and its almost always worked to get one integrated.



    Thanks . After reading the responses ( and I appreciate the input ), I have a few things working against I think.   However this helps because I know now that I'm not supposed to JUST know what to do without some help.
     
    Lisa Austin
    Ranch Hand
    Posts: 245
    3
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    Thanks for the feedback.  It REALLY helps.  I'm still new to development and after reading the feedback I feel better that it's not reasonable for my manager and team to expect me to just dive into a project without any help.  My Manager did tell me that he wanted me to take on harder projects and be more independent but from what I am hearing it seems like even if you are experience , some assistance to get started isn't an unreasonable expectation.

    Part of the problem I feel is I work remotely from the team.  They are in another state from me.  Then the fact that everyone is always so busy.

    This code set is part of an on going application and is the core piece.  There is a wiki part which I did read over and I have an high level understanding.   I've been going through unit tests and trying to figure out how to develop my own which will meet the requirements of the story I'm working and my idea was to then try and get that test(s) to work.  

    Thank You all for taking the time to give me tips on this.
     
    Junilu Lacar
    Sheriff
    Posts: 12102
    197
    Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
    • Likes 1
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    starting out with tests is a great approach. However, start by reading existing tests related to the functionality that you're going to develop. If there are none, try to understand the part of the code that you'll be touching or interfacing with. Then write tests to verify your understanding. These are called characterization tests. When you have a sufficient degree of confidence that you understand what's going on in the current code, write a small unit test (singular, key word is "small") to hypothesize about what you think your new code should do. Then implement the small (again the key word) bit of production code to make your test pass. Then read and retread your code and refactor it to eliminate duplication and clarify intent. Repeat this process as many times as needed until there is no new small test you can think of to write to define new functionality.
     
    Junilu Lacar
    Sheriff
    Posts: 12102
    197
    Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
    • Likes 1
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    I would tell your manager that pushing someone into the deep water to teach them to swim is not a good metaphor when it comes to developing software. I would say it's really more like everyone is already in the pool, then you push the guy who doesn't know how to swim in and he soils himself. Now everyone is swimming in dirty water and everyone is going to have to stop swimming, get out, and clean up the pool.

    A better approach is to have a strong swimmer go with the new guy and teach him how to swim. As the new guy learns more, he can venture into deeper water. When the new guy is comfortable enough to go it alone, the strong swimmer can go back to doing his laps, while the new guy builds up his confidence and ability. It won't be long before the new guy will be swimming laps with the rest of the team, too.
     
    Lisa Austin
    Ranch Hand
    Posts: 245
    3
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator

    Junilu Lacar wrote:starting out with tests is a great approach. However, start by reading existing tests related to the functionality that you're going to develop. If there are none, try to understand the part of the code that you'll be touching or interfacing with. Then write tests to verify your understanding. These are called characterization tests. When you have a sufficient degree of confidence that you understand what's going on in the current code, write a small unit test (singular, key word is "small") to hypothesize about what you think your new code should do. Then implement the small (again the key word) bit of production code to make your test pass. Then read and retread your code and refactor it to eliminate duplication and clarify intent. Repeat this process as many times as needed until there is no new small test you can think of to write to define new functionality.




    Thank You.  I'll start trying to do that today and see how far I get.  I'm just worried that because I was assigned a story last Friday night ( started Monday ) and I'm struggling with this that it's going to be frowned on that I will need to ask to push the story on to the next sprint if they want me to work it.   I appreciate the tips regarding this.  No matter how much effort I am putting in to learning have to code and practicing Java and learning other technology I somehow missed  learning  these specific approaches.   
     
    Junilu Lacar
    Sheriff
    Posts: 12102
    197
    Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    There aren't many schools that teach the techniques I mentioned. Companies spend lots of money to bring in coaches to teach professional developers these techniques. That's my day job. This here is just fun because we get responses like yours. Some pros don't respond half as well.
     
    Lisa Austin
    Ranch Hand
    Posts: 245
    3
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator

    Junilu Lacar wrote:I would tell your manager that pushing someone into the deep water to teach them to swim is not a good metaphor when it comes to developing software. I would say it's really more like everyone is already in the pool, then you push the guy who doesn't know how to swim in and he soils himself. Now everyone is swimming in dirty water and everyone is going to have to stop swimming, get out, and clean up the pool.

    A better approach is to have a strong swimmer go with the new guy and teach him how to swim. As the new guy learns more, he can venture into deeper water. When the new guy is comfortable enough to go it alone, the strong swimmer can go back to doing his laps, while the new guy builds up his confidence and ability. It won't be long before the new guy will be swimming laps with the rest of the team, too.



    Thank you x 1000 .   Funny you mention swimming.  When I first started with this company ( as a QA ) I was told that they like to throw people out to the water and hope they sink or swim.  I should have ran but I was experienced with QA so wasn't too worried but I think now if I hear that with any company I'll run.
     
    Lisa Austin
    Ranch Hand
    Posts: 245
    3
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator

    Junilu Lacar wrote:There aren't many schools that teach the techniques I mentioned. Companies spend lots of money to bring in coaches to teach professional developers these techniques. That's my day job. This here is just fun because we get responses like yours. Some pros don't respond half as well.



    Thank You again x 1000 or more for jumping in on this thread and sharing your tips with me then.  I know I just received some invaluable advice from you and others.  To have a candid conversation with experience developers who will share their tips on how they approach things is so helpful and relieving to someone like me.  Again I appreciate it.
     
    Rancher
    Posts: 3538
    39
    • Likes 1
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    "Can you hit the ground running?"
    "Only if the ground is flat and not covered in debris, lava, or other hazards."

    Some companies do seem to think having some form of on-boarding strategy is a sign of weakness...
     
    He's dead Jim. Grab his tricorder. I'll get his wallet and this tiny ad:
    Why should you try IntelliJ IDEA ?
    https://coderanch.com/wiki/696337/IntelliJ-IDEA
    • Post Reply Bookmark Topic Watch Topic
    • New Topic
    Boost this thread!